Dart 中的 Lazy Singleton 与 Singleton

Ben*_*min 4 singleton dart flutter

我正在使用get_it包,你有两个选项来注册单例,lazy 和我猜是“常规”(GetIt.instance.registerLazySingletonGetIt.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;
  }
}
Run Code Online (Sandbox Code Playgroud)

它是如何注册的:

// main.dart
getIt.registerSingleton<AndroidDetails>(AndroidDetails(), signalsReady: true);
Run Code Online (Sandbox Code Playgroud)

我的问题是,Dart 和 get_it 包中的“普通”单身人士和懒惰单身人士有什么区别?

小智 9

两者都是Singletons。但是LazySingleton指的是一个类,其资源在第一次使用之前不会被初始化。它通常用于节省资源和内存。


Den*_*s G 6

“惰性”是指在第一次请求时而不是在声明时启动资源。有关该概念的更多阅读内容如下:https://en.wikipedia.org/wiki/Lazy_initialization