Flutter JSON生成插件json_creator的使用

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

Flutter JSON生成插件json_creator的使用

这是一个命令行Dart应用程序,可以读取Flutter项目中Dart文件中的Text小部件的值,并创建一个JSON文件,特别适用于本地化。

[注意]:如果你正在对预构建的Flutter应用进行本地化,你可能会发现json_translatorlocalization_helper包在pub.dev上很有帮助。

  • https://pub.dev/packages/json_translator
  • https://pub.dev/packages/localization_helper

这个包旨在帮助已经开发了Flutter应用的开发者进行本地化。该包会从终端输入的路径中获取并读取所有存在的Dart文件,并查找Text小部件中的字符串值和Fluttertoast包中的msg参数。匹配的字符串将被格式化,并创建一个键为小驼峰命名法(lowerCamelCase)且值为实际匹配项的JSON文件。

使用方法

此程序已在pub.dev发布,因此你可以使用以下方法之一:

  1. 作为可执行文件运行以下命令:
dart pub global activate json_creator

如果显示警告信息,你需要将高亮显示的目录添加到系统环境变量的“Path”中,以便允许执行该可执行文件。添加目录后,运行以下命令:

json_creator
  1. 或者,通过克隆源代码到本地机器并运行以下命令:
dart run

运行程序时涉及的步骤

  1. 运行程序。
  2. 输入包含Text小部件的所有Dart文件的文件夹路径。
  3. 程序检测输入的路径是否存在。
  4. 如果路径有效,则将在终端中显示匹配的字符串,同时将键和值写入工作目录下的名为test.json的JSON文件中。

输出

输出的JSON文件将在工作目录下以test.json的形式创建。

输出

为了方便起见,路径上的键和值标识了它们是从哪个文件中提取的。

额外信息

使用Prettier扩展来格式化你的JSON文件。如有必要,请编辑文件。将以下内容添加到settings.json以格式化JSON文件:

"[json]": {
    "editor.defaultFormatter": "esbenp.prettier-vscode"
}

由于在JSON文件中写入注释是不可能的,而本地化是使用*.arb文件完成的,你可以将JSON文件的扩展名改为.arb。这些文件中有一些定义注释的语法。社区建议使用一种特殊语法,例如"@_LOGIN_PAGE": {}作为编写注释的约定,但当文件变大时,它们可能不太显眼。因此,有一种方法可以通过VS Code扩展程序:Highlight来突出显示这些部分标题。

只需安装它,转到settings.json,并在highlight.regexes下添加以下条目:

"highlight.regexes": {
   "(\"@_.+\": {},)": {
     "filterFileRegex": ".*\\.(arb|json)",
     "decorations": [
       {
         "overviewRulerColor": "#d19a66",
         "backgroundColor": "#d19a66",
         "color": "#282c34",
         "fontWeight": "bold"
       }
     ]
   }
 }

现在,从其中提取键和值的文件路径将会高亮显示!

有一篇有趣的文章可能在处理ARB文件进行本地化时有所帮助。你可以查看这篇文章:

  • https://yapb.dev/tips-and-tricks-13-tips-when-working-with-arb-files-for-localization

使用该插件并欢迎反馈! 😊💖

完整示例代码

import 'package:json_creator/src/json_creator.dart' as json_creator;

void main() {
  /// 这个程序是发布在pub.dev上的,所以你可以使用这个包:
  ///
  /// 1. 作为可执行文件运行以下命令:
  /// > dart pub global activate json_creator
  /// > json_creator
  ///
  /// 2. 或者,通过克隆源代码并运行以下命令:
  /// > dart run

  json_creator.main();
}

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

1 回复

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


当然,下面是一个关于如何使用Flutter JSON生成插件 json_serializablejson_annotation 的代码示例。尽管你提到的是 json_creator,但需要注意的是,在Flutter社区中,更常用的插件是 json_serializable。如果你确实是在寻找一个名为 json_creator 的插件,并且它在Flutter社区中存在,但不太知名,你可能需要查阅该插件的具体文档。不过,以下示例将基于广泛使用的 json_serializable 插件。

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

dependencies:
  flutter:
    sdk: flutter
  json_annotation: ^4.5.0 # 确保使用最新版本

dev_dependencies:
  build_runner: ^2.1.7 # 确保使用最新版本
  json_serializable: ^6.1.4 # 确保使用最新版本

然后,运行以下命令来获取这些依赖项:

flutter pub get

接下来,创建一个数据模型。例如,假设我们有一个用户模型 User

// user.dart
import 'package:json_annotation/json_annotation.dart';

part 'user.g.dart'; // 这将是我们生成的代码文件

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

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

  // 从JSON生成User对象
  factory User.fromJson(Map<String, dynamic> json) => _$UserFromJson(json);

  // 将User对象转换为JSON
  Map<String, dynamic> toJson() => _$UserToJson(this);
}

注意,上面的代码中我们使用了 @JsonSerializable() 注解,并且引入了一个名为 user.g.dart 的部分文件。这个文件将由 json_serializable 插件自动生成。

现在,我们需要生成这些文件。在项目根目录下运行以下命令:

flutter pub run build_runner build

这将生成 user.g.dart 文件,其中包含 fromJsontoJson 方法的实现。

下面是一个使用 User 模型的简单示例:

// main.dart
import 'package:flutter/material.dart';
import 'user.dart';

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('JSON Serialization Demo'),
        ),
        body: Center(
          child: UserDemo(),
        ),
      ),
    );
  }
}

class UserDemo extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    // 创建一个User对象
    User user = User(name: 'John Doe', age: 30, email: 'john.doe@example.com');

    // 将User对象转换为JSON
    Map<String, dynamic> userJson = user.toJson();
    print('User JSON: $userJson');

    // 从JSON生成User对象
    User userFromJson = User.fromJson(userJson);
    print('User from JSON: ${userFromJson.name}, ${userFromJson.age}, ${userFromJson.email}');

    return Text('Check the console for JSON serialization and deserialization output.');
  }
}

运行这个Flutter应用,你将在控制台中看到User对象的JSON表示以及从JSON反序列化的User对象。

这就是使用 json_serializable 插件在Flutter中进行JSON序列化和反序列化的基本方法。如果你确实是在寻找一个名为 json_creator 的特定插件,并且它在Flutter社区中存在,你可能需要查阅该插件的官方文档或GitHub存储库以获取具体的使用方法。不过,上述方法应该是处理JSON序列化和反序列化的标准做法。

回到顶部