Flutter本地数据库Realm的使用

发布于 1 年前 作者 phonegap100 1119 次浏览 最后一次编辑是 1 年前 来自 分享

Flutter本地数据库Realm是一个可以直接在手机、平板、电脑或可穿戴设备中运行的本地数据库。Realm是一个 KeyValue 的本地数据库,相比SQLite 和 Firestore 更简单并且运行速度更快,是SQLite 和 Firestore 的替代方案。 Realm 是离线的、面向对象的、直观的,跨平台的本地存储数据库。

更多Flutter本地数据库Realm的使用访问:https://www.itying.com/goods-1176.html

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);

提示: 注意李四外面的单引号

回到顶部