美文网首页
Flutter笔记3:Dart的单例模式与异步

Flutter笔记3:Dart的单例模式与异步

作者: like26th | 来源:发表于2021-07-21 10:16 被阅读0次

想要在数据库工具类中使用单例模式。使用Dart的工厂构造函数可以实现。

  DbHelper._internal() {
    createDb();//初始化数据库
  }

  static final _instance = DbHelper._internal();

  factory DbHelper(){
    return _instance;
  }

这里还使用了命名构造函数,在函数体内初始化了数据库。但是初始化数据库的操作是异步的,这样可能会导致空指针错误。

dbHelper = DbHelper();//获取数据库句柄
dbHelper.getData();//获取数据库数据,报错空指针

Dart的构造方法又不支持异步。

  factory DbHelper() async{ //报错Factory bodies can't use 'async', 'async*', or 'sync*'.
    return _instance;
  }

不能使用await async,那么如何实现异步逻辑?

暂时没找到特别完美的办法,但能勉强实现功能。
参考:https://stackoverflow.com/questions/38933801/calling-an-async-method-from-component-constructor-in-dart

修改工具类

class DbHelper{
  late final Future<Database> _database;

  DbHelper._internal() {
      _database = createDb();
  }

  static final _instance = DbHelper._internal();

  factory DbHelper(){
    return _instance;
  }

  Future get initializationDone => _database;
}

增加了两句代码
late final Future<Database> _database;
Future get initializationDone => _database;
在调用时:

dbHelper = DbHelper();
await dbHelper.initializationDone;
dbHelper.getData();

中间加一句await dbHelper.initializationDone;,这样程序会等待initializationDone执行完,initializationDone有会等待_database初始化完,也就是数据库初始化完毕,才会向下执行获取数据方法。

这样实现了表面上的顺序操作,不过在调用时也多了一行代码,应该不是最优雅的解决方式。不知道是否有更好的方法。

相关文章

  • Flutter笔记3:Dart的单例模式与异步

    想要在数据库工具类中使用单例模式。使用Dart的工厂构造函数可以实现。 这里还使用了命名构造函数,在函数体内初始化...

  • 2019-09-23: 十一:Flutter之Dart异步操作?

    十一:Flutter之Dart异步操作? 1: Dart 的异步模型?我们先搞清楚dart是如何搞定异步操作的?1...

  • Dart 单例模式

  • Dart单例模式

  • Dart单例模式

    什么是单例模式? 确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例,这个类称为单例类,单例模式是一...

  • Flutter基础知识积累

    一 Dart基础: Flutter使用Dart进行开发,Dart支持JIT与AOT两种模式。app运行模式有三种...

  • 设计模式整理(2) 单例模式

    学习《Android 源码设计模式解析与实践》系列笔记 什么是单例 单例模式是应用最广,也是最容易理解的模式之一。...

  • flutter

    1.dart2.flutter 本身3.项目中实际问题 dart 4个常用库:core:async异步编程通常使用...

  • 单例模式

    目录 1、设计模式简介 2、什么是单例模式 3、单例模式应用场合 4、单例模式作用 5、单例模式3个要点/要素 6...

  • 设计模式之一:单例模式

    摘要:设计模式之一:单例模式目录介绍1.单例模式介绍2.单例模式定义3.单例模式使用场景4.单例模式的实现方式 4...

网友评论

      本文标题:Flutter笔记3:Dart的单例模式与异步

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