Flutter插件dioxide的介绍与使用
Flutter插件dioxide的介绍与使用
Dioxide 是一个用于类型转换的 Dio 客户端生成器。
使用Flutter插件dioxide
添加依赖
在 pubspec.yaml
文件中添加以下依赖:
dependencies:
dioxide: ^lastVersion
dev_dependencies:
build_runner: ^2.2.0
dioxide_generator: ^lastVersion
然后运行生成器:
# dart
pub run build_runner build
# flutter
flutter pub run build_runner build
定义并生成你的API
import 'package:json_annotation/json_annotation.dart';
import 'package:dio/dio.dart';
import 'package:dioxide/dioxide.dart';
part 'example.g.dart';
[@RestApi](/user/RestApi)(baseUrl: "http://localhost:8080/api/Task")
abstract class RestClient {
factory RestClient(Dio dio, {String baseUrl}) = _RestClient;
[@GetRequest](/user/GetRequest)()
Future<List<Task>> getTasks();
}
@JsonSerializable()
class Task {
String? id;
String? name;
String? avatar;
String? createdAt;
Task({this.id, this.name, this.avatar, this.createdAt});
factory Task.fromJson(Map<String, dynamic> json) => _$TaskFromJson(json);
Map<String, dynamic> toJson() => _$TaskToJson(this);
}
类型转换
在使用类型转换之前,请确保为每个模型类提供了一个 factory Task.fromJson(Map<String, dynamic> json)
方法。推荐使用 json_serializable
作为序列化工具。
@JsonSerializable()
class Task {
String name;
Task({this.name});
factory Task.fromJson(Map<String, dynamic> json) => _$TaskFromJson(json);
}
HTTP方法
Dioxide 支持以下 HTTP 方法:
// 获取指定ID的任务
[@GetRequest](/user/GetRequest)("/tasks/{id}")
Future<Task> getTask(@Path("id") String id);
// 查询任务
[@GetRequest](/user/GetRequest)('/demo')
Future<String> queries([@Queries](/user/Queries)() Map<String, dynamic> queries);
// 带有查询参数的任务搜索
[@GetRequest](/user/GetRequest)("/search")
Future<String> namedExample(
@Query("name") String name,
@Query("tag") String tag,
);
// 部分更新任务
@PatchRequest("/tasks/{id}")
Future<Task> updateTaskPart(@Path() String id, @Body() Map<String, dynamic> map);
// 更新任务
@PutRequest("/tasks/{id}")
Future<Task> updateTask(@Path() String id, @Body() Task task);
// 删除任务
@DeleteRequest("/tasks/{id}")
Future<void> deleteTask(@Path() String id);
// 创建任务
@PostRequest("/tasks")
Future<Task> createTask(@Body() Task task);
// 从文件创建新任务
@PostRequest("/post")
Future<void> createNewTaskFromFile(@Part() File file);
// 提交编码为URL表单的数据
@PostRequest("/post")
@FormUrlEncoded()
Future<String> postUrlEncodedFormData(@Field() String hello);
获取原始HTTP响应
// 获取指定ID的任务
[@GetRequest](/user/GetRequest)("/tasks/{id}")
Future<HttpResponse<Task>> getTask(@Path("id") String id);
// 获取所有任务
[@GetRequest](/user/GetRequest)("/tasks")
Future<HttpResponse<List<Task>>> getTasks();
获取Dio响应
// 获取文件
[@GetRequest](/user/GetRequest)("/file/{fileId}")
[@DioResponseType](/user/DioResponseType)(ResponseType.stream)
Future<Response<ResponseBody>> getTask(@Path("fileId") String id);
HTTP头
动态添加HTTP头
[@GetRequest](/user/GetRequest)("/tasks")
Future<Task> getTasks(@Header("Content-Type") String contentType );
静态添加HTTP头
[@GetRequest](/user/GetRequest)("/tasks")
@Headers(<String, dynamic>{
"Content-Type" : "application/json",
"Custom-Header" : "Your header"
})
Future<Task> getTasks();
多个端点支持
如果你想要使用多个端点到 RestClient
,你应该在初始化 RestClient
时传递基础 URL。在 RestApi
中定义的任何值将被忽略。
[@RestApi](/user/RestApi)(baseUrl: "this url will be ignored if baseUrl is passed")
abstract class RestClient {
factory RestClient(Dio dio, {String baseUrl}) = _RestClient;
}
final client = RestClient(dio, baseUrl: "your base url");
如果你希望使用 dio.option.baseUrl
的基础 URL,并且优先级最低,请不要向 RestApi
注解和 RestClient
的构造方法传递任何参数。
设置请求超时
[@RestApi](/user/RestApi)(baseUrl: 'http://localhost:8080/api/Report')
[@RequestTimeout](/user/RequestTimeout)(connectTimeout: 5000, sendTimeout: 5000, receiveTimeout: 5000)
abstract class ReportClient {
[@GetRequest](/user/GetRequest)("/generate")
[@RequestTimeout](/user/RequestTimeout)(sendTimeout: 15000, receiveTimeout: 30000)
[@DioResponseType](/user/DioResponseType)(ResponseType.stream)
Future<Response<ResponseBody>> getTask([@Queries](/user/Queries)() Map<String, dynamic> queries);
}
更多关于Flutter插件dioxide的介绍与使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter插件dioxide的介绍与使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
截至2023年,Flutter社区中有许多插件和包,用于扩展Flutter应用的功能。然而,关于名为“dioxide”的插件,目前并没有广泛记录或官方支持的插件。可能是某个特定开发者或团队创建的一个自定义插件,或者是一个新发布的插件。
如果你遇到了一个名为“dioxide”的插件,并且想要了解它的功能和使用方法,以下是一些建议的步骤:
1. 查找插件的文档
- 访问插件的发布页面(例如 pub.dev)并搜索“dioxide”。
- 查看插件的描述、文档和示例代码。
- 如果插件有GitHub仓库,可以查看其README文件以获取详细信息。
2. 安装插件
如果插件发布在 pub.dev
上,可以通过以下步骤安装:
- 在
pubspec.yaml
文件中添加依赖项:dependencies: dioxide: ^版本号
- 运行
flutter pub get
安装插件。
3. 使用插件
- 根据插件的文档,导入插件并在代码中使用其功能。
- 示例:
import 'package:dioxide/dioxide.dart'; void main() { // 使用插件的功能 Dioxide.doSomething(); }