Flutter配置管理插件strict_config的使用

Flutter配置管理插件strict_config的使用

特性

内置验证错误检查:

  • 检测缺失的必填项。
  • 可以为可选的标量值分配默认值。
  • 可以为整数值指定最大和/或最小限制。
  • 可以指定允许的字符串来限制可能的字符串值。
  • 默认情况下移除字符串中的前导和尾随空白。
  • 默认情况下将字符串中的多个空白替换为一个空格。
  • 默认情况下拒绝空和空白字符串。
  • 默认情况下接受空列表值。可以更改此设置。
  • 可以检测配置中的意外项目。

配置可以包含用于Dart logging包的日志级别。

不使用Dart注解,因此程序可以使用dart2native编译。

示例

示例配置:

name: "Example"
description: "An example config"

server:
  host: "localhost"
  port: 8080
  tls: true

读取示例配置的程序:

import 'dart:io';
import 'package:strict_config/strict_config.dart';

class ExampleConfig {
  ExampleConfig(ConfigMap m) {
    name = m.string('name'); // 必填字符串
    desc = m.stringOptional('description', keepWhitespace: true); // 可选字符串,保留空白
    server = ServerConfig(m.map('server')); // 服务器配置
    m.unusedKeysCheck(); // 检查是否有未使用的键
  }

  late String name;
  String? desc; // 可选项,可能是null
  late ServerConfig server;
}

class ServerConfig {
  factory ServerConfig(ConfigMap m) {
    final host = m.string('host'); // 必填字符串
    final tls = m.boolean('tls', defaultValue: true); // 布尔值,默认为true
    final port = 
        m.integer('port', min: 1, max: 65535, defaultValue: tls ? 443 : 80); // 整数,范围1到65535
    m.unusedKeysCheck(); // 检查是否有未使用的键

    return ServerConfig._init(host, tls, port);
  }

  ServerConfig._init(this.host, this.tls, this.port);

  String host;
  bool tls;
  int port;
}

void main(List<String> args) {
  final filename = args.isNotEmpty ? args.first : 'example.conf';

  try {
    final text = File(filename).readAsStringSync();

    final config = ExampleConfig(ConfigMap(text));

    print('Name: ${config.name}');
    if (config.desc != null) {
      print('Description: ${config.desc}');
    }
    print('Host: ${config.server.host}');
    print('TLS: ${config.server.tls}');
    print('Port: ${config.server.port}');

    exit(0);
  } on ConfigException catch (e) {
    stderr.write('Error: $filename: $e\n');
    exit(1);
  } on FileSystemException catch (e) {
    stderr.write('Error: ${e.path}: ${e.message}\n');
    exit(1);
  }
}

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

1 回复

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


strict_config 是一个用于 Flutter 的配置管理插件,它可以帮助你在项目中更严格地管理和验证配置。它允许你定义配置的 schema,并在运行时验证配置是否符合预期。这有助于减少由于配置错误导致的运行时问题。

以下是如何使用 strict_config 插件的步骤:

1. 添加依赖

首先,在 pubspec.yaml 文件中添加 strict_config 依赖:

dependencies:
  strict_config: ^1.0.0  # 请查看最新版本

然后运行 flutter pub get 来获取依赖。

2. 创建配置文件

lib 目录下创建一个配置文件,例如 config.yaml

app_name: MyApp
api_url: https://api.example.com
debug_mode: true

3. 定义配置 Schema

创建一个 Dart 文件来定义配置的 schema,例如 config_schema.dart

import 'package:strict_config/strict_config.dart';

class AppConfig extends Config {
  AppConfig(Map<String, dynamic> data) : super(data);

  String get appName => get<String>('app_name');
  String get apiUrl => get<String>('api_url');
  bool get debugMode => get<bool>('debug_mode');
}

4. 加载和验证配置

main.dart 中加载配置文件并验证配置:

import 'package:flutter/material.dart';
import 'package:strict_config/strict_config.dart';
import 'config_schema.dart';

void main() async {
  WidgetsFlutterBinding.ensureInitialized();

  // 加载配置文件
  final config = await Config.load('assets/config.yaml');

  // 验证配置
  final appConfig = AppConfig(config.data);

  runApp(MyApp(appConfig));
}

class MyApp extends StatelessWidget {
  final AppConfig config;

  MyApp(this.config);

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: config.appName,
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: MyHomePage(),
    );
  }
}

class MyHomePage extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Strict Config Example'),
      ),
      body: Center(
        child: Text('Welcome to the app!'),
      ),
    );
  }
}

5. 处理错误

如果配置文件不符合定义的 schema,strict_config 会抛出异常。你可以在 main 函数中捕获这些异常并处理它们:

void main() async {
  WidgetsFlutterBinding.ensureInitialized();

  try {
    // 加载配置文件
    final config = await Config.load('assets/config.yaml');

    // 验证配置
    final appConfig = AppConfig(config.data);

    runApp(MyApp(appConfig));
  } on ConfigException catch (e) {
    print('Configuration error: ${e.message}');
    // 处理配置错误
  } catch (e) {
    print('An error occurred: $e');
    // 处理其他错误
  }
}

6. 运行应用

确保你的 config.yaml 文件在 assets 目录下,并在 pubspec.yaml 中声明它:

flutter:
  assets:
    - assets/config.yaml

然后运行你的 Flutter 应用:

flutter run
回到顶部