我正在使用get_it包,你会得到两个注册单例的选项,lazy和"regular“(分别是GetIt.instance.registerLazySingleton和GetIt.instance.registerSingleton )下面是一个注册为普通单例的类:
class AndroidDetails {
static final DeviceInfoPlugin _deviceInfoPlugin = DeviceInfoPlugin();
Map<String, dynamic> _deviceData = {};
AndroidDetails() {
_init().then((_) => getIt.signalReady(this));
}
Future<void> _init() async {
try {
AndroidDeviceInfo _deviceInfo = await deviceInfoPlugin.androidInfo;
_deviceData = _getDeviceData(_deviceInfo);
} on PlatformException {
_deviceData = <String, dynamic>{
'Error:': 'Failed to get platform version.',
};
}
}
Map<String, dynamic> _getDeviceData(AndroidDeviceInfo build) {
return <String, dynamic>{
'version.sdkInt': build.version.sdkInt,
};
}
bool canChangeStatusBarColor() {
if (_deviceData.isNotEmpty) {
return _deviceData['version.sdkInt'] >= 21;
}
return null;
}
bool canChangeNavbarIconColor() {
if (_deviceData.isNotEmpty) {
return _deviceData['version.sdkInt'] >= 27;
}
return null;
}
}它的注册方式:
// main.dart
getIt.registerSingleton<AndroidDetails>(AndroidDetails(), signalsReady: true);我的问题是,Dart和get_it包中的“正常”单例和懒惰单例有什么不同?
发布于 2019-12-24 16:17:05
两者都是Singletons。但LazySingleton指的是一个类,它的资源只有在第一次使用时才会被初始化。它通常用来节省资源和内存。
发布于 2019-12-24 06:44:37
“惰性”是指在第一次请求时启动资源,而不是在声明时启动资源。这里有更多关于这个概念的阅读:https://en.wikipedia.org/wiki/Lazy_initialization
https://stackoverflow.com/questions/59459976
复制相似问题