Flutter网络请求插件flutter_network_layer_dio的使用
Flutter网络请求插件flutter_network_layer_dio的使用
1. 整理后的内容中关于“Flutter网络请求插件flutter_network_layer_dio的使用”的完整示例demo
import 'package:flutter_network_layer_dio/flutter_network_layer_dio.dart';
void main() async {
final INetworkInvoker networkInvoker = DioNetworkInvoker(onLog: _onLog);
await AppNetworkManager.networkInvoker.init('https://jsonplaceholder.typicode.com');
final request = RequestUser(id: 1);
final response = await networkInvoker.request(request);
response.when(
success: (response) {
print('DATA: ${response.data}');
},
error: (error) {
print('ERROR: ${error.message}');
},
);
}
abstract final class AppNetworkManager {
static final INetworkInvoker networkInvoker =
DioNetworkInvoker(onLog: _onLog);
static void _onLog(NetworkLog log) {
print('[${log.type}] ${log.message}');
}
}
final class ResponseUser extends JsonResponseModel {
const ResponseUser({
required this.id,
required this.name,
});
const ResponseUser.empty()
: id = 0,
name = '';
final int id;
final String name;
@override
ResponseUser fromJson(dynamic json) {
assert(json is Map<String, dynamic>, 'json is not a Map<String, dynamic>');
final map = json as Map<String, dynamic>;
return ResponseUser(
id: map['id'] as int,
name: map['name'] as String,
);
}
@override
Map<String, dynamic> toJson() {
return {
'id': id,
'name': name,
};
}
@override
String toString() =>.toJson().toString();
}
final class RequestUser extends RequestCommand<ResponseUser> {
RequestUser({required this.id});
final int id;
@override
String get path => '/users/$id';
@override
ResponseUser get sampleModel => const ResponseUser.empty();
}
2. 关于“Flutter网络请求插件flutter_network_layer_dio的使用”的内容解释
标题:Flutter Network Layer
flutter_network_layer_dio
- 提供了网络层的实现,使用了Dio包。因此,包括了定义在网络层中的Dio包。
- Table of Contents
- General Information
- 使用该包的流程:
- 创建自己的
ResponseModel
来定义响应类型(例如GetTodoResponse
)。 - 创建自己的
RequestCommand
来定义请求属性(例如method
,url path
,headers
,payload
等)。 - 创建一个
INetworkInvoker
对象从该包的一个实现(例如DioNetworkInvoker
)。强烈推荐使用get_it
来创建单例实例。 - 在业务逻辑中,创建一个
RequestCommand
对象并发送给INetworkInvoker
对象以获取响应。
- 创建自己的
- 使用该包的流程:
- General Information
Class Diagram
Command Pattern Like Request Management
- 此包使用与命令模式类似的架构来管理请求。
- 每个请求都是可以作为
INetworkInvoker
接口的request
方法参数执行的命令。 - 请求命令可以通过实现
RequestCommand
类来创建。RequestCommand
类包含描述请求的字段,如HTTP请求方法、请求头、负载等。 请求通过执行INetworkInvoker
的request
方法发送到服务器。
Implementation with Dio
- Dio是一个强大的Dart/Flutter项目HTTP客户端。此包提供了名为
DioNetworkInvoker
的INetworkInvoker
接口的实现。
Features
- 模块化且易于插拔的架构。
- 命令模式类似请求管理。
- 易于与依赖注入框架集成,如
get_it
。 - 日志触发函数用于与产品级别的日志集成。
Use in Your Project
- Tests: 测试在
test
目录中演示如何使用网络层。example
应用是一个简单的Dart程序,使用此包从服务器获取数据。 - Example Project:
example_flutter_dio
是使用flutter_network_layer_dio
的好例子,展示了如何在Flutter项目中使用它。此示例还包括get_it
来创建INetworkInvoker
的单例实例。在示例中,使用了logger
包作为日志器,并将DioNetworkInvoker
的onLog
函数设置为接收此包的日志。
Steps to Use the Network Layer
- 将网络模块添加为项目的
pubspec.yaml
文件中的依赖项。 - 创建自己的响应模型(例如
ResponseUser
)。 - 创建自己的请求模型(命令),例如
RequestUser
。 - 最后,您可以使用名为
DioNetworkInvoker
的网络调用器向服务器发送请求。以下示例演示如何向服务器发送请求并处理响应。
Listen the Logs of the Package
- 包提供了一个日志触发函数用于与产品级别的日志集成。可以通过调用
NetworkModule
类的setLoggingTrigger
函数来设置日志触发函数。
Dio Interceptors
- Dio拦截器可以通过传递它们作为
DioNetworkInvoker
类构造函数的参数来添加到网络调用器。当init
方法被调用时,它们会被添加到Dio实例。有关拦截器的更多信息,请参阅Dio文档。
License
MIT License
Copyright © 2025 Faruk Emre
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the “Software”), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
更多关于Flutter网络请求插件flutter_network_layer_dio的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html