首页 > 其他分享 >retrofit.dart retrofit 的dart 版本实现

retrofit.dart retrofit 的dart 版本实现

时间:2023-10-08 18:34:42浏览次数:37  
标签:dio name retrofit json 版本 dart final

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

标签:dio,name,retrofit,json,版本,dart,final
From: https://www.cnblogs.com/rongfengliang/p/17749850.html

相关文章

  • 软件国际化的问题 C#得到当前windows系统的语言版本
    本以为跟国际化无缘,不在软件的考虑范围内,没想到偶尔一个项目还是绕不开,小记一下System.Globalization.CultureInfo.InstalledUICulture.Name    这是获得英文的区域码,也就是zh-cn的这种,需要找区域码字典对照。System.Globalization.CultureInfo.InstalledUICulture.Native......
  • node版本管理和安装
    1.使用nvm进行node版本管理。在window下安装nvm,下载地址:https://github.com/coreybutler/nvm-windows,下载exe包进行安装。2.安装完成后打开cmd,输入nvm-v查看版本。显示:1.1.11具体版本根据你下载的版本。(如果在安装之前已经安装过node,会有询问框是否把已经存在的版本纳入管理,......
  • PADS版本 历史变化
    从加载文件的速度,生成的文件大小,画图的速度,渲染的速度等多方面来说,个人认为PDAS算是非常不错的一款软件,值得学习和使用。大概把其光辉历史罗列一下,作为一个回忆。1986年:PADSPCB,DOS操作系统1989年:PADSLogic,DOS操作系统1990年:PADS2000,DOS操作系统1993年:PADSPerform,DOS和Wind......
  • linux跳过cmake,安装高版本的wgrib2
    一、安装依赖包yumgroupinstall'DevelopmentTools'yuminstallzlib-devel-yyuminstalllibpng-devel-yyuminstallopenssl-devel-yyum-yinstallgccgcc-c++opensslopenssl-develtar二、下载wgrib2编译包并且解压,修改makefiletarxvfwgrib2.tgz.v3.1.2......
  • 编写脚本实现tomcat一键安装8.5版本
    #下载包到/root目录[root@tomcat~]#lljdk-8u212-linux-x64.tar.gzapache-tomcat-8.5.82.tar.gz-rw-r--r--1rootroot10610025Aug2717:14apache-tomcat-8.5.82.tar.gz-rw-r--r--1rootroot195013152Aug2717:08jdk-8u212-linux-x64.tar.gz#编写脚本[root@to......
  • 重新编译kyuubi-1.6.1版本使其提交flink sql流式任务时不阻塞
    kyuubi-1.6.1版本对于flinksql的支持不是很好,在提交流式任务时会阻塞进程,为了修复这个缺陷,需要修改源代码并重新编译待编译的kyuubi版本:kyuubi-1.6.1-incubating适配的flink版本:flink-1.14.41、下载kyuubi-1.6.1-incubating版本的源代码,并导入IDEA中gitclone-bv1.6.1-incu......
  • 一个电脑管理多个node版本 (不同项目使用不同版本的node)
    一、介绍使用nvm可以方便的在同一台设备上进行多个node版本之间切换,解决不同的项目所使用的node版本不一样的问题二、安装nvm1、NVM下载(1)如果已经单独安装了node,请先卸载再继续(2)进入安装包下载地址:https://github.com/coreybutler/nvm-windows/releases,选择nvm-setup.zip ......
  • 【大数据】HIVE部署(文档版本)
    Mysql安装配置远程登录#更新密钥rpm--importhttps://repo.mysql.com/RPM-GPG-KEY-mysql-2022#安装Mysqlyum库rpm-Uvhhttp://repo.mysql.com//mysql57-community-release-el7-7.noarch.rpm#yum安装Mysqlyum-yinstallmysql-community-server#启动Mysql设置......
  • 【大数据】Hadoop配置(文档版本)
    主机配置:192.168.88.101test1192.168.88.102test2192.168.88.103test3Hadoop上传压缩包并且解压hadoop百度云:链接:https://pan.baidu.com/s/1DRV_x7Q_ZTUO4KMkr2-6Qg?pwd=not3#先配置NameNode主机:#上传hadoop文件压缩包到NameNode主机,并且解压到/exp......
  • Strimzi Kafka Bridge(桥接)实战之三:自制sdk(golang版本)
    欢迎访问我的GitHub这里分类和汇总了欣宸的全部原创(含配套源码):https://github.com/zq2599/blog_demos本篇概览本文是《StrimziKafkaBridge(桥接)实战》的第三篇,前文咱们掌握了StrimziKafkaBridge的基本功能:基于http提供各种kafka消息的服务此刻,如果想通过http接口调......