制作一个简单的即时实例作为数据库助手

时间:2019-06-07 16:08:10

标签: flutter dart

我正在尝试使用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.
}

2 个答案:

答案 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()。