【发布时间】:2021-10-15 03:16:10
【问题描述】:
我正在尝试在我的颤振应用程序中使用数据库表单资产文件夹。我试过这段代码:
class DatabaseHelper {
static const _databaseName = "main.db";
static const _databaseVersion = 1;
DatabaseHelper._privateConstructor();
static final DatabaseHelper instance = DatabaseHelper._privateConstructor();
static Database _database;
Future<Database> get database async {
if (_database != null) return _database;
_database = await _initDatabase(); // only initialize if not created already
return _database;
}
_initDatabase() async {
String path = join(await getDatabasesPath(), _databaseName);
if (!(await databaseExists(path))) {
ByteData data = await rootBundle.load(join("assets", _databaseName));
List<int> bytes =
data.buffer.asUint8List(data.offsetInBytes, data.lengthInBytes);
await File(path).writeAsBytes(bytes);
}
return await openDatabase(path, version: _databaseVersion);
}
}
但代码在此代码DatabaseHelper._privateConstructor(); 处抛出此错误
错误:
必须初始化不可为空的变量“_database”。
尝试添加一个初始化表达式。
在这段代码中: 静态数据库_database;
Non-nullable instance field '_database' must be initialized.
Try adding an initializer expression, or add a field initializer in this constructor, or mark it 'late'.dartnot_initialized_non_nullable_instance_field
我是 Flutter 的新手,我不知道那是什么意思...请帮我解决这个问题 :)
【问题讨论】:
-
将late关键字放在_database的开头
-
@AmitSingh 不!
late通常应作为最后的手段使用。您无法检查late变量是否已初始化,而_database是否已异步初始化。这段代码显然打算让_database可以为空。而是将其声明更改为`静态数据库? _database;`. -
真的有人会回答这个问题吗?不要在 cmets 中回答。
标签: database flutter sqlite dart