Flutter网络请求构建插件dio_builder的使用
Flutter网络请求构建插件dio_builder的使用
DioBuilder 是一个 Dart 库,它提供了构建模式来配置和创建 Dio HTTP 客户端的实例。它抽象了常见的配置和拦截器,以便更轻松地设置和使用 Dio 进行网络请求。
安装
在你的 pubspec.yaml
文件中添加 dio_builder
:
dependencies:
dio_builder: ^3.0.0 # 替换为最新版本
然后运行 flutter pub get
来安装依赖。
使用
1. 导入必要的库
import 'package:dio_builder/dio_builder.dart';
import 'package:dio/dio.dart';
2. 初始化 DioBuilder
final dioBuilder = DioBuilder();
dioBuilder.initialize();
3. 配置并构建你的 Dio 实例
final dio = dioBuilder
.setBaseUrl('https://api.example.com') // 设置基础URL
.setContentType('application/json') // 设置内容类型
.setHeaders({'Authorization': 'Bearer YOUR_ACCESS_TOKEN'}) // 设置自定义头
.build();
4. 使用 Dio 实例进行 HTTP 请求
try {
final response = await dio.get('/some-endpoint'); // 发送 GET 请求
// 处理响应
} catch (e) {
// 处理错误
}
配置
DioBuilder 提供了多种方法来配置你的 Dio 实例:
setBaseUrl
: 设置 API 的基础 URL。setContentType
: 设置请求的内容类型。setHeaders
: 设置请求的自定义头。setFollowRedirects
: 启用或禁用跟随重定向。setExtras
: 设置请求的额外选项。setQueryParameters
: 设置请求的查询参数。setListFormat
: 设置序列化的列表格式。setMethod
: 设置请求的 HTTP 方法。setDefaultTimeOut
: 设置网络请求的默认超时时间。setResponseType
: 设置请求的响应类型。setPersistentConnection
: 启用或禁用持久连接。setMaxRedirects
: 设置要跟随的最大重定向次数。setReceiveDataWhenStatusError
: 设置在状态为错误时是否接收数据。
你可以链式调用这些方法以根据需求配置 DioBuilder。
拦截器
DioBuilder 包含一些默认的拦截器:
- 日志拦截器:记录 HTTP 请求和响应。
- 重试拦截器:自动重试失败的请求。
你可以使用 addLogger
和 allowRetryInFailed
方法添加或移除拦截器。
示例
以下是使用 DioBuilder 发送不同类型请求的一些示例:
GET 请求
final response = await dioBuilder.get(
endPoint: '/get-endpoint',
data: {'param1': 'value1'},
);
POST 请求
final response = await dioBuilder.post(
endPoint: '/post-endpoint',
data: {'param1': 'value1'},
);
PUT 请求
final response = await dioBuilder.put(
endPoint: '/put-endpoint',
data: {'param1': 'value1'},
);
DELETE 请求
final response = await dioBuilder.delete(
endPoint: '/delete-endpoint',
data: {'param1': 'value1'},
);
处理响应
你可以通过 response.data
访问响应数据。例如:
final responseData = response.data;
处理错误
如果请求过程中发生错误,它将在 catch
块中被捕获。例如:
try {
final response = await dioBuilder.get(
endPoint: '/non-existent-endpoint',
data: {'param1': 'value1'},
);
} catch (e) {
// 处理错误
}
示例代码
以下是一个完整的示例代码,展示了如何使用 DioBuilder 进行网络请求:
import 'dart:async';
import 'package:dio_builder/dio_builder.dart';
import 'package:flutter/material.dart';
void main() {
runApp(const MyApp());
}
// 示例使用 DioModule 类
void exampleUsage() async {
final dioClient = DioClient();
final responseData = await dioClient.getData('/users');
print(responseData);
final postData = {
'name': 'John Doe',
'email': 'john@example.com',
};
final response = await dioClient.postData('/users', postData);
print(response);
}
class MyApp extends StatefulWidget {
const MyApp({super.key});
[@override](/user/override)
State<MyApp> createState() => _MyAppState();
}
class _MyAppState extends State<MyApp> {
[@override](/user/override)
void initState() {
super.initState();
}
[@override](/user/override)
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: const Text('插件示例应用'),
),
body: const Center(
child: Text('运行于: '),
),
),
);
}
}
class DioClient extends DioBuilder {
// 自定义方法或属性可以在这里添加
DioClient() {
baseUrl = 'https://api.example.com'; // 设置基础URL
addLogger(); // 添加日志拦截器
allowRetryInFailed(); // 允许在失败时重试
setDefaultTimeOut(10); // 设置默认超时时间为10秒
}
/// 发送 GET 请求以从指定的 [endpoint] 获取数据。
/// 返回响应数据作为动态对象。
Future<dynamic> getData(String endpoint) async {
try {
final response = await get(endPoint: endpoint);
return response.data;
} catch (e) {
// 处理错误
rethrow;
}
}
/// 发送 POST 请求以向指定的 [endpoint] 发送数据。
/// [data] 参数表示要发送的有效载荷。
/// 返回响应数据作为动态对象。
Future<dynamic> postData(String endpoint, dynamic data) async {
try {
final response = await post(endPoint: endpoint, data: data);
return response.data;
} catch (e) {
// 处理错误
rethrow;
}
}
[@override](/user/override)
void handleOnResponse(
Response<dynamic> response, ResponseInterceptorHandler handler) {
// 自定义响应处理逻辑
}
[@override](/user/override)
void handleOnRequest(
RequestOptions options, RequestInterceptorHandler handler) {
// 自定义请求处理逻辑
}
[@override](/user/override)
void handleOnError(
DioException dioException, ErrorInterceptorHandler handler) {
// 自定义错误处理逻辑
}
// 根据需要添加更多方法以支持不同的 HTTP 请求类型和功能
}
更多关于Flutter网络请求构建插件dio_builder的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter网络请求构建插件dio_builder的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
dio_builder
是一个基于 Dio
的网络请求构建插件,它可以帮助你更简洁、更高效地构建和管理网络请求。Dio
是 Dart 语言中一个非常流行的网络请求库,而 dio_builder
则是对 Dio
的一层封装,提供了更加便捷的 API 和功能。
安装 dio_builder
首先,你需要在 pubspec.yaml
文件中添加 dio_builder
依赖:
dependencies:
dio_builder: ^1.0.0
然后运行 flutter pub get
来安装依赖。
基本用法
dio_builder
提供了 DioBuilder
类来构建网络请求。你可以通过 DioBuilder
来设置请求的 URL、方法、参数、头部等信息。
import 'package:dio_builder/dio_builder.dart';
void main() async {
// 创建 DioBuilder 实例
var dioBuilder = DioBuilder();
// 发送 GET 请求
var response = await dioBuilder.get(
'https://jsonplaceholder.typicode.com/posts/1',
);
print(response.data);
}
设置请求参数
你可以通过 queryParameters
设置查询参数,通过 data
设置请求体。
var response = await dioBuilder.get(
'https://jsonplaceholder.typicode.com/posts',
queryParameters: {'userId': '1'},
);
var postResponse = await dioBuilder.post(
'https://jsonplaceholder.typicode.com/posts',
data: {
'title': 'foo',
'body': 'bar',
'userId': 1,
},
);
设置请求头
你可以通过 headers
设置请求头。
var response = await dioBuilder.get(
'https://jsonplaceholder.typicode.com/posts/1',
headers: {'Authorization': 'Bearer your_token'},
);
拦截器
dio_builder
也支持拦截器,你可以在请求发送前或响应返回后进行一些处理。
dioBuilder.addInterceptor(InterceptorsWrapper(
onRequest: (options, handler) {
// 在请求发送前处理
print('Request: ${options.uri}');
handler.next(options);
},
onResponse: (response, handler) {
// 在响应返回后处理
print('Response: ${response.data}');
handler.next(response);
},
onError: (DioError e, handler) {
// 在请求出错时处理
print('Error: ${e.message}');
handler.next(e);
},
));
错误处理
你可以通过 try-catch
来处理请求中的错误。
try {
var response = await dioBuilder.get('https://jsonplaceholder.typicode.com/invalid');
print(response.data);
} catch (e) {
print('Error: $e');
}
自定义 Dio 实例
如果你需要自定义 Dio
实例,可以通过 DioBuilder
的 dio
属性进行设置。
var dio = Dio(BaseOptions(
baseUrl: 'https://jsonplaceholder.typicode.com',
connectTimeout: 5000,
receiveTimeout: 3000,
));
var dioBuilder = DioBuilder(dio: dio);