flutter - 如何在 Flutter App 中拥有一个全局单例对象

标签 flutter dart configuration singleton

我想要一个能够返回配置对象(例如 EnglishLocale)并使其在整个应用程序生命周期中可用的单例对象(即 ConfigManager)。
让我们做一个例子:

  • 用户第一次启动应用程序时,会要求他选择默认语言(例如英语、法语、意大利语......)。
  • ConfigManager 单例是动态创建的,并绑定(bind)到 Locale 对象(包含该语言中的所有硬编码字符串)。

  • 当我需要一个特定的字符串时,我只需要做类似的事情
    ConfigManager.instance.locale.myString;
    

    现在,我看过 here为了了解 Dart 中的工作原理。 Singleton 创建部分很清楚,但是正如我所说,我需要根据用户输入提供不同的配置。

    查看下图以获得更多示意图:

    enter image description here

    编辑 1 ,现在,这是我到目前为止所做的:
    class ConfigManager {
      Locale loc;
      static ConfigManager _instance;
      factory ConfigManager(Locale loc) => _instance ??= new ConfigManager._(loc);
    
      ConfigManager._(Locale loc);
    
      static get instance => _instance;
    }
    

    这样,当我决定获取一个特定字符串时,我可以使用以下语法:
    ConfigManager.instance.loc.presentation1body
    

    这是初始化阶段
    ConfigManager(new EnglishLocale());
    

    但是我继续收到错误

    "the getter was called on null"



    我有点困惑,请帮助我。

    最佳答案

    实际上,以下代码正在运行:

    class ConfigManager {
       Locale loc;
       static ConfigManager _instance;
       factory ConfigManager() => _instance ??= new ConfigManager._();
    
       void init(Locale loc) {
          this.loc = loc;
       }
    
       ConfigManager._();
    }
    

    使用 init 方法,我可以将所需的东西分配给我的 Singleton ConfigManager,以便稍后即时获得我需要的东西。
    但是,我会在更多性能和代码优雅方面进行更多研究(可能使用不同的模式)。

    关于flutter - 如何在 Flutter App 中拥有一个全局单例对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62284871/

    相关文章:

    android - com.android.support :support-v4 has different version for the compile

    android - 如何从其他文件 Dart 调用 setState

    asp.net - Web.Config 中的 HTTPHandler 标记破坏了 asmx 文件

    json - 错误: The argument type 'int' can't be assigned to the parameter type 'String'

    android - WARN : Unable to load JNA library (OS: Mac OS X 12. 2) 在 Release模式下运行 flutter 应用程序时发出警告。 (M1 Mac)

    android - Flutter 应用中的谷歌地图

    dart - 在 Dart 中使用 "this"初始化最终变量

    database - 首次在sembast中创建商店初始化

    php - php.ini 中 PHP 扩展的默认路径是什么?

    spring - 在 Spring 中添加新属性源的最佳方法是什么?