Flutter数据构建插件tdd_data_builder的使用

发布于 1周前 作者 bupafengyu 来自 Flutter

Flutter数据构建插件tdd_data_builder的使用

在使用TDD(测试驱动开发)架构时,我们通常会生成DTO(数据传输对象)和服务文件。此插件可以帮助你生成这些文件。

使用/示例

此插件使用retrofit和dio来处理API调用。

创建DTO文件

要创建一个DTO文件,可以运行以下命令:

dart run tdd_data_builder dto <DTO-NAME>

例如,如果你想创建一个名为UserDto的DTO文件,可以运行:

dart run tdd_data_builder dto UserDto

如果还需要创建实体类,可以在命令后面添加--entity参数:

dart run tdd_data_builder dto UserDto --entity

创建服务文件

要创建一个服务文件,可以运行以下命令:

dart run tdd_data_builder service <SERVICE-NAME>

例如,如果你想创建一个名为UserService的服务文件,可以运行:

dart run tdd_data_builder service UserService

创建DataResponse类文件

许多后端服务在JSON响应中将实际数据封装在data属性中,如下所示:

{
    "data" : {
        ...
    }
}

为了方便提取这些数据,我们创建了一个特殊的DataResponse类。你可以通过运行以下命令来生成该文件:

dart run tdd_data_builder data-response

它会在以下路径生成文件:

lib/data/dto/default/default_response.dart

如果你需要为新的API路由添加一个新的DTO类,只需在data-response中注册你的DTO类即可。

part 'data_response.g.dart';

@JsonSerializable()
class DataResponse<T> {
  @JsonKey(name: "data")
  @_Converter()
  final List<T> data;

  const DataResponse({
    required this.data,
  });

  factory DataResponse.fromJson(Map<String, dynamic> json) =>
      _$DataResponseFromJson<T>(json);

  Map<String, dynamic> toJson() => _$DataResponseToJson(this);
}

class _Converter<T> implements JsonConverter<T, Object?> {
  const _Converter();

  @override
  T fromJson(Object? json) {
    if (json is Map<String, dynamic>) {
      switch (T) {
        // case SampleDto:
        //   return SampleDto.fromJson(json) as T;
      }
      return DefaultResponse<T>.fromJson(json) as T;
    }
    return json as T;
  }

  @override
  Object? toJson(T object) => object;
}

这里的注释部分SampleDto是你从JSON响应的data属性中获取的DTO类。

必须每次执行的操作

当你创建一个DTO或服务文件时,它只会生成模板。你需要根据自己的需求填充类的属性和方法。完成后,必须运行build_runner包以生成部分文件。

flutter pub run build_runner build

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

1 回复

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


当然,下面是一个关于如何在Flutter项目中使用tdd_data_builder插件进行数据构建的示例代码。tdd_data_builder是一个帮助开发者在Flutter中更方便地构建和管理测试数据的插件。假设你已经将tdd_data_builder添加到了你的pubspec.yaml文件中,并且已经运行了flutter pub get

1. 添加依赖

首先,确保你的pubspec.yaml文件中包含tdd_data_builder依赖:

dependencies:
  flutter:
    sdk: flutter
  tdd_data_builder: ^最新版本号

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

2. 定义数据模型

假设你有一个简单的用户数据模型:

// models/user.dart
class User {
  final String name;
  final int age;
  final String email;

  User({required this.name, required this.age, required this.email});

  @override
  String toString() {
    return 'User{name: $name, age: $age, email: $email}';
  }
}

3. 使用tdd_data_builder构建数据

创建一个构建器文件来生成用户数据:

// data_builders/user_builder.dart
import 'package:tdd_data_builder/tdd_data_builder.dart';
import 'package:your_app/models/user.dart'; // 替换为你的实际路径

class UserBuilder extends DataBuilder<User> {
  late String name;
  late int age;
  late String email;

  UserBuilder setName(String name) {
    this.name = name;
    return this;
  }

  UserBuilder setAge(int age) {
    this.age = age;
    return this;
  }

  UserBuilder setEmail(String email) {
    this.email = email;
    return this;
  }

  @override
  User build() {
    return User(name: name, age: age, email: email);
  }
}

4. 在测试或应用中使用构建器

现在你可以在你的测试或应用中使用UserBuilder来创建用户数据:

// main.dart 或你的测试文件
import 'package:flutter/material.dart';
import 'package:your_app/data_builders/user_builder.dart'; // 替换为你的实际路径
import 'package:your_app/models/user.dart'; // 替换为你的实际路径

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    User user = UserBuilder()
      .setName('John Doe')
      .setAge(30)
      .setEmail('john.doe@example.com')
      .build();

    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('User Info'),
        ),
        body: Center(
          child: Text(user.toString()),
        ),
      ),
    );
  }
}

总结

上述代码展示了如何在Flutter项目中使用tdd_data_builder插件来构建和管理测试数据。通过这种方式,你可以更方便地创建复杂的数据对象,并在你的应用或测试中使用它们。记住,tdd_data_builder特别适合用于测试场景,因为它允许你以一种链式调用的方式设置数据,从而使测试数据更易于管理和维护。

回到顶部