Flutter数据库管理插件realm_common的使用
Flutter数据库管理插件realm_common的使用
概述
Realm是一个可以直接运行在手机、平板电脑或可穿戴设备上的移动数据库。realm_common
是Realm SDK的一部分,用于Flutter和Dart应用程序。
特性
- 移动优先:Realm是第一个从头开始构建以直接在移动设备上运行的数据库。
- 简单:Realm的对象模型简单易学,不需要ORM,并且API可以让您用更少的代码启动并运行应用程序。
- 现代:支持最新的Dart和Flutter版本,并且构建时考虑了空安全性。
- 快速:在常见操作中,Realm比原始SQLite更快,同时保持极其丰富的功能集。
- MongoDB Atlas Device Sync:使数据在用户、设备和后端之间实时同步变得简单。
快速入门
1. 添加依赖
首先,在您的Flutter项目中添加realm
包:
flutter pub add realm
对于Dart应用:
dart pub add realm_dart
2. 创建数据模型类
创建一个带有下划线前缀的数据模型类,并使用[@RealmModel](/user/RealmModel)()
注解。例如:
import 'package:realm/realm.dart';
part 'app.realm.dart'; // 声明生成文件
[@RealmModel](/user/RealmModel)()
class _Car {
late String make;
late String model;
int? kilometers = 500; // 可选字段
}
3. 生成RealmObject类
使用以下命令生成Car
类:
dart run realm generate
这将生成一个名为app.realm.dart
的文件,该文件应提交到源控制中。
4. 打开Realm并添加对象
配置本地Realm并添加一些对象:
var config = Configuration.local([Car.schema]);
var realm = Realm(config);
var car = Car()..make = "Tesla"..model = "Model Y"..kilometers = 5;
realm.write(() {
realm.add(car);
});
5. 查询对象
查询所有对象或特定条件的对象:
// 获取所有对象
var cars = realm.all<Car>();
Car myCar = cars[0];
print("My car is ${myCar.make} model ${myCar.model}");
// 查询特定条件的对象
cars = realm.all<Car>().query("make == 'Tesla'");
6. 监听更改
获取查询结果的变化流:
final cars = realm.all<Car>().query(r'make == $0', ['Tesla']);
cars.changes.listen((changes) {
print('Inserted indexes: ${changes.inserted}');
print('Deleted indexes: ${changes.deleted}');
print('Modified indexes: ${changes.modified}');
});
realm.write(() => realm.add(Car()..make = 'VW'..model = 'Polo'..kilometers = 22000));
完整示例Demo
下面是一个完整的示例,展示了如何使用Realm进行基本的CRUD操作:
import 'package:realm/realm.dart';
part 'catalog.realm.dart'; // 生成文件声明
[@RealmModel](/user/RealmModel)()
class _Item {
[@PrimaryKey](/user/PrimaryKey)()
late int id;
late String name;
int price = 42;
}
void main() async {
// 配置本地Realm
var config = Configuration.local([Item.schema]);
var realm = Realm(config);
// 添加新对象
var myItem = Item(0, 'Pen', price: 4);
realm.write(() {
realm.add(myItem);
var item = realm.add(Item(1, 'Pencil')..price = 20);
});
// 读取对象属性
print(myItem.name); // 输出: Pen
print(myItem.price); // 输出: 4
// 更新对象属性
realm.write(() {
myItem.price = 20;
myItem.name = "Special Pencil";
});
// 获取所有对象
var items = realm.all<Item>();
var item = items[1]; // 获取第二个对象
// 通过主键查找对象
var itemByKey = realm.find<Item>(0);
// 过滤和排序对象
var objects = realm.query<Item>("name == 'Special Pencil'");
var name = 'Pen';
objects = realm.query<Item>(r'name == $0', [name]);
// 关闭Realm
realm.close();
}
更多关于Flutter数据库管理插件realm_common的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter数据库管理插件realm_common的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
在处理Flutter项目中的数据库管理时,realm_common
是一个流行的插件,它提供了对 Realm 数据库的高效访问。Realm 是一个轻量级、快速且易于使用的数据库,适用于移动应用。以下是一个关于如何在 Flutter 项目中使用 realm_common
插件进行数据库管理的代码案例。
首先,确保你已经在 pubspec.yaml
文件中添加了 realm_flutter
依赖(注意,realm_common
通常是作为 realm_flutter
的一部分提供的,而不是一个独立的包):
dependencies:
flutter:
sdk: flutter
realm_flutter: ^x.y.z # 请替换为最新版本号
然后,运行 flutter pub get
来获取依赖。
接下来,配置 Realm 数据库。通常,你需要在应用的初始化阶段配置 Realm。以下是一个简单的配置和使用的例子:
1. 配置 Realm
在你的 Flutter 应用的入口点(例如 main.dart
),配置 Realm:
import 'package:flutter/material.dart';
import 'package:realm_flutter/realm_flutter.dart';
void main() async {
WidgetsFlutterBinding.ensureInitialized();
// 配置 Realm
await Realm.init(configuration: RealmConfiguration(
path: Realm.defaultPath, // 使用默认路径,或者指定自定义路径
schemaVersion: 0, // 初始版本,后续可以通过迁移来更新
));
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: Text('Realm Flutter Demo'),
),
body: Center(
child: RealmExample(),
),
),
);
}
}
2. 定义 Realm 模型
定义一个 Realm 模型,它必须继承自 RealmObject
并使用 @primaryKey
注解来指定主键。
import 'package:realm_flutter/realm_flutter.dart';
part 'person.g.dart'; // Realm 会生成这部分代码
@RealmModel()
class Person extends RealmObject {
@primaryKey
String? id;
String? name;
int? age;
// 构造函数
Person({required this.id, required this.name, required this.age});
}
然后,运行 flutter pub run build_runner build
来生成 Realm 所需的代码。
3. 使用 Realm 进行数据库操作
在你的 RealmExample
组件中,执行数据库操作:
import 'package:flutter/material.dart';
import 'package:realm_flutter/realm_flutter.dart';
import 'person.dart'; // 导入你的 Realm 模型
class RealmExample extends StatefulWidget {
@override
_RealmExampleState createState() => _RealmExampleState();
}
class _RealmExampleState extends State<RealmExample> {
late Realm realm;
@override
void initState() {
super.initState();
// 打开 Realm 实例
realm = Realm.open();
}
@override
void dispose() {
// 关闭 Realm 实例
realm.close();
super.dispose();
}
void addPerson() {
// 写事务
realm.write(() {
final newPerson = Person(id: UUID.UUID().uuidString, name: 'John Doe', age: 30);
realm.add(newPerson);
});
}
void readPersons() {
// 读操作
final persons = realm.objects(Person.self()).toList();
persons.forEach((person) {
print('ID: ${person!.id}, Name: ${person.name}, Age: ${person.age}');
});
}
@override
Widget build(BuildContext context) {
return Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
ElevatedButton(
onPressed: addPerson,
child: Text('Add Person'),
),
ElevatedButton(
onPressed: readPersons,
child: Text('Read Persons'),
),
],
);
}
}
请注意,上面的代码片段是为了演示目的而简化的,并且在实际应用中可能需要更复杂的错误处理和状态管理。
这个示例展示了如何使用 realm_flutter
插件在 Flutter 应用中进行基本的数据库操作,包括配置 Realm、定义模型以及执行读写操作。希望这对你有所帮助!