【发布时间】:2021-07-06 23:40:54
【问题描述】:
我正在使用flutter制作一个Windows应用程序,在使用sqflite制作数据库时,弹出这个错误我不知道如何真正解决这个问题。
import 'dart:io';
import 'package:path_provider/path_provider.dart';
import 'package:path/path.dart';
import 'package:sqflite/sqflite.dart';
class DatabaseHelper {
static final _dbName = 'Database.db';
static final _dbVersion = 1;
static final _tableName = 'my table';
static final columnId = '_id';
static final columnName = 'name';
DatabaseHelper._privateConstuctor();
static final DatabaseHelper instance = DatabaseHelper._privateConstuctor();
static Database _database;
Future<Database> get database async {
if (_database == null) {
_database = await _initiateDatabase();
}
return _database;
}
_initiateDatabase() async {
Directory directory = await getApplicationDocumentsDirectory();
String path = join(directory.path, _dbName);
return await openDatabase(path, version: _dbVersion, onCreate: _onCreate);
}
Future _onCreate(Database db, int version) async {
await db.execute('''
CREATE TABLE $_tableName (
$columnId INTEGER PRIMARY KEY,
$columnName TEXT NOT NULL)
''');
}
Future<int> insert(Map<String, dynamic> row) async {
Database db = await instance.database;
return await db.insert(_tableName, row);
}
Future<List<Map<String, dynamic>>> queryAll() async {
Database db = await instance.database;
return await db.query(_tableName);
}
Future<int> update(Map<String, dynamic> row) async {
Database db = await instance.database;
int id = row[columnId];
return await db
.update(_tableName, row, where: '$columnId = ?', whereArgs: [id]);
}
Future<int> delete(int id) async {
Database db = await instance.database;
return await db.delete(_tableName, where: '$columnId = ?', whereArgs: [id]);
}
}
这是我用于数据库助手的代码....它在 _database 中显示错误,如下所示:
The non-nullable variable '_database' must be initialized.
Try adding an initializer expression.
【问题讨论】:
-
您的变量
static Database _database;在初始化时未分配任何值。所以值将是null。但是因为您使用的是 Dart 2.12,所以类型Database是不可为空的类型,因此它永远不可能是null。如果你想让它的值为null,你应该将类型更改为Database?,这允许变量指向Database对象或null。 -
谢谢它的工作,但现在它显示“'数据库类型的值?'无法从函数“database”返回,因为它的返回类型为“Future
”。
标签: sql database flutter dart sqflite