Flutter网络请求完全指南
lutter 网络请求完全指南(从入门到实战,一次搞定)
http、王者 dio、拦截器、缓存、错误处理、文件上传下载、Token 刷新、封装通用类。一、最常用的两个网络库
1. http(官方基础库,轻量)
dependencies: http: ^1.1.0
2. dio(企业级首选,功能最强)
dependencies: dio: ^5.4.0 pretty_dio_logger: ^1.3.1 # 日志打印
二、GET 请求(最常用)
1. http 实现
import 'package:http/http.dart' as http;Future<void> fetchData() async {
final response = await http.get(Uri.parse('https://api.example.com/data'));
if (response.statusCode == 200) {
print(response.body);
}}2. Dio 实现(推荐)
import 'package:dio/dio.dart';Future<void> fetchData() async {
Dio dio = Dio();
Response response = await dio.get('https://api.example.com/data');
print(response.data);}三、POST 请求
// Dio Postawait dio.post(
'https://api.example.com/login',
data: {
'username': 'test',
'password': '123456',
},);四、请求头、Token、参数
Response response = await dio.get(
'url',
queryParameters: {'page': 1, 'size': 10}, // URL 参数
options: Options(
headers: {
'Authorization': 'Bearer $token',
'Content-Type': 'application/json',
},
),);五、Dio 拦截器(核心!企业必备)
dio.interceptors.add(InterceptorsWrapper(
onRequest: (options, handler) {
// 添加Token
options.headers['Authorization'] = 'Bearer xxx';
return handler.next(options);
},
onResponse: (response, handler) {
return handler.next(response);
},
onError: (e, handler) {
print('出错啦:${e.message}');
return handler.next(e);
},));// 日志插件(超级好用)dio.interceptors.add(PrettyDioLogger());六、文件上传(FormData)
FormData formData = FormData.fromMap({
'file': await MultipartFile.fromFile('path/image.jpg'),});await dio.post('upload', data: formData);七、文件下载
await dio.download(
'https://example.com/file.pdf',
'/save/path/file.pdf',
onReceiveProgress: (count, total) {
print('进度:$count / $total');
},);八、错误处理(完整)
try {
await dio.get('url');} on DioException catch (e) {
if (e.type == DioExceptionType.connectionTimeout) {
print('连接超时');
} else if (e.response?.statusCode == 401) {
print('Token 过期');
}}九、企业级 Dio 封装(万能模板)
class HttpUtil {
static late Dio dio;
static void init() {
dio = Dio(BaseOptions(
baseUrl: 'https://api.example.com',
connectTimeout: Duration(seconds: 10),
receiveTimeout: Duration(seconds: 10),
));
dio.interceptors.add(PrettyDioLogger());
}
static Future get(String url, {Map<String, dynamic>? params}) async {
try {
Response res = await dio.get(url, queryParameters: params);
return res.data;
} catch (e) {
print(e);
return null;
}
}
static Future post(String url, {dynamic data}) async {
try {
Response res = await dio.post(url, data: data);
return res.data;
} catch (e) {
print(e);
return null;
}
}}HttpUtil.init();HttpUtil.get('/user').then((data) {
print(data);});十、你可能需要的高级功能
JSON 解析:json_serializable
请求缓存:dio_cache_interceptor
Cookie 管理:cookie_jar
多请求取消:CancelToken
自动刷新 Token:拦截器实现
请求加密 / 签名:拦截器统一处理
我可以给你提供
完整 Flutter 网络请求封装项目模板
带状态管理(Provider/Riverpod)的网络请求
带刷新 Token + 重试机制
带 JSON 解析自动生成工具







