美文网首页
Flutter 中,两种单例实现

Flutter 中,两种单例实现

作者: Android那些事儿 | 来源:发表于2020-04-06 22:15 被阅读0次

来自,Flutter SharedPreference 包,两种方式,归根结底,属于同一种方式,后一种,借助了Flutter Completer 。

方式一:

class SharedPreferences {
  SharedPreferences._(this._preferenceCache);

  static const String _prefix = 'flutter.';
  static SharedPreferences _instance;
  static Future<SharedPreferences> getInstance() async {
    if (_instance == null) {
      final Map<Object, Object> fromSystem =
          await _kChannel.invokeMethod('getAll');
      assert(fromSystem != null);
      // Strip the flutter. prefix from the returned preferences.
      final Map<String, Object> preferencesMap = <String, Object>{};
      for (String key in fromSystem.keys) {
        assert(key.startsWith(_prefix));
        preferencesMap[key.substring(_prefix.length)] = fromSystem[key];
      }
      _instance = SharedPreferences._(preferencesMap);
    }
    return _instance;
  }
}

方式二:

class SharedPreferences {
  SharedPreferences._(this._preferenceCache);

  static const String _prefix = 'flutter.';
  static Completer<SharedPreferences> _completer;

  static SharedPreferencesStorePlatform get _store =>
      SharedPreferencesStorePlatform.instance;

  /// Loads and parses the [SharedPreferences] for this app from disk.
  ///
  /// Because this is reading from disk, it shouldn't be awaited in
  /// performance-sensitive blocks.
  static Future<SharedPreferences> getInstance() async {
    if (_completer == null) {
      _completer = Completer<SharedPreferences>();
      try {
        final Map<String, Object> preferencesMap =
            await _getSharedPreferencesMap();
        _completer.complete(SharedPreferences._(preferencesMap));
      } on Exception catch (e) {
        // If there's an error, explicitly return the future with an error.
        // then set the completer to null so we can retry.
        _completer.completeError(e);
        final Future<SharedPreferences> sharedPrefsFuture = _completer.future;
        _completer = null;
        return sharedPrefsFuture;
      }
    }
    return _completer.future;
  }
}

相关文章

  • Flutter Tips - 单例

    在Flutter中的单例模式怎么实现呢?换句话说,Flutter中我们怎么以标准的姿势实现一个单例呢?下面我们就开...

  • Flutter 中,两种单例实现

    来自,Flutter SharedPreference 包,两种方式,归根结底,属于同一种方式,后一种,借助了Fl...

  • flutter:单例

    flutter单例 单例使用

  • 单例模式之枚举类enum

    通过枚举实现单例模式 枚举类实现单例模式的优点 对于饿汉式单例模式和懒汉式单例模式了解的同学,使用以上两种单例模式...

  • iOS中的两种单列模式实现

    单例模式算是开发中比较常见的一种模式了。在iOS中,单例有两种实现方式(至少我目前只发现两种)。根据线程安全的实现...

  • Python经典面试题21道

    1、Python如何实现单例模式? Python有两种方式可以实现单例模式,下面两个例子使用了不同的方式实现单例模...

  • Python最经典面试题21道,必看!

    1、Python如何实现单例模式? Python有两种方式可以实现单例模式,下面两个例子使用了不同的方式实现单例模...

  • Python 经典面试题

    1、Python如何实现单例模式? Python有两种方式可以实现单例模式,下面两个例子使用了不同的方式实现单例模...

  • Python 经典面试题

    1、Python如何实现单例模式? Python有两种方式可以实现单例模式,下面两个例子使用了不同的方式实现单例模...

  • C++中线程安全的单例模式(2)

    简介 本文介绍单例模式实现的另外两种方法: 通过double check(借助std::atomic)实现单例模式...

网友评论

      本文标题:Flutter 中,两种单例实现

      本文链接:https://www.haomeiwen.com/subject/uhoiphtx.html