retrofit.dart retrofit 的dart 版本实现
retrofit.dart retrofit 的dart 版本实现,利用了代码生成技术,不像java 使用的是动态代理,以下是一个参考试用
项目集成
- 依赖配置
name: cli
description: A sample command-line application.
version: 1.0.0
# repository: https://github.com/my_org/my_repo
environment:
sdk: ^3.1.3
# Add regular dependencies here.
dependencies:
retrofit: '>=4.0.0 <5.0.0'
logger: any #for logging purpose
json_annotation: ^4.8.1
dio: ^5.3.3
dev_dependencies:
lints: ^2.0.0
test: ^1.21.0
retrofit_generator: '>=7.0.0 <8.0.0'
build_runner: '>=2.3.0 <4.0.0'
json_serializable: ^6.6.2
- 定义接口访问签名
api_client.dart
import 'package:dio/dio.dart';
import 'package:json_annotation/json_annotation.dart';
import 'package:retrofit/retrofit.dart';
/// 生成的帮助方法
part 'api_client.g.dart';
/// 与retrofit 一致的接口访问定义
@RestApi(baseUrl: 'https://5d42a6e2bc64f90014a56ca0.mockapi.io/api/v1/')
abstract class RestClient {
factory RestClient(Dio dio, {String baseUrl}) = _RestClient;
@GET('/tasks')
Future<List<Task>> getTasks();
}
/// 实体定义
@JsonSerializable()
class Task {
const Task({this.id, this.name, this.avatar, this.createdAt});
/// json 处理
factory Task.fromJson(Map<String, dynamic> json) => _$TaskFromJson(json);
final String? id;
final String? name;
final String? avatar;
final String? createdAt;
/// json 处理
Map<String, dynamic> toJson() => _$TaskToJson(this);
}
- 代码生成
dart run build_runner build
- 集成调用
import 'package:cli/api_client.dart';
import 'package:dio/dio.dart';
void main() async {
final dio = Dio(); // Provide a dio instance
dio.options.headers['Demo-Header'] =
'demo header'; // config your dio headers globally
final client = RestClient(dio);
var result = await client.getTasks();
for (var element in result) {
print(
'id: ${element.id}, name: ${element.name}, avatar: ${element.avatar}');
}
}
- 运行效果
说明
etrofit.dart 实际上也是对于一些包的包装,同时利用了代码生成技术,实现了比较方便的dart rest api 调用
参考资料
https://github.com/trevorwang/retrofit.dart
https://github.com/dart-lang/source_gen
https://github.com/cfug/dio
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)
2022-10-08 dremio 23.0 版本发布
2022-10-08 openjdk 11 以及8 项目构建退休建议选择其他构建源
2020-10-08 nessie 安装&&简单试用
2020-10-08 nessie 类似git 管理数据湖
2020-10-08 一些不错的开源大数据虚拟数据sql 查询引擎
2020-10-08 What Is a Data Lake Engine?
2019-10-08 typedi 强大的javascript以及typescript 依赖注入框架