Flutter模型生成插件binta_model_generator的使用

Flutter模型生成插件binta_model_generator的使用

简介

Easy Generate Model Class



Star on GitHub MIT License


概述

binta_model_generator 是一个用于在Dart语言中生成响应模型的库。

开发人员可以通过配置后运行任何需要的功能来轻松生成模型。

只需先配置,然后运行任何你想要的操作。


使用方法

首先,我们需要将 <code>binta_model_generator</code> 添加到 pubspec.yaml 文件的依赖项中:

dependencies:
  binta_model_generator: ^0.1.1

接下来,我们需要创建一个新的 Dart 文件,并使用以下代码(如果你使用的是 Dio 或其他 HTTP 包):

import 'package:binta_model_generator/binta_model_generator.dart';
import 'package:dio/dio.dart';

main() async {
  final response = await hitService();
  BintaModelGenerator.generateResponseModel(
    parentModelName: "YourParentClassNameOfModel",
    yourJson: response,
    outputFile: "example/",
  );
}

Future<dynamic> hitService() async {
  final Dio dio = Dio();
  try {
    final response = await dio.get("https://your_services.example/example");
    return response;
  } on DioException catch (e) {
    throw Exception(
      e.error,
    );
  }
}

我们有一个示例 JSON 响应 API:

{
  "status": 200,
  "data": {
    "person": [
      {
        "name": "binta",
        "age": 22
      },
      {
        "name": "reza",
        "age": 24
      }
    ],
    "info": {
      "code": "EXAMPLE_CODE_001",
      "message": "success to show data person"
    }
  }
}

不要忘记运行你的 Dart 文件:

dart run your_dart_file.dart

最后,我们会看到在输出文件夹中生成了新的文件:

📦example/
┣ 📜data_model.dart
┣ 📜info_model.dart
┣ 📜person_model.dart
┗ 📜person_model_model.dart

生成的文件内容如下:

// 在 example/person_model_model.dart 中
import 'package:equatable/equatable.dart';
import 'data_model.dart';

class PersonModelModel extends Equatable {
  final int? status;
  final DataModel? data;

  const PersonModelModel({
    this.status,
    this.data,
  });

  factory PersonModelModel.fromJson(Map<String, dynamic> json) => 
      PersonModelModel(
        status : json['status'],
        data: json['data'] != null ? DataModel.fromJson(json['data']) : null,
      );

  Map<String, dynamic> toJson() {
    final Map<String, dynamic> json = {};
    json['status'] = status;
    if(json['data'] != null) {
      json['data'] = data!.toJson();
    }
    return json;
  }

  [@override](/user/override)
  List<Object?> get props =>[
    status,
    data,
  ];
}
// 在 example/person_model.dart 中
class PersonModel extends Equatable {
  final String? name;
  final int? age;

  const PersonModel({
    this.name,
    this.age,
  });

  factory PersonModel.fromJson(Map<String, dynamic> json) => 
      PersonModel(
        name : json['name'],
        age : json['age'],
      );

  Map<String, dynamic> toJson() {
    final Map<String, dynamic> json = {};
    json['name'] = name;
    json['age'] = age;
    return json;
  }

  [@override](/user/override)
  List<Object?> get props =>[
    name,
    age,
  ];
}
// 在 example/data_model.dart 中
import 'package:equatable/equatable.dart';
import 'info_model.dart';
import 'person_model.dart';

class DataModel extends Equatable {
  final List<PersonModel>? person;
  final InfoModel? info;

  const DataModel({
    this.person,
    this.info,
  });

  factory DataModel.fromJson(Map<String, dynamic> json) => 
      DataModel(
        person: json['person'] != null ? List<PersonModel>.from(json['person']?.map((x) => PersonModel.fromJson(x)),) : [],
        info: json['info'] != null ? InfoModel.fromJson(json['info']) : null,
      );

  Map<String, dynamic> toJson() {
    final Map<String, dynamic> json = {};
    if (person != null) {
      json['person'] = person!.map((v) => v.toJson()).toList();
    }
    if(json['info'] != null) {
      json['info'] = info!.toJson();
    }
    return json;
  }

  [@override](/user/override)
  List<Object?> get props =>[
    person,
    info,
  ];
}
// 在 example/info_model.dart 中
import 'package:equatable/equatable.dart';

class InfoModel extends Equatable {
  final String? code;
  final String? message;

  const InfoModel({
    this.code,
    this.message,
  });

  factory InfoModel.fromJson(Map<String, dynamic> json) => InfoModel(
    code: json['code'],
    message: json['message'],
  );

  Map<String, dynamic> toJson() {
    final Map<String, dynamic> json = {};
    json['code'] = code;
    json['message'] = message;
    return json;
  }

  [@override](/user/override)
  List<Object?> get props => [
    code,
    message,
  ];
}

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

1 回复

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


binta_model_generator 是一个用于 Flutter 的代码生成插件,它可以帮助你自动生成模型类(Model Classes),从而减少手动编写重复代码的工作量。这个插件通常与 json_annotationjson_serializable 配合使用,以生成用于 JSON 序列化和反序列化的 Dart 类。

安装和使用步骤

1. 添加依赖

首先,你需要在 pubspec.yaml 文件中添加所需的依赖项:

dependencies:
  flutter:
    sdk: flutter
  json_annotation: ^4.8.0

dev_dependencies:
  build_runner: ^2.3.3
  json_serializable: ^6.6.0
  binta_model_generator: ^1.0.0  # 请确保使用最新版本

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

2. 创建模型类

接下来,你可以创建一个 Dart 类并使用 @JsonSerializable 注解来标记它。这个类将作为模板,binta_model_generator 会根据它生成代码。

import 'package:json_annotation/json_annotation.dart';

part 'user_model.g.dart';  // 生成的代码文件

@JsonSerializable()
class UserModel {
  final String name;
  final int age;
  final String email;

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

  factory UserModel.fromJson(Map<String, dynamic> json) => _$UserModelFromJson(json);

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

3. 运行代码生成器

在终端中运行以下命令来生成代码:

flutter pub run build_runner build

这将生成一个名为 user_model.g.dart 的文件,其中包含 UserModel 类的 fromJsontoJson 方法的实现。

4. 使用生成的模型类

现在你可以使用生成的模型类来进行 JSON 序列化和反序列化:

void main() {
  // 反序列化
  final jsonString = '{"name": "John", "age": 30, "email": "john@example.com"}';
  final user = UserModel.fromJson(json.decode(jsonString));

  print(user.name);  // 输出: John

  // 序列化
  final userJson = user.toJson();
  print(json.encode(userJson));  // 输出: {"name":"John","age":30,"email":"john@example.com"}
}
回到顶部