Flutter本地数据库Realm的使用
Flutter本地数据库Realm是一个可以直接在手机、平板、电脑或可穿戴设备中运行的本地数据库。Realm是一个 KeyValue 的本地数据库,相比SQLite 和 Firestore 更简单并且运行速度更快,是SQLite 和 Firestore 的替代方案。 Realm 是离线的、面向对象的、直观的,跨平台的本地存储数据库。
更多Flutter本地数据库Realm的使用访问:https://www.itying.com/goods-1176.html
Dart Flutter全套资料网盘下载地址:http://bbs.itying.com/topic/620268d1a4bcc00fe8e9d6e1
1、Realm 特性
第一: Realm是第一个直接在手机、平板电脑和可穿戴设备中运行的数据库。
简单: Realm的面向对象的数据模型很容易学习,不需要ORM, API可以让你写更少的代码,让应用程序在几分钟内启动和运行。
兼容性: 支持最新的dart Flutter
更快: Realm在维护极其丰富的特性集的同时,在常见操作上甚至比原始SQLite还要快。
设备同步: 使数据在用户、设备和后端之间保持实时同步变得简单。
2、Flutter本地数据库Realm的使用
1、配置安装依赖
dependencies:
realm: ^1.0.3
import 'package:realm/realm.dart';
2、定义数据模型
main.dart中引入realm.dart
,通过part引入main.g.dart
,然后定义RealmModel,代码如下
import 'package:realm/realm.dart';
part 'main.g.dart';
@RealmModel()
class _Person {
late String name;
int age = 1;
}
void main() {
print("Current PID $pid");
runApp(MyApp());
}
目前main.g.dart
是不存在的,下面我们需要通过命令生成main.g.dart
模型类名称必须加 _
类似 _Person
_Car
3、realm generate生成操作数据库的模型类
通过模型类 _Person
生成 RealmObject类Person
.
flutter pub run realm generate
这个时候目录里面会多了一个main.g.dart
提示:关于part和import区别
**可见性:**如果说在A库中import了B库,A库对B库是不可见的,也就是说B库是无法知道A库的存在的。而part的作用是将一个库拆分成较小的组件。两个或多个part共同构成了一个库,它们彼此之间是知道互相的存在的。
**作用域:**import不会完全共享作用域,而part之间是完全共享的。如果说在A库中import了B库,B库import了C库,A库是没有办法直接使用C库的对象的。而B,C若是A的part,那么三者共享所有对象。并且包含所有导入。
4、初始化配置
打开一个Realm并添加一些对象,初始化配置有点类似创建数据库
late Realm realm;
@override
void initState() {
final config = Configuration.local([Person.schema]);
realm = Realm(config);
super.initState();
}
5、增加数据
late Realm realm;
@override
void initState() {
final config = Configuration.local([Person.schema]);
realm = Realm(config);
super.initState();
}
......
realm.write(() {
realm.add(Person("李四", age: 10));
});
**说明:**Person是一个类,这里需要注意如何传值
class _Person {
late String name; //会转换成固定参数
String? height; //会转换成命名参数
int age = 1; //会转换成命名参数
}
6、根据条件查询数据
late Realm realm;
@override
void initState() {
final config = Configuration.local([Person.schema]);
realm = Realm(config);
super.initState();
}
......
var filteredCars = realm.all<Person>().query("age == 10");
print(filteredCars);
或者
var filteredCars = realm.all<Person>().query("name == '李四'");
print(filteredCars);
提示: 注意李四外面的单引号