我希望全局变量可以在任何函数中使用 所以我添加了代码
import 'package:flutter/material.dart';
Future<Database> dataBase;
像这样。所以我认为数据库变成了全局变量,并一直存储该值。但事实并非如此。在我使用dataBase变量之后
createDB() async {
dataBase = openDatabase(join(await getDatabasesPath(), 'data.db');
}
像这样
而且我会在其他函数中使用数据库
getData() async {
final Database db = await dataBase;
}
但是当我运行getData() function
中的应用程序数据库为null时,为什么数据库为null?
以及如何使全局变量可变?
答案 0 :(得分:0)
这是因为Future<Database> dataBase;
不会将dataBase
初始化为将来的版本,而是null
,它等效于Future<Database> dataBase = null;
。
您在getData()
中的呼叫很可能发生在createDB()
进行更改以设置Future
之前。
在dart中,常见的singelton模式使用的是这样的顶级getter函数:
Future<Database> _db;
Future<Database> getDataBase() async {
_db = _db ?? openDatabase(join(await getDatabasesPath(), 'data.db');
return _db;
}
,然后在getData()
中:
getData() async {
final Database db = await getDataBase();
}