Flutter数据库管理插件realm_common的使用

发布于 1周前 作者 yibo5220 来自 Flutter

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

1 回复

更多关于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、定义模型以及执行读写操作。希望这对你有所帮助!

回到顶部