flutter orm如何使用

在Flutter开发中,如何正确使用ORM框架来管理本地数据库?目前项目需要处理复杂的数据关系,但不太清楚该选择哪个ORM库(如Floor、Hive等),以及如何配置模型关系和实现增删改查操作。求具体实现示例和最佳实践建议!

2 回复

Flutter ORM 常用库如 floorsqflite。步骤:

  1. 添加依赖到 pubspec.yaml
  2. 定义数据模型和注解
  3. 生成数据库代码(floor 需运行 build_runner
  4. 在代码中执行增删改查操作

示例(floor):

@dao
abstract class UserDao {
  @insert
  Future<void> insertUser(User user);
}

更多关于flutter orm如何使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


Flutter ORM 主要用于简化数据库操作,常用的有 sqflite 配合手动 SQL、FloorDrift(原 Moor)等。以下是使用 Drift 的示例,因为它功能强大且类型安全。

1. 添加依赖

pubspec.yaml 中:

dependencies:
  drift: ^2.13.0
  sqlite3_flutter_libs: ^0.5.0
  path_provider: ^2.1.1
  path: ^1.8.3

dev_dependencies:
  drift_dev: ^2.13.0
  build_runner: ^2.4.0

2. 创建数据表

定义 Todo 表和 DAO:

// database.dart
import 'package:drift/drift.dart';
import 'package:path/path.dart' as p;
import 'package:path_provider/path_provider.dart';

part 'database.g.dart'; // 生成文件

class Todos extends Table {
  IntColumn get id => integer().autoIncrement()();
  TextColumn get title => text()();
  BoolColumn get completed => boolean().withDefault(const Constant(false))();
}

@DriftDatabase(tables: [Todos])
class AppDatabase extends _$AppDatabase {
  AppDatabase() : super(_openConnection());

  @override
  int get schemaVersion => 1;
}

LazyDatabase _openConnection() {
  return LazyDatabase(() async {
    final dbFolder = await getApplicationDocumentsDirectory();
    final file = File(p.join(dbFolder.path, 'db.sqlite'));
    return NativeDatabase(file);
  });
}

3. 生成代码

运行命令生成 database.g.dart

flutter pub run build_runner build

4. 使用数据库

在 Flutter 中操作数据:

final db = AppDatabase();

// 插入
await db.into(db.todos).insert(TodosCompanion.insert(title: 'Test'));

// 查询
final allTodos = await db.select(db.todos).get();

// 更新
await db.update(db.todos).replace(Todo(id: 1, title: 'Test', completed: true));

// 删除
await db.delete(db.todos).delete(Todo(id: 1));

其他 ORM

  • Floor:类似 Room(Android),需注解和代码生成。
  • Sqflite:直接写 SQL,更灵活但需手动处理。

提示

  • 使用 Stream 监听数据变化(Drift 支持 select(...).watch())。
  • 在生产环境中处理数据库迁移。

这样即可高效管理 Flutter 本地数据。

回到顶部