Как получить доступ к файлу конфигурации во флаттере, используя архитектуру blo c - PullRequest
0 голосов
/ 11 февраля 2020

В моем приложении Flutter я разделяю среду разработки dev и prod. Для этого я создал класс AppConfig, расширяющий унаследованный виджет.

class AppConfig extends InheritedWidget {
  AppConfig({
    @required this.title,
    @required this.clientId,
    @required this.redirectUrl,
    @required this.discoveryUrl,
    @required this.scopes,
    @required this.apiBaseUrl,
    @required Widget child,
  }) : super(child: child);

  final String title;
  final String clientId;
  final String redirectUrl;
  final String discoveryUrl;
  final String apiBaseUrl;
  final List<String> scopes;

  static AppConfig of(BuildContext context) {
    return context.dependOnInheritedWidgetOfExactType<AppConfig>();
  }

  @override
  bool updateShouldNotify(InheritedWidget oldWidget) => false;
}

В представлениях все работает нормально, и я могу получить доступ к файлу конфигурации следующим образом: _config = AppConfig.of(context);

Я следую шаблону архитектуры BLo C в своем приложении. Можно ли получить доступ к файлу конфигурации на уровне blo c или сетевом уровне? например, в моем провайдере API. Проблема в том, что у меня нет контекста в этих классах. Цель будет примерно такой:

  Future<dynamic> get(String url) async {
    _config = AppConfig.of(context);
}

как мне этого добиться?

Ответы [ 2 ]

1 голос
/ 11 февраля 2020

AppConfig может быть глобальным синглтоном, и вам не нужно использовать InheritedWidget для этого, вместо этого используйте обычный класс дротиков. Таким образом, вы можете использовать сервисный локатор для настройки экземпляра. Затем получите доступ к экземпляру из любого места в вашем приложении без необходимости использования объекта контекста.

Чтобы настроить сервисный локатор, вы можете использовать этот пакет. Подробные примеры доступны в документации.

0 голосов
/ 11 февраля 2020

Я ищу то же решение. Пожалуйста, предоставьте, если вы найдете один.

Обновление: проверьте эту ссылку, это решение с синглтоном:

https://medium.com/flutter-community/flutter-ready-to-go-e59873f9d7de

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...