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

posted on   荣锋亮  阅读(55)  评论(0编辑  收藏  举报

相关博文:
阅读排行:
· 全程不用写代码,我用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 依赖注入框架

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5
点击右上角即可分享
微信分享提示