Flutter中使用Realm数据库

1,670 阅读1分钟

一、realm的安装

1、常规操作创建一个新demo项目

flutter create realm_demo
cd realm_demo

2、运行一下命令安装realm库

flutter pub add realm

运行正常的话会在pubspec.yaml文件中看到已经安装成功,我安装的版本为1.0.2。

dependencies:
  flutter:
    sdk: flutter
    
  # The following adds the Cupertino Icons font to your application.
  # Use with the CupertinoIcons class for iOS style icons.
  cupertino_icons: ^1.0.2
  realm: ^1.0.2

二、realm的使用

1、创建model类

这里以car为例,创建model文件 car.dart,创建完成后在car.dart内编写model

import 'package:realm/realm.dart';

part 'car.g.dart';//后续用命令生成文件

@RealmModel()
class _Car {
  @PrimaryKey()
  late ObjectId id;
  late String make;
  late String? model;
  late int? miles;

//tip: Class names are limited to a maximum of 57 UTF-8 characters.
}

此时由于car.g.dart文件还没有创建,所以part 'car.g.dart'此时报错,接下来执行下面代码让realm自动生成car.g.dart文件

flutter pub run realm generate

等待命令执行完毕后 Car的model已经创建完毕。

realm的打开


final config = Configuration.local([Car.schema]);
final realm = Realm(config);

关闭


realm.close();

2、realm的增删改查

1.增
final car = Car(ObjectId(),'Tesla', model: 'Model S', miles: 42);
realm.write((){
  realm.add(car);
});
2.查

final cars = realm.all<Car>();
//final cars = realm.query<Car>('make == "Tesla"');
if(cars.length==0){
  print("暂无数据");
  return;
}
final myCar = cars[0];
print('My car is ${myCar.make} ${myCar.model}');

可以使用sort对结果进行排序 参考文档

realm.write(() {
  realm.addAll([
    Person(ObjectId(), 'Luke'),
    Person(ObjectId(), 'Leia'),
    Person(ObjectId(), 'Han'),
    Person(ObjectId(), 'Chewbacca')
  ]);
});

final alphabetizedPeople =
    realm.query<Person>('TRUEPREDICATE SORT(name ASC)');
for (var person in alphabetizedPeople) {
  print(person.name);
}
// prints 'Chewbacca', 'Han', 'Leia', 'Luke'
3.改
realm.write(() {
  myCar.miles = 99;
});
4.删
realm.write((){
  realm.delete(myCar);
});