我希望有一个单人对象(即ConfigManager)能够返回一个配置对象(如EnglishLocale),并在整个应用程序生命周期中保持它的可用性。
当我需要一个特定的字符串时,我只需要做一些事情,如
ConfigManager.instance.locale.myString;
现在,我已经看了 此处 为了了解Dart的工作原理。Singleton的创建部分很清楚,但是我需要根据用户的输入提供不同的配置,就像我说的那样。
请看下面的图片以获得更多的示意图。
编辑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的做法,使用constructor怎么样?
// full source code in /sky_engine/lib/ui/painting.dart
class Colors {
const Color(int value) : value = value & 0xFFFFFFFF;
static const Color white = Color(0xFFFFFFFF);
}
然后通过调用Colors.white来使用它
class YourApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'your app',
theme: ThemeData(
primaryColor: Colors.white,
),
);
}
}