Flutter数据库管理插件realm_repo的使用
Flutter数据库管理插件realm_repo的使用
realm_repo
是一个用于简化 Flutter 中 Realm 数据库操作的插件。通过声明数据库、在线或离线仓库,可以轻松地进行单个对象和集合的 CRUD 操作。
主要特性
- 在线和离线支持:可以处理在线和离线数据库操作。
- 灵活的仓库设计:通过
OnlineValue
,OfflineValue
,OnlineCollection
, 和OfflineCollection
实现对单个对象和集合的管理。 - 简单易用:通过继承
RealmOnlineDatabase
或RealmOfflineDatabase
类来实现数据库的管理。
实体(Entities)
要创建一个 Realm 模型,需要将类标注为 @RealmModel
并且类名以 _
开头,并添加一个主键标注 @PrimaryKey
。
import 'package:realm/realm.dart';
part 'realm_model_example.g.dart';
@RealmModel()
class _MyRealmObject {
@PrimaryKey()
@MapTo('_id')
late ObjectId id;
late String name;
}
自动生成构建类
为了生成构建类,需要运行以下命令并确保导入了 part '$name.g.dart'
:
flutter pub run realm generate
Realm 仓库(Realm Repositories)
RealmRepositories
是一种封装在仓库中的集合类型。只需添加以下导入:
import 'package:realm_repo/realm_repo.dart';
1. 在线值(OnlineValue)
用于存储单个对象到云端 Atlas。
late final OnlineValueRealmRepository<MyRealmObject> myUserDataRepository =
OnlineValueRealmRepository(appId: appId, user: user, schemas: [MyRealmObject.schema]);
2. 离线值(OfflineValue)
用于存储单个对象到离线数据库。
final OfflineValueRealmRepository<MyRealmObject> myUserDataRepository =
OfflineValueRealmRepository(schemas: [MyRealmObject.schema]);
3. 在线集合(OnlineCollection)
用于存储对象集合到云端 Atlas。
late final OnlineCollectionRealmRepository<MyRealmObject> allUserDataRepository =
OnlineCollectionRealmRepository(appId: appId, user: user, schemas: [MyRealmObject.schema]);
4. 离线集合(OfflineCollection)
用于存储对象集合到离线数据库。
final OfflineCollectionRealmRepository<MyRealmObject> allUserDataRepository =
OfflineCollectionRealmRepository(schemas: [MyRealmObject.schema]);
Realm 数据库(Realm Databases)
要实现 Realm 数据库,可以通过扩展 RealmOnlineDatabase
或 RealmOfflineDatabase
类来声明相应的仓库。
在线数据库(Online Database)
class MyOnlineDatabase extends RealmOnlineDatabase {
MyOnlineDatabase({required super.appId});
late final OnlineValueRealmRepository<MyRealmObject> myUserDataRepository =
OnlineValueRealmRepository(
appId: appId, user: user, schemas: [MyRealmObject.schema]);
late final OnlineCollectionRealmRepository<MyRealmObject> allUserDataRepository =
OnlineCollectionRealmRepository(
appId: appId, user: user, schemas: [MyRealmObject.schema]);
}
Future<void> main() async {
/// 使用在线数据库来存储集合和单个对象
MyOnlineDatabase onlineDb = MyOnlineDatabase(appId: 'Insert APP ID HERE');
/// 初始化数据库
await onlineDb.init();
}
离线数据库(Offline Database)
class MyOfflineDatabase extends RealmOfflineDatabase {
MyOfflineDatabase();
final OfflineValueRealmRepository<MyRealmObject> myUserDataRepository =
OfflineValueRealmRepository(schemas: [MyRealmObject.schema]);
final OfflineCollectionRealmRepository<MyRealmObject> allUserDataRepository =
OfflineCollectionRealmRepository(schemas: [MyRealmObject.schema]);
}
Future<void> main() async {
/// 使用离线数据库来存储集合和单个对象
MyOfflineDatabase offlineDb = MyOfflineDatabase();
}
示例代码
import 'package:realm/realm.dart';
import 'package:realm_repo/realm_repo.dart';
import 'realm_model_example.dart';
Future<void> main() async {
ObjectId id = ObjectId();
String name = "Realm Object";
MyRealmObject realmObj = MyRealmObject(id, name);
// 在线数据库
/// 使用在线数据库来存储集合和单个对象
MyOnlineDatabase onlineDb = MyOnlineDatabase(appId: 'Insert APP ID HERE');
/// 初始化数据库
await onlineDb.init();
// 创建
/// 保存单个对象作为唯一值
onlineDb.myUserDataRepository.save(realmObj);
/// 保存对象到集合
onlineDb.allUserDataRepository.save(realmObj);
/// 保存多个对象到集合
onlineDb.allUserDataRepository.saveAll([realmObj, realmObj, realmObj]);
// 读取
/// 获取存储的单个对象的值
onlineDb.myUserDataRepository.get();
/// 在集合中按索引查找
onlineDb.allUserDataRepository.get(0);
/// 查找集合中的所有对象
onlineDb.allUserDataRepository.getAll();
// 离线数据库
/// 使用离线数据库来存储集合和单个对象
MyOfflineDatabase offlineDb = MyOfflineDatabase();
// 更新
realmObj.name = "Realm Object 2";
/// 更新单个对象的值
offlineDb.myUserDataRepository.save(realmObj);
/// 更新集合中具有相同ID的对象
offlineDb.allUserDataRepository.save(realmObj);
/// 更新集合中具有相同ID的多个对象
offlineDb.allUserDataRepository.saveAll([realmObj]);
// 删除
/// 删除单个对象的值
offlineDb.myUserDataRepository.delete();
/// 删除集合中的对象
offlineDb.allUserDataRepository.delete(realmObj);
/// 删除集合中的所有值
offlineDb.allUserDataRepository.deleteAll();
}
/// 如何实现在线数据库
/// 只需继承 RealmOnlineDB 类并提供 appId
/// 简单地添加到现有数据库中
/// 然后声明您的仓库
class MyOnlineDatabase extends RealmOnlineDatabase {
MyOnlineDatabase({required super.appId});
late final OnlineValueRealmRepository<MyRealmObject> myUserDataRepository =
OnlineValueRealmRepository(
appId: appId, user: user, schemas: [MyRealmObject.schema]);
late final OnlineCollectionRealmRepository<MyRealmObject> allUserDataRepository =
OnlineCollectionRealmRepository(
appId: appId, user: user, schemas: [MyRealmObject.schema]);
}
/// 同样如 MyOnlineDatabase 所述,但没有 appId
class MyOfflineDatabase extends RealmOfflineDatabase {
MyOfflineDatabase();
final OfflineValueRealmRepository<MyRealmObject> myUserDataRepository =
OfflineValueRealmRepository(schemas: [MyRealmObject.schema]);
final OfflineCollectionRealmRepository<MyRealmObject> allUserDataRepository =
OfflineCollectionRealmRepository(schemas: [MyRealmObject.schema]);
}
更多关于Flutter数据库管理插件realm_repo的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html
1 回复