++++ Обновление июль 2019 ++++
Существует новый пакет Flutter, который использует глобальную конфигурацию Flutter.
Github: https://github.com/Ephenodrom/EZ-Flutter
EZ Flutter поддерживает управление различными файлами конфигурации, которые могут быть доступны внутри приложения. EzRunner загружает различные файлы конфигурации при запуске.
Из Документации :
Настройки EZ
EzRunner автоматически загружает файл json с именем ez_settings.json из каталога ресурсов.
Файл ez_settings.json должен содержать только конфигурацию, относящуюся к EZ Framework.
EzSettingsKeys определяет все параметры, доступные для EZ Framework.
Параметры среды
Если envPath задано в качестве аргумента в методе run EzRunner , загружает конфигурацию и доступ к нему можно получить с помощью EzSettings env () .
EzRunner.run(CustomWidget() ,
envPath: "assets/env_dev.json");
Среда.Файл json должен содержать конфигурацию в зависимости от текущей среды, в которой работает приложение.
Настройки приложения
EzRunner загрузит конфигурацию из applicationPath и сделать этодоступно через app () метод EzSettings .
EzRunner.run(CustomWidget(),
applicationPath: "assets/application.json");
Доступ к настройкам
Доступ к настройкам можно получить через EzSettings класс.
Map<String, dynamic> ezSettings = EzSettings.ez();
Map<String, dynamic> envSettings = EzSettings.env();
Map<String, dynamic> appSettings = EzSettings.app();
++++ Старый ответ ++++
Это было чертовски просто ... Просто используйте асинхронный способ и установите "ожидание""перед запуском приложения.Поэтому легко загрузить конфигурационный файл из ресурсов и подготовить его до запуска приложения.
Future<String> loadFromAsset(String name) async {
String content = await rootBundle.loadString("assets/cfg/$name.json");
return content;
}
Я написал простой пакет для решения этой проблемы.Проверьте это, если у вас такая же ситуация.https://github.com/Ephenodrom/Flutter-Global-Config
import 'package:flutter/material.dart';
import 'package:global_configuration/global_configuration.dart';
void main() async{
GlobalConfiguration cfg = new GlobalConfiguration();
await cfg.loadFromAsset("app_settings").loadFromAsset("env_dev");
runApp(MyApp());
}
class MyApp extends StatelessWidget {
...
}
И тогда я могу использовать конфигурацию где угодно.
import 'package: flutter / material.dart';import 'package: global_configuration / global_configuration.dart';
class CustomWidget extends StatelessWidget {
CustomWiget(){
// Access the config in the constructor
GlobalConfiguration cfg = new GlobalConfiguration();
print(cfg.getAppConfig("key1"); // prints value1
}
@override
Widget build(BuildContext context) {
// Access the config in the build method
GlobalConfiguration cfg = new GlobalConfiguration();
return new Text(cfg.getAppConfig("key2"));
}
}