我正在尝试使用floor库在Flutter中使用简单的数据库
该库的简单实现是:
Future<void> main() async {
final database = await $FloorFlutterDatabase
.databaseBuilder('flutter_database.db')
.build();
final dao = database.taskDao;
runApp(FloorApp(dao));
}
在我的实现代码中,我无法从数据库访问taskDao。例如:
var dao = db.taskDao
我的DatabaseHelper
班:
class DatabaseHelper{
static final _databaseName = "flutter_database.db";
DatabaseHelper._privateConstructor();
static final DatabaseHelper instance = DatabaseHelper._privateConstructor();
static $FloorAppDatabase _database;
static var dao;
Future<$FloorAppDatabase> get database async{
if(_database !=null){
return _database;
}
_database = await _initDatabase();
return _database;
}
_initDatabase() async{
return await $FloorAppDatabase
.databaseBuilder(_databaseName)
.build();
}
}
main
类来使用它:
void main() async {
$FloorAppDatabase db = await DatabaseHelper.instance.database;
//var dao = db.
}
答案 0 :(得分:0)
我建议您检查get_it库...以全局获取惰性单例。 还尝试调试从连接到数据库的期货,并用Future.delayed模拟它们,以查看其是否工作正常……(没有库)
答案 1 :(得分:0)
使用get_it库,我通过以下方式异步设置了懒惰的单例:
GetIt serviceLocator = GetIt.instance;
void init() {
serviceLocator.registerLazySingletonAsync<AppDatabase>(() async =>
await $FloorAppDatabase.databaseBuilder('app_database.db').build());
serviceLocator.registerLazySingletonAsync<ExampleDao>(
() async => (await serviceLocator.getAsync<AppDatabase>()).exampleDao);
}
然后从主函数调用service_locator.init()。