如何使全局变量颤动

时间:2019-07-29 13:07:51

标签: flutter

我希望全局变量可以在任何函数中使用 所以我添加了代码

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? 以及如何使全局变量可变?

1 个答案:

答案 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();
}