Flutter配置生成插件built_config_generator的使用

Flutter配置生成插件built_config_generator的使用

built_config_generator 是一个用于生成 built_config 包配置的工具。通过它,您可以轻松地管理应用的配置信息,并在运行时动态加载这些配置。

使用方法

1. 添加依赖

首先,在项目的 pubspec.yaml 文件中添加 built_config_generatordev_dependencies 中:

dev_dependencies:
  built_config_generator: ^x.x.x

然后执行以下命令以安装依赖:

flutter pub get

2. 创建配置类

接下来,创建一个用于存储配置信息的类。例如,我们创建一个名为 AppConfig 的类来保存 API 地址和其他配置信息。

// lib/app_config.dart
import 'package:built_value/built_value.dart';
import 'package:built_value/serializer.dart';

part 'app_config.g.dart';

abstract class AppConfig implements Built<AppConfig, AppConfigBuilder> {
  String get apiUrl;

  AppConfig._();

  factory AppConfig([void Function(AppConfigBuilder) updates]) = _$AppConfig;

  static Serializer<AppConfig> get serializer => _$appConfigSerializer;
}

3. 生成配置文件

在项目根目录下运行以下命令以生成配置文件:

flutter pub run build_runner build

运行此命令后,会自动生成 app_config.g.dart 文件,该文件包含了 AppConfig 类的实现。

4. 使用配置

现在,您可以在应用中使用生成的 AppConfig 类来加载和访问配置信息。例如:

// lib/main.dart
import 'package:flutter/material.dart';
import 'app_config.dart';

void main() {
  // 加载配置
  final config = AppConfig((b) => b
    ..apiUrl = 'https://api.example.com'
  );

  runApp(MyApp(config: config));
}

class MyApp extends StatelessWidget {
  final AppConfig config;

  const MyApp({required this.config});

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      home: MyHomePage(title: 'Flutter Demo Home Page', config: config),
    );
  }
}

class MyHomePage extends StatelessWidget {
  final AppConfig config;

  const MyHomePage({required Key key, required this.title, required this.config})
      : super(key: key);

  final String title;

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text(title),
      ),
      body: Center(
        child: Text('API URL: ${config.apiUrl}'),
      ),
    );
  }
}

5. 动态加载配置

如果您希望从外部文件(如 JSON 文件)加载配置,可以使用 built_valueJsonSerializable 注解。例如:

修改 AppConfig

// lib/app_config.dart
import 'package:built_value/built_value.dart';
import 'package:built_value/serializer.dart';
import 'package:built_value/json_object.dart';

part 'app_config.g.dart';

abstract class AppConfig implements Built<AppConfig, AppConfigBuilder> {
  String get apiUrl;

  AppConfig._();

  factory AppConfig([void Function(AppConfigBuilder) updates]) = _$AppConfig;

  static Serializer<AppConfig> get serializer => _$appConfigSerializer;

  static AppConfig fromJson(Map<String, dynamic> json) {
    return standardSerializers.deserializeWith(serializer, json)!;
  }

  Map<String, dynamic> toJson() {
    return standardSerializers.serializeWith(serializer, this)! as Map<String, dynamic>;
  }
}

加载 JSON 配置

// lib/main.dart
import 'package:flutter/material.dart';
import 'app_config.dart';
import 'dart:convert';

void main() async {
  // 从 JSON 文件加载配置
  final jsonString = await rootBundle.loadString('assets/config.json');
  final config = AppConfig.fromJson(jsonDecode(jsonString));

  runApp(MyApp(config: config));
}

assets/config.json

{
  "apiUrl": "https://api.example.com"
}

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

1 回复

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


built_config_generator 是一个用于生成配置类的 Flutter 插件,它通常与 built_valuebuilt_collection 一起使用,以生成不可变的配置类。这个插件可以帮助你自动生成代码,减少手动编写样板代码的工作量。

以下是使用 built_config_generator 的步骤:

1. 添加依赖

首先,你需要在 pubspec.yaml 文件中添加以下依赖:

dependencies:
  built_value: ^8.0.0
  built_collection: ^5.0.0
  built_config: ^0.4.0

dev_dependencies:
  build_runner: ^2.0.0
  built_value_generator: ^8.0.0
  built_config_generator: ^0.4.0

2. 创建配置类

接下来,你需要创建一个配置类,并使用 @BuiltConfig 注解来标记它。例如:

import 'package:built_config/built_config.dart';
import 'package:built_value/built_value.dart';
import 'package:built_value/serializer.dart';

part 'app_config.g.dart';

@BuiltConfig()
abstract class AppConfig implements Built<AppConfig, AppConfigBuilder> {
  String get apiUrl;
  int get timeout;

  AppConfig._();
  factory AppConfig([void Function(AppConfigBuilder) updates]) = _$AppConfig;
}

3. 生成代码

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

flutter pub run build_runner build

这将生成 app_config.g.dart 文件,其中包含 AppConfig 类的实现。

4. 使用配置类

现在你可以使用生成的配置类了。例如:

void main() {
  final config = AppConfig((b) => b
    ..apiUrl = 'https://api.example.com'
    ..timeout = 30);

  print('API URL: ${config.apiUrl}');
  print('Timeout: ${config.timeout}');
}

5. 从文件加载配置

你还可以从 JSON 文件或其他数据源加载配置。首先,确保你的配置类实现了 Serializable 接口,然后使用 built_value 的序列化功能来加载配置。

import 'dart:convert';
import 'package:built_value/serializer.dart';
import 'package:built_value/standard_json_plugin.dart';

void main() async {
  final jsonString = await File('config.json').readAsString();
  final jsonMap = jsonDecode(jsonString) as Map<String, dynamic>;

  final serializers = (Serializers().toBuilder()
    ..addPlugin(StandardJsonPlugin())).build();

  final config = serializers.deserializeWith(AppConfig.serializer, jsonMap);

  print('API URL: ${config.apiUrl}');
  print('Timeout: ${config.timeout}');
}

6. 更新配置

如果你需要更新配置,可以使用 rebuild 方法:

void main() {
  final config = AppConfig((b) => b
    ..apiUrl = 'https://api.example.com'
    ..timeout = 30);

  final updatedConfig = config.rebuild((b) => b..timeout = 60);

  print('Original Timeout: ${config.timeout}');
  print('Updated Timeout: ${updatedConfig.timeout}');
}
回到顶部