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);
});
}
更多关于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
类,该类包含了 getUser
和 createUser
方法。
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