Flutter注解插件tenon_annotation的使用
Flutter注解插件tenon_annotation的使用
在Flutter开发中,tenon_annotation 是一个强大的注解库,用于简化网络请求等复杂操作。它基于Dio库实现,并通过注解自动生成代码,从而减少手动编写重复代码的工作量。
使用步骤
1. 添加依赖
首先,在 pubspec.yaml 文件中添加 tenon_annotation 和 tenon_generator 依赖:
dependencies:
tenon_annotation: ^1.0.0 # 注解库
tenon_generator: ^1.0.0 # 代码生成器
dev_dependencies:
build_runner: ^2.1.0 # 代码生成工具
然后运行以下命令以安装依赖:
flutter pub get
2. 定义API接口
使用 [@TenonApi](/user/TenonApi) 注解定义一个接口类,并通过其他注解(如 [@GET](/user/GET), [@POST](/user/POST) 等)描述具体的HTTP请求。
示例代码
import 'package:tenon_annotation/tenon_annotation.dart';
// 定义API接口
[@TenonApi](/user/TenonApi)(baseUrl: "https://jsonplaceholder.typicode.com")
abstract class ApiService {
// GET 请求
[@GET](/user/GET)("/posts/{id}")
Future<dynamic> getPost([@Path](/user/Path)("id") int id);
// POST 请求
[@POST](/user/POST)("/posts")
Future<dynamic> createPost(
[@Body](/user/Body)() Map<String, dynamic> body,
);
// 带查询参数的GET请求
[@GET](/user/GET)("/users")
Future<dynamic> getUsers([@Query](/user/Query)("page") int page);
// 表单提交请求
[@FormUrlEncoded](/user/FormUrlEncoded)()
[@POST](/user/POST)("/login")
Future<dynamic> login([@Field](/user/Field)("username") String username, [@Field](/user/Field)("password") String password);
}
3. 生成代码
在项目根目录下运行以下命令以生成代码:
flutter pub run build_runner build
生成的代码会包含一个实现了 ApiService 接口的类,该类封装了所有HTTP请求逻辑。
4. 调用API
现在可以实例化生成的类并调用方法来执行网络请求。
示例代码
void main() async {
// 实例化生成的API类
final api = GeneratedApiService();
// 调用GET请求
var post = await api.getPost(1);
print("Get Post: $post");
// 调用POST请求
var newPost = await api.createPost({"title": "Hello", "body": "World", "userId": 1});
print("Create Post: $newPost");
// 调用带查询参数的GET请求
var users = await api.getUsers(2);
print("Get Users: $users");
// 调用表单提交请求
var loginResult = await api.login("admin", "123456");
print("Login Result: $loginResult");
}
5. 参数说明
- @TenonApi:指定基础URL。
- @GET, @POST, @PATCH, @PUT, @DELETE:分别表示不同的HTTP方法。
- @FormUrlEncoded:将数据编码为
application/x-www-form-urlencoded。 - @Multipart:支持文件上传。
- @Headers:添加自定义请求头。
- @Extras:传递额外参数。
- @Header, @Extra, @Path, @Query, @QueryMap, @Field, @FieldMap, @Part, @PartMap, @Body:用于绑定具体参数。
完整示例代码
以下是完整的示例代码,包括依赖配置、API定义、代码生成和调用部分:
// pubspec.yaml
dependencies:
tenon_annotation: ^1.0.0
tenon_generator: ^1.0.0
dev_dependencies:
build_runner: ^2.1.0
// ApiService.dart
import 'package:tenon_annotation/tenon_annotation.dart';
[@TenonApi](/user/TenonApi)(baseUrl: "https://jsonplaceholder.typicode.com")
abstract class ApiService {
[@GET](/user/GET)("/posts/{id}")
Future<dynamic> getPost([@Path](/user/Path)("id") int id);
[@POST](/user/POST)("/posts")
Future<dynamic> createPost([@Body](/user/Body)() Map<String, dynamic> body);
[@GET](/user/GET)("/users")
Future<dynamic> getUsers([@Query](/user/Query)("page") int page);
[@FormUrlEncoded](/user/FormUrlEncoded)()
[@POST](/user/POST)("/login")
Future<dynamic> login([@Field](/user/Field)("username") String username, [@Field](/user/Field)("password") String password);
}
// main.dart
void main() async {
final api = GeneratedApiService();
var post = await api.getPost(1);
print("Get Post: $post");
var newPost = await api.createPost({"title": "Hello", "body": "World", "userId": 1});
print("Create Post: $newPost");
var users = await api.getUsers(2);
print("Get Users: $users");
var loginResult = await api.login("admin", "123456");
print("Login Result: $loginResult");
}
更多关于Flutter注解插件tenon_annotation的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter注解插件tenon_annotation的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
tenon_annotation 是一个用于 Flutter 的注解处理插件,它可以帮助开发者通过注解来生成代码,减少手动编写重复代码的工作量。使用 tenon_annotation 可以提高开发效率,并且使代码更加简洁和易于维护。
安装 tenon_annotation
首先,你需要在 pubspec.yaml 文件中添加 tenon_annotation 和 tenon_generator 依赖。
dependencies:
flutter:
sdk: flutter
tenon_annotation: ^版本号
dev_dependencies:
build_runner: ^2.1.0
tenon_generator: ^版本号
请确保将 ^版本号 替换为实际的版本号。
基本使用
1. 创建注解类
首先,你需要创建一个注解类。注解类通常使用 @immutable 标记,并且继承自 TenonAnnotation。
import 'package:tenon_annotation/tenon_annotation.dart';
@immutable
class MyAnnotation extends TenonAnnotation {
final String name;
const MyAnnotation(this.name);
}
2. 使用注解
接下来,你可以在你的代码中使用这个注解。例如,你可以将注解应用到一个类上。
import 'package:tenon_annotation/tenon_annotation.dart';
import 'my_annotation.dart';
@MyAnnotation('ExampleClass')
class ExampleClass {
// 类的内容
}
3. 生成代码
使用 build_runner 来生成代码。在终端中运行以下命令:
flutter pub run build_runner build
这个命令会触发 tenon_generator 根据你定义的注解生成相应的代码。
4. 生成的代码
tenon_generator 会根据你定义的注解生成代码。生成的代码通常会放在 *.g.dart 文件中。例如,如果你在 example.dart 中使用了注解,那么生成的代码会放在 example.g.dart 中。
// example.g.dart
// GENERATED CODE - DO NOT MODIFY BY HAND
part of 'example.dart';
// 根据注解生成的代码
自定义代码生成
你可以通过自定义 tenon_generator 来生成符合你需求的代码。通常,你需要实现一个 Generator 类,并在 build.yaml 中配置。
builders:
tenon_generator:
target: ":tenon_generator"
import: "package:tenon_generator/tenon_generator.dart"
builder_factories: ["myGenerator"]
build_extensions: {".dart": [".g.dart"]}
auto_apply: dependents

