Flutter可配置化插件configurable的使用

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

Flutter可配置化插件configurable的使用

Dart Configurable Environment

Pub

  • ✅ 允许从环境文件获取属性
  • ✅ 缓存运行时属性
  • ✅ 支持dotenv文件(使用DotenvConfigurationProvider)
  • ✅ 支持函数(getConfig, getConfigOrNull, hasConfigKey, setConfig)
  • ✅ 支持null安全(dart 2.12.2+)
  • ✅ 自定义配置提供者
  • ✅ 添加异步函数支持

Issue

  • Flutter应用在设备上运行时,不支持dotenv (.env) 文件(因为设备上的运行时环境限制)

Resolution

  • Flutter应用可以使用持久化存储,如SharedPreference或FlutterSecureStorage来实现配置提供者

Example

import 'package:configurable/configurable.dart';
import 'package:configurable/dotenv_configuration_provider.dart';
import 'package:configurable/simple_configuration_provider.dart';
import 'package:configurable/system_config.dart';

void main() {
  var key = 'app.name';
  var value = 'CUBETIQ Solution';

  /// 内存中的提供者(内置)
  var simpleProvider = SimpleConfigurationProvider();
  SystemConfig.setProvider(simpleProvider);
  var result1 = SystemConfig.getOrNull(key, defaultValue: value);

  /// 输出: CUBETIQ Solution
  print(result1);

  /// 获取配置函数
  getConfig('app.title', defaultValue: 'My App Title!');
  getConfigOrNull('app.null.ignore');

  /// 设置配置函数
  /// 只支持可变的配置提供者
  setConfig('my.app', 'Hello My App');

  /// dotenv 提供者(来自 .env 文件)
  var dotenvProvider = DotenvConfigurationProvider();
  SystemConfig.setProvider(dotenvProvider);
  var result2 = SystemConfig.getOrNull('HOME');

  /// 输出: 用户的主目录
  print(result2);
}

实现自定义配置提供者

class MyCustomProvider implements ConfigurationProvider {
  Map<String, String?> configDataSet = {};

  @override
  bool containsKey(String key) {
    return configDataSet.containsKey(key);
  }

  @override
  String? getOrNull(String key, {String? defaultValue}) {
    var value = configDataSet[key];

    if (value == null) {
      return defaultValue;
    }

    return value;
  }
}

Contributors

License

MIT License

Copyright (c) 2021 CUBETIQ Solution

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.

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

1 回复

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


当然,下面是一个关于如何在Flutter中使用configurable插件的示例代码。configurable插件允许你创建可配置的小部件,通常用于设置或配置应用的某些参数。

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

dependencies:
  flutter:
    sdk: flutter
  configurable: ^x.y.z  # 请替换为最新版本号

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

以下是一个简单的示例,展示如何使用configurable插件创建一个可配置的页面:

  1. 创建主应用页面
import 'package:flutter/material.dart';
import 'package:configurable/configurable.dart';
import 'config_page.dart'; // 导入你自定义的配置页面

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Configurable Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: MyHomePage(),
    );
  }
}

class MyHomePage extends StatefulWidget {
  @override
  _MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Flutter Configurable Demo'),
      ),
      body: Center(
        child: ElevatedButton(
          onPressed: () {
            Navigator.push(
              context,
              MaterialPageRoute(builder: (context) => ConfigPage()),
            );
          },
          child: Text('Open Config Page'),
        ),
      ),
    );
  }
}
  1. 创建配置页面

创建一个新的Dart文件config_page.dart,并在其中定义配置页面:

import 'package:flutter/material.dart';
import 'package:configurable/configurable.dart';

class ConfigPage extends StatefulWidget {
  @override
  _ConfigPageState createState() => _ConfigPageState();
}

class _ConfigPageState extends State<ConfigPage> {
  final Configurable _configurable = Configurable();

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Configuration Page'),
      ),
      body: Padding(
        padding: const EdgeInsets.all(16.0),
        child: Column(
          crossAxisAlignment: CrossAxisAlignment.start,
          children: [
            TextFormField(
              decoration: InputDecoration(labelText: 'Name'),
              initialValue: _configurable.getString('name', defaultValue: 'John Doe'),
              onChanged: (value) {
                _configurable.setString('name', value);
              },
            ),
            SizedBox(height: 16),
            SwitchListTile(
              title: Text('Enable Notifications'),
              value: _configurable.getBool('enableNotifications', defaultValue: false),
              onChanged: (value) {
                _configurable.setBool('enableNotifications', value);
              },
            ),
            SizedBox(height: 16),
            ElevatedButton(
              onPressed: () {
                // 保存配置,这里可以根据需求保存到SharedPreferences或其他存储
                // 例如:
                // _saveConfig();
                Navigator.pop(context);
              },
              child: Text('Save'),
            ),
          ],
        ),
      ),
    );
  }

  // 示例保存配置的方法(可以根据需求实现)
  void _saveConfig() {
    // 示例:保存到SharedPreferences
    // SharedPreferences.getInstance().then((prefs) {
    //   prefs.setString('name', _configurable.getString('name'));
    //   prefs.setBool('enableNotifications', _configurable.getBool('enableNotifications'));
    // });
  }
}

在这个示例中,我们创建了一个简单的配置页面,其中包含了一个文本输入框和一个开关。用户可以在这个页面上输入他们的名字并启用或禁用通知。Configurable类用于存储和管理这些配置值。

请注意,示例中的_saveConfig方法被注释掉了,因为实际保存配置的方式取决于你的应用需求。你可以使用SharedPreferences、SQLite或其他存储机制来持久化这些配置。

希望这个示例能帮助你理解如何在Flutter中使用configurable插件!

回到顶部