如何创建单例数据库对象并在不同文件中使用?

问题描述 投票:0回答:1

我想为我的应用程序创建数据库,并且我正在使用楼层数据库。我已经创建了实体、dao 和数据库类,如下所示。

@entity
class User{
  @primaryKey
  final int id;

  final String name;
  final String email;
  User(this.id, this.name, this.email);
}

@dao
abstract class UserDao {
  @Query('SELECT * FROM User')
  Future<List<User>> findAllUsers();

  @Query('DELETE FROM User WHERE id = :id')
  Future<void> deleteUserById(int id);

  @insert
  Future<void> insertUser(User user);
}

@Database(version: 1, entities: [User])
abstract class Appdatabase extends FloorDatabase{
  UserDao get userDao;
}

我已经在我的 main.dart 文件中创建了一个名为名称的数据库,如下所示。

 final database = await $FloorAppdatabase.databaseBuilder("MY_DATABASE").build();

我可以像这样存储数据

database.userDao().insertUser(user);
但是如果我想在其他文件中使用数据库对象,那么我必须将其创建为通用对象。有人可以帮助我如何将其创建为通用文件并且我可以在任何我想要的地方使用它吗?

database flutter floor
1个回答
0
投票

您可以创建一个像下面这样的单例类。

class DatabaseHelper {
  static final DatabaseHelper instance = DatabaseHelper._internal();

  DatabaseHelper._internal();

  late final AppDatabase database;

  Future<void> initializeDatabase() async {
    database = await $FloorAppDatabase.databaseBuilder("MY_DATABASE").build();
  }
}

您在主程序中初始化数据库

Future<void> main() async {
  WidgetsFlutterBinding.ensureInitialized();
  await DatabaseHelper.instance.initializeDatabase();

  runApp(const MyApp());
}

之后,您可以使用以下方式从任何地方调用它:

final database = DatabaseHelper.instance.database;
final user = User(1, 'Test', '[email protected]');
database.userDao.insertUser(user);

或者您可以使用 get_it

© www.soinside.com 2019 - 2024. All rights reserved.