Flutter云数据库建模插件firestore_modeler的使用

Flutter云数据库建模插件firestore_modeler的使用

Firestore Modeler 是一个用于生成 Firestore 类型安全 Dart 客户端的 DevTools 扩展。

展示

安装

  1. 将插件添加到您的项目中:
dart pub add firestore_modeler

设置

1. 在 Dart DevTools 中启用扩展

要了解有关 Flutter DevTools 的更多信息,请阅读这篇文章: https://docs.flutter.dev/tools/devtools/extensions

2. 配置项目

Firestore Modeler 会提示您创建一个配置文件(firestore_modeler.yaml)。该文件必须位于包含 firestore_modeler 作为依赖项的项目目录中。

注意:在集成开发环境(IDE)中使用 DevTools 时,可能会遇到复制粘贴操作的问题。为了进行初始设置,我们建议使用 Chrome DevTools。

3. 使用可视化编辑器定义您的 Firestore 数据库模式

打开 Firestore Modeler 插件并使用可视化界面来定义您的数据结构。

4. 生成客户端代码

单击右下角的“生成”按钮。这将在与 firestore_modeler.yaml 配置文件相同的目录中创建一个 firestore_client.dart 文件。

客户端使用

客户端是使用修改版的 cloud_firestore_odm 生成的。

// 创建集合引用
final rootCollection = [YourRootCollectionClass]CollectionReference();

final docRef = rootCollection.doc('id');

// 可以从文档引用访问子集合
final subCollection = docRef.mySubCollection;

// 类型化的 CRUD 操作
// 生成器还会生成必要的模型
final MyModel data = await docRef.get(); // 获取数据
await docRef.set(MyModel()); // 设置数据
await docRef.update(MyModel()); // 更新数据
await docRef.delete(); // 删除数据

// 获取流
collectionRef.snapshots() // 获取集合的实时更新
docRef.snapshots() // 获取特定文档的实时更新

// 查询数据
collectionRef.orderBy("property") // 按属性排序
collectionRef.where("property", isEqualTo: value) // 过滤数据
collectionRef.limit(10) // 限制结果数量
collectionRef.select(["field1", "field2"]) // 选择特定字段

更多关于Flutter云数据库建模插件firestore_modeler的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter云数据库建模插件firestore_modeler的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


firestore_modeler 是一个用于 Flutter 的插件,旨在简化与 Firestore 数据库的交互,特别是在数据建模方面。它允许开发者通过定义 Dart 类来映射 Firestore 中的文档和集合,从而减少手动编写 Firestore 查询和文档解析的代码量。

以下是如何使用 firestore_modeler 插件的基本步骤:

1. 添加依赖

首先,在 pubspec.yaml 文件中添加 firestore_modeler 依赖:

dependencies:
  flutter:
    sdk: flutter
  firestore_modeler: ^1.0.0  # 请使用最新版本

然后运行 flutter pub get 来安装依赖。

2. 定义数据模型

接下来,定义一个 Dart 类来表示 Firestore 中的文档。例如,假设你有一个 User 集合,每个 User 文档包含 nameage 字段:

import 'package:firestore_modeler/firestore_modeler.dart';

@FirestoreModel()
class User {
  final String id;
  final String name;
  final int age;

  User({
    required this.id,
    required this.name,
    required this.age,
  });

  factory User.fromJson(Map<String, dynamic> json) {
    return User(
      id: json['id'],
      name: json['name'],
      age: json['age'],
    );
  }

  Map<String, dynamic> toJson() {
    return {
      'id': id,
      'name': name,
      'age': age,
    };
  }
}

3. 使用 FirestoreModeler 进行 CRUD 操作

firestore_modeler 提供了一些便捷的方法来执行 CRUD(创建、读取、更新、删除)操作。

创建文档

final user = User(id: '123', name: 'John Doe', age: 30);
await FirestoreModeler.create<User>('users', user);

读取文档

final user = await FirestoreModeler.get<User>('users', '123');
print(user.name);

更新文档

final updatedUser = User(id: '123', name: 'Jane Doe', age: 31);
await FirestoreModeler.update<User>('users', '123', updatedUser);

删除文档

await FirestoreModeler.delete<User>('users', '123');

4. 查询文档

你还可以使用 FirestoreModeler 来执行复杂的查询操作。

final users = await FirestoreModeler.query<User>('users')
    .where('age', isGreaterThan: 25)
    .get();

for (var user in users) {
  print(user.name);
}

5. 监听实时更新

firestore_modeler 还支持实时监听 Firestore 文档的更新。

final subscription = FirestoreModeler.listen<User>('users', '123').listen((user) {
  print('User updated: ${user.name}');
});

// 记得在适当的时候取消订阅
subscription.cancel();

6. 使用子集合

如果你的 Firestore 文档包含子集合,你可以通过在模型类中定义子集合来处理。

@FirestoreModel()
class User {
  final String id;
  final String name;
  final int age;

  User({
    required this.id,
    required this.name,
    required this.age,
  });

  factory User.fromJson(Map<String, dynamic> json) {
    return User(
      id: json['id'],
      name: json['name'],
      age: json['age'],
    );
  }

  Map<String, dynamic> toJson() {
    return {
      'id': id,
      'name': name,
      'age': age,
    };
  }
}

@FirestoreModel()
class Post {
  final String id;
  final String content;

  Post({
    required this.id,
    required this.content,
  });

  factory Post.fromJson(Map<String, dynamic> json) {
    return Post(
      id: json['id'],
      content: json['content'],
    );
  }

  Map<String, dynamic> toJson() {
    return {
      'id': id,
      'content': content,
    };
  }
}

// 获取用户的帖子
final posts = await FirestoreModeler.query<Post>('users/123/posts').get();

7. 错误处理

在实际应用中,记得处理可能出现的错误,例如网络问题或权限问题。

try {
  final user = await FirestoreModeler.get<User>('users', '123');
  print(user.name);
} catch (e) {
  print('Error fetching user: $e');
}
回到顶部