"LateInitializationError"
"LateInitializationError"
我遇到 “不可为空” 的问题,更新到最新版本时出现这些错误。
我在 运行 应用程序时收到此错误消息:
构建Builder时抛出了以下LateError:
LateInitializationError: 字段 '_rHelper@616106152' 尚未初始化。
我正在尝试连接 sqlite,这是 Helper class:
class RHelper {
static late Database _database;
static late RHelper _rHelper;
RHelper._createInstance();
factory RHelper() {
if (_rHelper == null) {
_rHelper = RHelper._createInstance();
}
return _rHelper;
}
Future<Database> get database async {
if (_database == null) {
_database = await initializeDatabase();
}
return _database;
}
Future<Database> initializeDatabase() async {
var dir = await getDatabasesPath();
var path = dir + "Rminder.db";
var database =
await openDatabase(path, version: 1, onCreate: (db, version) {
db.execute('''
create table $tableReminder (
$colId integer primary key autoincrement,
$colName text not null,
$colDetails text,
$colSave int )
''');
});
return database;
}
和initState函数:
我只是想看看数据库是否初始化成功!
void initState() 异步 {
super.initState();
await helper
.initializeDatabase()
.then((value) => {print("------------donne?")}); }
注意:我也试过“.whenComplete()”,但没有用!
您必须申报
Database? _database;
RHelper? _rHelper;
而不是
static late Database _database;
static late RHelper _rHelper;
因为这些变量可能包含 null
个值(参见您自己的代码):
if (_rHelper == null) // <-------
关键字late
用于不可为空的变量,稍后将初始化(例如,在initState
方法中)。
更新:
由于 _rHelper
可以为空,因此您必须使用 ! (感叹号)将可空值解析为不可空值。
class RHelper {
factory RHelper() {
if (_rHelper == null) {
_rHelper = RHelper._createInstance();
}
return _rHelper!; // <--------------
}
RHelper._createInstance();
static RHelper? _rHelper;
}
P.S。请阅读这篇文章Understanding null safety。
我遇到 “不可为空” 的问题,更新到最新版本时出现这些错误。 我在 运行 应用程序时收到此错误消息:
构建Builder时抛出了以下LateError:
LateInitializationError: 字段 '_rHelper@616106152' 尚未初始化。
我正在尝试连接 sqlite,这是 Helper class:
class RHelper { static late Database _database; static late RHelper _rHelper; RHelper._createInstance(); factory RHelper() { if (_rHelper == null) { _rHelper = RHelper._createInstance(); } return _rHelper; } Future<Database> get database async { if (_database == null) { _database = await initializeDatabase(); } return _database; } Future<Database> initializeDatabase() async { var dir = await getDatabasesPath(); var path = dir + "Rminder.db"; var database = await openDatabase(path, version: 1, onCreate: (db, version) { db.execute(''' create table $tableReminder ( $colId integer primary key autoincrement, $colName text not null, $colDetails text, $colSave int ) '''); }); return database; }
和initState函数: 我只是想看看数据库是否初始化成功!
void initState() 异步 {
super.initState(); await helper .initializeDatabase() .then((value) => {print("------------donne?")}); }
注意:我也试过“.whenComplete()”,但没有用!
您必须申报
Database? _database;
RHelper? _rHelper;
而不是
static late Database _database;
static late RHelper _rHelper;
因为这些变量可能包含 null
个值(参见您自己的代码):
if (_rHelper == null) // <-------
关键字late
用于不可为空的变量,稍后将初始化(例如,在initState
方法中)。
更新:
由于 _rHelper
可以为空,因此您必须使用 ! (感叹号)将可空值解析为不可空值。
class RHelper {
factory RHelper() {
if (_rHelper == null) {
_rHelper = RHelper._createInstance();
}
return _rHelper!; // <--------------
}
RHelper._createInstance();
static RHelper? _rHelper;
}
P.S。请阅读这篇文章Understanding null safety。