// 新建一个以http_request.dart命名的dart文件
// 引入
import 'package:dio/dio.dart';
// 新建一个以config.dart命名的dart文件
import 'package:helloflutter/service/config.dart';
import 'dart:core';
class HttpRequest {
/**
* --使用Dio库进行网络请求的初始化设置
* --BaseOptions是Dio库中的一个类,用于配置基本的请求选项
*/
static final BaseOptions baseOptions = BaseOptions(
baseUrl: HttpConfig.baseURL,
connectTimeout: Duration(seconds: HttpConfig.timeout));
static final Dio dio = Dio(baseOptions);
/**
* --params为命名可选参数,但是值却为null
* --在声明params时指定了它的默认值为null,而Dart不允许将null赋给非可空的参数,这就导致了这个错误
* --1:移除默认值 原:Map<String, dynamic> params 现:Map<String, dynamic>? params
* --2:提供非空的默认值:Map<String, dynamic> params = const {}
*/
static Future<T> request<T>(String url,
{String method = "get", Map<String, dynamic>? params}) async {
/**
* 创建单独个性化配置
*/
final options = Options(method: method);
/**
* 发送网路请求
*/
try {
Response response = await dio.request(url, queryParameters: params, options: options);
return response.data;
} on DioError catch (error) {
/**
* return 错误
*/
return Future.error(error);
}
}
}
// 新建一个以config.dart命名的dart文件
class HttpConfig {
static const String baseURL = "https://httpbin.org";
static const int timeout = 5000;
}
// main.dart文件测试
import 'dart:io';
import 'package:flutter/material.dart';
import 'package:dio/dio.dart';
import 'package:helloflutter/sertvice/http_request.dart';
main() => runApp(MyApp());
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
debugShowCheckedModeBanner: false,
home: HomePage(),
);
}
}
class HomePage extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text("基础模板"),
),
body: HomeContent(),
);
}
}
class HomeContent extends StatefulWidget {
@override
State<HomeContent> createState() => _HomeContentState();
}
class _HomeContentState extends State<HomeContent> {
@override
void initState() {
// TODO: implement initState
super.initState();
// 原始请求
// final dio = Dio();
// dio.get('https://httpbin.org/get').then((value) => {
// print('value:${value}')
// });
// dio.post('https://httpbin.org/post').then((value) => {
// print('value:${value}')
// });
// 新封装请求
HttpRequest.request("https://httpbin.org/get",params:{"name":"jack"}).then((res){
print(res);
});
}
@override
Widget build(BuildContext context) {
return Text("网络请求封装");
}
}
最后面进行Restart 调用成功
学习记录20231016