flutter_api_gen
pubspec.yaml中添加相关配置信息:
dependencies下添加
ivybaby_api:
git:
url: 'https://github.com/johnshazhu/flutter_api_gen'
json_annotation: ^3.1.1
analyzer: ^0.40.6
source_gen: ^0.9.8
mustache: ^1.1.1
dio: ^3.0.9
crypto: ^2.0.6
dev_dependencies下添加
json_serializable: ^3.5.0
build_runner: ^1.10.6
flutter下添加
assets:
- assets/config.json
config.json基本内容:
{
"base" : "https://www.test1.com",
"mallBase" : "https://www.test2.com",
"tokenUrl" : "/ouser-services/token/thirdLogin",
"proxy" : "",
"signStr" : ""
}
Api注解:
用于修饰类或者抽象方法
/// import 'package:ivybaby_api_example/config/app_config.dart';
/// import 'package:ivybaby_api/api/config/api_config.dart';
/// import 'package:ivybaby_api/api/base/api_base.dart';
//@Api('\${ApiConfig.mallBase}', target: 'CmsApiImpl')
@Api('\${ApiConfig.mallBase}', mergeByBaseUrl: false)
abstract class CmsApi {
@Api('/cms/page/module/queryModulePromotion.do', data: {
'itemsPerPage': 10,
'companyId': '@C_AppConfig.COMPANY_ID',
'lang': 'zh_CN',
'platformId': '@C_AppConfig.PLATFORM_ID'
}, method: Api.GET)
Future<QueryModuleRsp> queryModuleData(int moduleId);
}
修饰类时:
url:
定义接口的baseUrl
target:
设置时,表示当前注解类下使用Api注解的方法的实现,会生成在一单独文件中,生成类名为target。
这种情况下不需要再使用ApiExtension来注解生成文件。
mergeByBaseUrl:
结合注解ApiExtension中的配置使用。
true 表示使用Api注解的方法的实现,会按baseUrl分类,合并在统一的文件中,
文件类名由ApiExtension中配置。
target和mergeByBaseUrl都未设置时,表示使用Api注解的方法的实现,
生成在一个统一的文件中,不区分baseUrl。
修饰抽象方法时:
url:
定义接口path
method:
定义请求方式 get/post
data:
定义请求数据
contentType:
请求contentType
header:
请求header
其中 /// 部分为要导入的包,解析注解时未能找到好的自动导入包方式,暂时通过添加到文档注释中,以解析文档注释的方式来导入。
data中出现的'@C_xxx'样式的字符串,是为了能在生成的代码中保留原始代码片段,在注解处理时做的特殊处理,一些常量或者方法调用
都可以以那样的方式来处理
ApiExtension注解:
用于定义生成的接口所在文件相关信息,只用于修饰类,不适用于修饰方法。
className:
生成文件的类名
key:
配合Api中的mergeByBaseUrl使用,设置为baseUrl,生成接口实现文件时按key分类
on:
基于扩展的类名,默认为ApiUtils
// 所有@Api注解的方法,生成在一个文件中,类名为ApiImpls
@ApiExtension(className: 'ApiImpls')
class ExtensionApi {
}
// 以@Api中的baseUrl和key匹配为原则,匹配注解类下的方法,合并在一个文件中,文件类名为className
@ApiExtension(className: 'MallApiImpls', key: '\${ApiConfig.mallBase}')
class MallApis {
}
具体使用可参考example
Libraries
- annotation/annotation_util
- annotation/api_collect
- annotation/api_extension
- annotation/api_extension_generator
- annotation/api_generator
- annotation/api_generator_annotation
- annotation/api_util_tpl
- api/base/api_base
- api/base/base_ivybaby_response
- api/base/base_mall_response
- api/base/base_response
- api/config/api_config
- api/config/api_config_class
- api/config/global_data
- builder/api_builder
- builder/api_extension_builder
- device/app_device
- ivybabay_api
- util/sign