【问题标题】:How to set up sqlite database in flutter with null safety?如何在具有空安全性的情况下设置 sqlite 数据库?
【发布时间】:2022-01-18 00:21:24
【问题描述】:

我一直在努力建立一个使用 sqflite 的 sqlite 数据库。每次我调用数据库的 getter 方法时,代码都会生成一个新的数据库实例。代码如下:

class DatabaseProvider {
  DatabaseProvider._();
  static final DatabaseProvider dbProvider = DatabaseProvider._();

  static Database? _database;

  Future<Database> get database async => _database ??= await _createDatabase();
}
...

【问题讨论】:

  • _createDatabase() 在你的代码中做了什么?它会初始化_database 吗?
  • 是的,它正在使用await openDatabase() 打开数据库并返回Future&lt;Database&gt;
  • 那么,您是否将返回的对象设置为_database?,例如:_database = await openDatabase()
  • 我没有将返回的对象设置为_database,因为_database 已分配给_createDatabase(),并且该函数正在返回Database 对象。我试图将getter方法更改为if (_database != null) return _database!_database = await _createDatabase()。但还是一样。每次我尝试插入数据库时​​,我都会得到一个只有一个条目的新数据库实例。
  • 怎么样:Future&lt;Database&gt; get database async { if (_database == null) { _database = await _createDatabase(); } return _database; }

标签: flutter sqlite dart sqflite dart-null-safety


【解决方案1】:

您需要在 getter 中初始化 _database。所以,把它改成这样:

Future<Database> get database async {
  if (_database == null) {
     // initialize database from _createDatabase result.
    _database = await _createDatabase();
  }
  // because _database have beeen initialized above, 
  // then we can use ! to tell that the _database can't be null.
  return _database!;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-25
    • 1970-01-01
    • 2013-04-15
    • 2023-04-09
    • 1970-01-01
    • 2014-01-07
    相关资源
    最近更新 更多