我在我的应用程序中使用SQFLite颤振包 . 但是,由于与DB的连接,我一直变为null . 下面是我在初始化DB,创建表以及添加项目和获取项目的方法中使用的代码:
import 'package:sqflite/sqflite.dart';
import 'package:path_provider/path_provider.dart';
import 'dart:io';
import 'package:path/path.dart';
import 'dart:async';
class StoreDBProvider {
Database db;
init() async {
Directory documentsDirectory = await
getApplicationDocumentsDirectory();
final path = join(documentsDirectory.path, "carts.db");
db = await openDatabase(
path,
version: 3,
onCreate: (Database newDB, int version){
newDB.execute('CREATE TABLE Cart (id INTEGER
PRIMARY KEY, name TEXT, price DOUBLE, image TEXT, rating DOUBLE)');
}
);
return db;
}
Future<dynamic> fetchItem(int id) async {
print("DB CONNECTION IS: $db");
final maps = await db.query(
"Cart",
columns: null,
where: "id = ?",
whereArgs: [id],
);
print(maps);
if(maps.length > 0){
print("Data exists");
return maps.first;
}
return null;
}
Future<int> addItem(item) async{
return db.insert("Cart", item);
}
}
在一些调试之后,我注意到“db”值为null . 这是错误消息:
E/flutter ( 6921): [ERROR:flutter/shell/common/shell.cc(182)] Dart
Error: Unhandled exception:
E/flutter ( 6921): NoSuchMethodError: The method 'insert' was called on null.
E/flutter ( 6921): Receiver: null
E/flutter ( 6921): Tried calling: insert("Cart", _LinkedHashMap len:5)
E/flutter ( 6921): #0 Object.noSuchMethod
(dart:core/runtime/libobject_patch.dart:50:5)
E/flutter ( 6921): #1 StoreDBProvider.addItem
(文件:///Users/Oluwashola/workspace/fashion_style/lib/src/resources/store_db_provider.dart:46:15)
请在此获得任何帮助 . 谢谢 .
2 回答
如果有帮助,这是我的工作代码 . 注意我在db中使用异步getter并在方法中使用db时等待 . 害怕我也是一个颤抖的新手 .
注意我通过Future与DatabaseHelper交互 . 请参阅第二个代码块 . 我认为这需要使用FutureBuilder . 我怀疑你需要使用它来处理(略微)缓慢加载异步数据库调用 .
与dbHelper类交互:
我有这样的共同抽象提供者:
并做一些交易: