Flutter代码生成辅助插件stub_gen的使用

Flutter代码生成辅助插件stub_gen的使用

stub_gen 是一个基于 Dart 的包,它利用 build 包来生成存根(stubs)。这可以方便地为模型逻辑编写单元测试。

特性

  • 创建一个 .stub.dart 文件,在其中写入存根方法。
  • 兼容带有 freezed 注解的类。
  • 允许通过命名参数将任意值插入到特定成员中。
  • 支持 faker 包的注解,例如 @EmailAddress@PhoneNumber

安装

在您的 pubspec.yaml 文件中添加以下内容:

dependencies:
  stub_gen:
    git:
      url: https://github.com/fummicc1/stub_gen
      ref: 0.0.5

然后运行以下命令以安装依赖项:

flutter pub get

使用

第一步:创建一个带有 StubGen 注解的模型类

// sample.dart
part 'sample.stub.dart';

@StubGen()
class User {
  final String name;
  final int age;
  final double height;
  final String email;

  const User(
    this.name,
    this.age,
    this.height,
    @EmailAddress()
    this.email,
  );

  String get initial {
    return name[0].toUpperCase();
  }

  bool get isValidEmail {
    return email.contains("@");
  }
}
  • StubGen 提供了一个 defaultValues 参数,允许您修改 StubbableTypes 的默认值。
  • 存在一些 faker 的注解,例如 @EmailAddress@PhoneNumber

第二步:运行 build_runner 生成存根代码

运行以下命令以生成存根代码:

dart run build_runner build

此命令会生成一个名为 sample.stub.dart 的文件,内容如下:

// coverage:ignore-file
// ignore_for_file: type=lint

part of 'sample.dart';

// **************************************************************************
// StubGenerator
// **************************************************************************

extension UserStubBuilder on User {
  static User build(
          {String name = "stub",
          int age = 10,
          double height = 1.0,
          String email = "beahan-madie@sauer.co.uk"}) =>
      User(name ?? "stub", age ?? 10, height ?? 1.0, email ?? "stub");
}

第三步:编写单元测试

import 'package:example/sample.dart';
import 'package:test/test.dart';

void main() {
  test("Initial should be capitalized and email should be valid", () {
    final user = UserStubBuilder.build(name: 'fummicc1');
    expect(user.initial, "F");
    expect(user.isValidEmail, isTrue);
  });
}
1 回复

更多关于Flutter代码生成辅助插件stub_gen的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


stub_gen 是一个用于 Flutter 开发的代码生成辅助插件,它可以帮助开发者自动生成代码片段,例如模型类、服务类、API 接口等。通过使用 stub_gen,开发者可以减少手动编写重复代码的工作量,提高开发效率。

安装 stub_gen

首先,你需要在你的 Flutter 项目中添加 stub_gen 作为开发依赖项。打开 pubspec.yaml 文件,并在 dev_dependencies 部分添加 stub_gen

dev_dependencies:
  stub_gen: ^1.0.0

然后运行 flutter pub get 来安装依赖。

使用 stub_gen

stub_gen 提供了多种代码生成功能,以下是一些常见的使用场景:

1. 生成模型类

假设你有一个 JSON 数据,并且你想生成对应的 Dart 模型类。你可以使用 stub_gen 来自动生成这些类。

首先,创建一个 JSON 文件,例如 user.json

{
  "id": 1,
  "name": "John Doe",
  "email": "john.doe@example.com"
}

然后,运行以下命令来生成模型类:

flutter pub run stub_gen:generate -i user.json -o lib/models/user.dart

这将会在 lib/models/ 目录下生成一个 user.dart 文件,其中包含一个 User 类。

2. 生成 API 服务类

如果你需要生成一个 API 服务类,stub_gen 也可以帮助你。首先,创建一个 YAML 文件来描述 API 接口,例如 api.yaml

baseUrl: https://api.example.com
endpoints:
  - name: getUser
    path: /users/{id}
    method: GET
  - name: createUser
    path: /users
    method: POST

然后,运行以下命令来生成 API 服务类:

flutter pub run stub_gen:generate -i api.yaml -o lib/services/api_service.dart

这将会在 lib/services/ 目录下生成一个 api_service.dart 文件,其中包含一个 ApiService 类,该类包含了 getUsercreateUser 方法。

3. 生成其他代码片段

stub_gen 还支持生成其他类型的代码片段,例如 Repository 类、Provider 类等。你可以根据需要创建相应的模板文件,并使用 stub_gen 来生成代码。

自定义模板

stub_gen 允许你使用自定义模板来生成代码。你可以创建一个模板文件,例如 model_template.dart,然后使用 stub_gen 来生成代码。

class {{className}} {
  final int id;
  final String name;
  final String email;

  {{className}}({
    required this.id,
    required this.name,
    required this.email,
  });

  factory {{className}}.fromJson(Map<String, dynamic> json) {
    return {{className}}(
      id: json['id'],
      name: json['name'],
      email: json['email'],
    );
  }

  Map<String, dynamic> toJson() {
    return {
      'id': id,
      'name': name,
      'email': email,
    };
  }
}

然后,运行以下命令来生成代码:

flutter pub run stub_gen:generate -i user.json -t model_template.dart -o lib/models/user.dart
回到顶部
AI 助手
你好,我是IT营的 AI 助手
您可以尝试点击下方的快捷入口开启体验!