Flutter注解插件tenon_annotation的使用

Flutter注解插件tenon_annotation的使用

在Flutter开发中,tenon_annotation 是一个强大的注解库,用于简化网络请求等复杂操作。它基于Dio库实现,并通过注解自动生成代码,从而减少手动编写重复代码的工作量。

使用步骤

1. 添加依赖

首先,在 pubspec.yaml 文件中添加 tenon_annotationtenon_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. 参数说明

完整示例代码

以下是完整的示例代码,包括依赖配置、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

1 回复

更多关于Flutter注解插件tenon_annotation的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


tenon_annotation 是一个用于 Flutter 的注解处理插件,它可以帮助开发者通过注解来生成代码,减少手动编写重复代码的工作量。使用 tenon_annotation 可以提高开发效率,并且使代码更加简洁和易于维护。

安装 tenon_annotation

首先,你需要在 pubspec.yaml 文件中添加 tenon_annotationtenon_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
回到顶部