Flutter云数据库交互插件firestore_repository_helper的使用

使用 Flutter 云数据库交互插件 firestore_repository_helper

说明

FirestoreRepository<TModel> 可用于任何类型的模型。此存储库需要一个 JsonSerializer<TModel> 来在 TModel 和 Firestore 对象之间进行转换。你还需要为存储库提供一个 collectionPath

使用方法

创建特定模型的存储库

// 定义模型类
class MyModel implements FirestoreObject<MyModel> {
  String id;
  final String myProperty;

  MyModel({required this.id, required this.myProperty});

  // 设置 ID 方法
  void setId(String id) => this.id = id;
}

// 定义序列化器类
class MyModelSerializer implements JsonSerializer<MyModel> {
  @override
  MyModel fromJson(Map<String, dynamic> json) =>
      MyModel(id: "", myProperty: json["myProperty"]);

  @override
  Map<String, dynamic> toJson(MyModel data) => {"myProperty": data.myProperty};
}

// 创建具体的存储库类
class MyModelFirestoreRepository extends FirestoreRepositoryImpl<MyModel> {
  @override
  String get collectionPath => "my_custom_model_collection";

  @override
  JsonSerializer<MyModel> get serializer => MyModelSerializer();
}

使用存储库

// 初始化存储库实例
final myModelRepository = MyModelFirestoreRepository();

// 读取数据
final allMyModels = await myModelRepository.readAll();
final singleMyModel = await myModelRepository.readDocument("myFavoriteItem");
final queriedFavoriteModels = await myModelRepository.query(
    (collection) => collection.where("myProperty", isEqualTo: "favorite"));

// 监听数据变化
final Stream<Resource<MyModel>> listenMaybeInFuture = 
    myModelRepository.listenMaybeInFutureDocument("myObservableItem");
final Stream<Resource<List<MyModel>>> listenToCollection =
    myModelRepository.listenToAll();
final Stream<Resource<List<MyModel>>> listenToQuery =
    myModelRepository.listenToQuery((collection) => 
        collection.where("myProperty", isEqualTo: "notFavorite"));

// 写入数据
await myModelRepository.createDocument(MyModel(id: "myItem", myProperty: "favorite"));
await myModelRepository.updateDocument(MyModel(id: "myItem", myProperty: "notFavorite"));
await myModelRepository.deleteDocument("myItem");

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

1 回复

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


当然,以下是如何在Flutter项目中使用firestore_repository_helper插件与Firebase Firestore进行交互的代码案例。这个插件可以简化与Firestore数据库的交互,让我们能够更轻松地执行常见的数据库操作,如读取、写入、更新和删除数据。

首先,确保你已经在Flutter项目中添加了firestore_repository_helper依赖。在你的pubspec.yaml文件中添加以下依赖:

dependencies:
  flutter:
    sdk: flutter
  firestore_repository_helper: ^最新版本号 # 请替换为实际的最新版本号

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

接下来,我们需要在Firebase控制台中为你的应用配置Firestore数据库,并获取Firebase配置信息(如apiKey、projectId等),这些信息将用于初始化Firebase应用。

以下是一个完整的示例,展示如何使用firestore_repository_helper与Firestore进行交互:

  1. 初始化Firebase应用

在你的应用入口文件(通常是main.dart)中初始化Firebase应用:

import 'package:flutter/material.dart';
import 'package:firebase_core/firebase_core.dart';
import 'package:cloud_firestore/cloud_firestore.dart';
import 'package:firestore_repository_helper/firestore_repository_helper.dart';

void main() async {
  WidgetsFlutterBinding.ensureInitialized();
  
  // 初始化Firebase应用
  await Firebase.initializeApp();

  // 配置Firestore实例
  Firestore.instance.settings = Settings(
    persistenceEnabled: true,
  );

  runApp(MyApp());
}
  1. 定义数据模型

创建一个数据模型类,用于表示你将存储在Firestore中的数据类型。例如,一个简单的用户模型:

import 'package:json_annotation/json_annotation.dart';

part 'user_model.g.dart';

@JsonSerializable()
class UserModel {
  String id;
  String name;
  int age;

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

  factory UserModel.fromJson(Map<String, dynamic> json) => _$UserModelFromJson(json);
  Map<String, dynamic> toJson() => _$UserModelToJson(this);
}

运行flutter pub run build_runner build来生成user_model.g.dart文件。

  1. 创建仓库类

使用firestore_repository_helper创建一个仓库类来处理数据库操作:

import 'package:cloud_firestore/cloud_firestore.dart';
import 'package:firestore_repository_helper/firestore_repository_helper.dart';
import 'user_model.dart';

class UserRepository {
  final Firestore firestore = Firestore.instance;
  late FirestoreRepositoryHelper<UserModel> repository;

  UserRepository() {
    repository = FirestoreRepositoryHelper<UserModel>(
      firestore: firestore,
      collectionName: 'users',
      fromJson: (Map<String, dynamic> json) => UserModel.fromJson(json),
      toJson: (UserModel model) => model.toJson(),
    );
  }

  // 获取所有用户
  Future<List<UserModel>> getAllUsers() async {
    return await repository.getAll();
  }

  // 添加新用户
  Future<void> addUser(UserModel user) async {
    await repository.add(user);
  }

  // 更新用户
  Future<void> updateUser(UserModel user) async {
    await repository.update(user);
  }

  // 删除用户
  Future<void> deleteUser(String userId) async {
    await repository.delete(userId);
  }
}
  1. 在UI中使用仓库

在你的UI组件中使用这个仓库类来与Firestore进行交互。例如,在一个简单的屏幕中显示所有用户:

import 'package:flutter/material.dart';
import 'user_repository.dart';
import 'user_model.dart';

void main() => runApp(MyApp());

class MyApp extends StatelessWidget {
  final UserRepository userRepository = UserRepository();

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Firestore Demo',
      home: Scaffold(
        appBar: AppBar(
          title: Text('Users List'),
        ),
        body: FutureBuilder<List<UserModel>>(
          future: userRepository.getAllUsers(),
          builder: (context, snapshot) {
            if (snapshot.connectionState == ConnectionState.waiting) {
              return Center(child: CircularProgressIndicator());
            } else if (snapshot.hasError) {
              return Center(child: Text('Error: ${snapshot.error!}'));
            } else {
              final users = snapshot.data ?? [];
              return ListView.builder(
                itemCount: users.length,
                itemBuilder: (context, index) {
                  final user = users[index];
                  return ListTile(
                    title: Text('${user.name} (${user.age})'),
                  );
                },
              );
            }
          },
        ),
      ),
    );
  }
}

这个示例展示了如何使用firestore_repository_helper插件来与Firebase Firestore进行基本的数据库操作。你可以根据实际需求扩展这个示例,例如添加更多的UI组件来处理数据的增删改查操作。

回到顶部