Flutter代码生成或模型生成插件mgen_cli的使用

Flutter代码生成或模型生成插件mgen_cli的使用

Mgen_cli

简介

mgen(模型生成器)是一个易于使用的命令行工具,可以帮助生成序列化模型。 在YAML文件中定义您的模型,并通过一个命令生成模型。

使用方法

以下是设置项目的步骤:

  1. 在终端中运行 dart pub global activate mgen_cli
  2. 向项目根目录添加一个名为 models.yaml 的文件并指定您的模型(参见定义模型部分)。
  3. 打开项目根目录的终端并运行 mgen generate

可选地,您可以使用 -m 标志来定义写入模型的确切文件路径,以及 -y 标志来定义YAML文件的位置:

mgen generate [-m path/to/file/file.dart] [-y path/to/yaml/file.yaml]

默认情况下,models.yaml 文件位于根目录,而 model.dart 文件位于 lib 目录。

定义模型

您可以这样定义一个模型:

Person:
  name: String
  age: int

您可以为字段指定这些类型:booldoubleintStringDateTime,以及这些类型的列表或映射。 您还可以将其他模型作为类型:

Person:
  name: String
  age: int
  livesAt: Location
  friends: List<Person>

Location:
  hourseNr: int
  street: String
  city: String

如果模型文件中有任何错误,这很可能是由于提交了不允许的类型。未来将支持自定义类型。

模型特性

所有生成的模型都具有以下功能:

  • 它们是不可变的。如果您想了解更多关于不可变性的知识,可以查看这篇Medium文章
  • 它们有一个默认构造函数。
  • 它们有一个 Model.fromJson(json) 构造函数,该构造函数接受序列化的 Map(即 Map<String, dynamic>),并尝试将其解析为指定的模型。
  • 它们有一个 toJson() 方法,该方法将对象转换为序列化的 Map
  • 它们有一个 copyWith() 方法,该方法接受对象的任何字段,并复制带有这些字段更改的对象。因为模型是不可变的,所以此功能特别有用。

以下示例演示了这些功能:

models.yaml:

Person:
  name: String
  age: int
  livesAt: Location
  friends: List<Person>

Location:
  hourseNr: int
  street: String
  city: String

main.dart:

import 'package:my_project/model.dart';

void main() {
  // 定义Ernie的位置
  // 注意,由于Location的不可变性,它可以是常量
  const locationErnie = 
      Location(hourseNr: 1, street: "Sesame Street", city: "Sesame City");
  // 定义Bert的位置
  const locationBert = 
      Location(hourseNr: 2, street: "Sesame Street", city: "Sesame City");

  // 定义人物Ernie
  // 注意,由于他是第一个创建的人物,我们不能给他任何朋友
  const ernie = 
      Person(name: "Ernie", age: 29, livesAt: locationErnie, friends: []);
  // 定义人物Bert
  // 由于Ernie已经存在,我们可以让Bert成为Ernie的朋友,
  // 但Ernie和Bert刚见面,他们还不是朋友
  const bert = 
      Person(name: "Bert", age: 34, livesAt: locationBert, friends: []);

  // 因为Ernie认为Bert是个不错的人,所以他想要Bert作为朋友
  // 我们可以这样做,但由于不可变性,我们必须用新朋友复制Ernie
  // 注意,这个值不能是常量,因为`copyWith` 是一个函数,我们事先不知道它的值
  final ernieWithFriends = ernie.copyWith(friends: [bert]);

  // 我们可以将对象转换为JSON
  final json = ernieWithFriends.toJson();

  print(json);
  // 这将打印以下内容
  /*
      {
        name: Ernie, 
        age: 29, 
        livesAt: {
          hourseNr: 1, 
          street: Sesame Street, 
          city: Sesame City
          }, 
        friends: 
          [
            {
              name: Bert, 
              age: 34, 
              livesAt: 
                {
                  hourseNr: 2, 
                  street: Sesame Street, 
                  city: Sesame City
                } 
              friends: 
                []
            }
          ]
      }
  */

  // 我们可以从序列化的映射中构建人物,
  // 如果JSON正确,则不会导致任何错误
  // 在这个脚本中显然是正确的,
  // 但在更复杂的情况下,这可能更难保证
  final ernieReconstructed = Person.fromJson(json);
  print(ernieReconstructed.name);
  // 这将打印:"Ernie"
}

如果您想向模型添加更多功能,可以这样做:

extension ShowFriends on Person{
  /// 打印所有朋友的名字到控制台
  void showFriends(){
    for(Person friend in friends){
      print(friend.name);
    }
  }
}

更多关于Flutter代码生成或模型生成插件mgen_cli的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

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


mgen_cli 是一个用于 Flutter 项目的代码生成工具,它可以帮助开发者自动生成模型类、服务类、仓库类等,从而提高开发效率。以下是如何使用 mgen_cli 的基本步骤:

1. 安装 mgen_cli

首先,你需要在全局安装 mgen_cli。打开终端并运行以下命令:

dart pub global activate mgen_cli

2. 初始化配置

在你的 Flutter 项目根目录下,运行以下命令来初始化 mgen_cli 的配置文件:

mgen init

这将会在项目根目录下生成一个 mgen.yaml 配置文件。你可以根据项目的需求来编辑这个文件。

3. 配置 mgen.yaml

mgen.yaml 文件是 mgen_cli 的配置文件,它定义了代码生成的规则和模板。以下是一个简单的配置示例:

models:
  - name: User
    properties:
      - name: id
        type: int
      - name: name
        type: String
      - name: email
        type: String

services:
  - name: UserService
    methods:
      - name: fetchUser
        returnType: User
        parameters:
          - name: userId
            type: int

repositories:
  - name: UserRepository
    methods:
      - name: getUser
        returnType: User
        parameters:
          - name: userId
            type: int

4. 生成代码

配置好 mgen.yaml 后,你可以运行以下命令来生成代码:

mgen generate

mgen_cli 会根据 mgen.yaml 中的配置生成相应的模型类、服务类和仓库类,并将它们保存到指定的目录中。

5. 查看生成的文件

生成的代码文件通常会被保存在 lib/modelslib/serviceslib/repositories 目录下。你可以根据需要修改这些文件,或者直接使用它们。

6. 自定义模板

如果你需要自定义生成的代码模板,可以在 mgen.yaml 中指定自定义模板的路径。例如:

templates:
  model: templates/model.dart.template
  service: templates/service.dart.template
  repository: templates/repository.dart.template

你可以在项目根目录下创建 templates 文件夹,并在其中放置自定义的模板文件。

7. 其他命令

mgen_cli 还提供了一些其他命令,例如:

  • mgen list:列出所有可用的生成器。
  • mgen clean:删除所有生成的文件。

8. 集成到项目中

为了确保每次项目构建时都能自动生成代码,你可以将 mgen generate 命令添加到项目的构建脚本中。例如,在 pubspec.yaml 中添加:

scripts:
  build: mgen generate && flutter pub run build_runner build
回到顶部