macrofit 0.0.2-alpha
macrofit: ^0.0.2-alpha copied to clipboard
A macro version of retrofit.dart
RetroMacrofit for Dart #
macrofit is a type conversion dio client generator based on macro feature and inspired by retrofit.dart.
Setup #
Since macro is not stable yet, you need to enable it in your analysis_options.yaml:
include: package:flutter_lints/flutter.yaml
analyzer:
enable-experiment:
- macros
Also you need use flag --enable-experiment=macros when running your app:
dart run --enable-experiment=macros example/lib/example.dart
Usage #
Client
Create your client:
@RestClient()
class ClientExample {
ClientExample(this._dio, [this.baseUrl]);
}
Queries
Fill client with your queries. E.g.:
@RestClient()
class ClientExample {
ClientExample(this._dio, [this.baseUrl]);
@MultiPart('some/path')
external Future<void> someRequest(
@Part() String id,
@Part() File photo,
@Part(as: 'user_info') UserInfo userInfo,
);
@POST('/posts/{userId}')
external Future<void> updateProfile(
@Header('Test') String testHeader,
@Body() String name,
@Body(as: 'user_name') String username,
String userId,
);
@DELETE('/posts/{id}')
external Future<TestResponse> deletePost(
@Header('Test') String id,
);
@GET('/posts')
external Future<List<double>> getPosts(
@Query() int page,
@Query(as: 'limit') int perPage,
);
}
Methods
This library supports GET, POST, PUT, DELETE methods. Also you can define your own:
@Custom('/posts/{id}', methodName: 'PATCH')
external Future<PostEntity> patchPost(int id, @Body() String title);
Parameters
You can use:
@Queryfor query parameters (e.g.?page=1&limit=10)
@GET('/posts')
external Future<List<double>> getPosts(
@Query() int page,
@Query() int limit,
);
@Bodyfor request body. E.g:
@POST('/posts')
external Future<void> newPost(
@Body() String title,
@Body() String body,
);
@Headerfor headers. E.g:
@GET('/posts')
external Future<PostEntity> translate(
@Header('Locale') String locale,
);
@Partfor multi-part requests. E.g:
@MultiPart('/posts')
external Future<void> newPost(
@Part() String title,
@Part() File photo,
);
@Pathfor path parameters. Make sure to use the same name in the method and in the path. E.g:
@GET('/posts/{id}')
external Future<PostEntity> getPost(int id);