net_retrofit_dio 0.2.2 copy "net_retrofit_dio: ^0.2.2" to clipboard
net_retrofit_dio: ^0.2.2 copied to clipboard

Declarative HTTP for Flutter/Dio: annotate APIs, generate implementations with build_runner.

net_retrofit_dio #

GitHub License: MIT

注解描述接口,用 build_runner 生成 *Impl,底层走 Dio。适合想把 HTTP 声明从业务里抽出去、又希望生成代码尽量直白的项目。


English (short): Annotation-driven HTTP client for Flutter: abstract API classes → generated implementations calling NetRequest + Dio. Multi-base-URL lanes via NetRequest.open / @NetApi(client: …). Not the retrofit pub package — separate project, Dio-first.


和 retrofit.dar 是什么关系? #

  • 零依赖:不依赖 retrofitretrofit_generator 等包,也不是对方 fork。
  • 取向不同:社区里常用的 trevorwang/retrofit.dart 功能与集成面很广(独立运行时包 + 生成器、多种 parser/adapter 等)。本库刻意做成 贴近 Dio 的薄层:注解只负责摊平到 NetRequest / INetClient,线路与配置用 NetRequest.primeopenplugNetOptions 直接表达,少一层「再包一整个 RestClient 工厂」的心智负担。
  • 怎么选:要与其生态、特性矩阵完全对齐时,用对方即可;要 依赖面小、和 Dio 的用法一致 时,可以看本库。

依赖 #

dependencies:
  flutter:
    sdk: flutter
  dio: ^5.2.1
  net_retrofit_dio: ^0.2.0   # 或 git / path

dev_dependencies:
  build_runner: ^2.4.0
dart run build_runner build --delete-conflicting-outputs

入口:import 'package:net_retrofit_dio/net_retrofit_dio.dart';

一次初始化 #

NetRequest.prime(
  const NetOptions(
    baseUrl: 'https://api.example.com',
    connectTimeout: Duration(seconds: 30),
    receiveTimeout: Duration(seconds: 30),
  ),
);
// 其它 Host / 超时(可选)
NetRequest.open('upload', const NetOptions(baseUrl: 'https://upload.example.com'));

INetClientNetOptions 绑定在同一条线路里;具名线路在 @NetApi(client: 'upload') 里与 open / plug 的 id 对应。

声明与调用 #

part 'user_api.g.dart';

@NetApi()
abstract class UserApi {
  @Get('/user/info')
  Future<UserModel?> getUserInfo();

  @Post('/login')
  Future<AuthModel?> login(@Body() LoginRequest body);
}
final api = UserApiImpl();
await api.getUserInfo();

更完整的组合(query、path、header、multipart、流式等)见 example/

注解速览 #

标注 作用
@NetApi() / @NetApi(client: 'id') 抽象类;client 对应 NetRequest.open 的线路 id
@Get @Post @Put @Patch @Delete @Head 路径;可带 contentType:(如 ContentType.formData
@Body() 体;Map 直发,其它类型用 toJson() / ?.toJson()
@Query() / @QueryKey('k') 整表 query / 单个参数
@Path('id') 替换路径里的 {id}
@Header('Name') 单个请求头
@Part('name') multipart 字段(常配合 formData);File 会转成 MultipartFile
@DataPath('key') response.data['key'] 再解析返回值
@StreamResponse() 流式响应(生成侧按行 Stream<String>
[CallOptions? options] 单次 cancelToken / clientKey;若方法已有命名参数则用 {CallOptions? options}

Future<List<T>>TfromJson 时,生成器会按元素映射列表。

细节源码:lib/src/generate/annotations.dartlib/src/network/net_request.dart

License #

MIT.

1
likes
150
points
7
downloads

Documentation

API reference

Publisher

unverified uploader

Weekly Downloads

Declarative HTTP for Flutter/Dio: annotate APIs, generate implementations with build_runner.

Repository (GitHub)
View/report issues

Topics

#flutter #networking #retrofit #code-generation #dio

License

MIT (license)

Dependencies

analyzer, build, dio, flutter, meta, source_gen

More

Packages that depend on net_retrofit_dio