Flutter云数据库集成插件loon_extension_firestore的使用

Flutter云数据库集成插件loon_extension_firestore的使用

loon_extension_firestore 插件用于将从 Firestore 远程获取的文档轻松同步到本地的 Loon 缓存。

安装

pubspec.yaml 文件中添加依赖:

flutter pub add loon_extension_firestore

开始使用

首先启用 LoonExtensionFirestore,这会禁用默认的 Firestore 缓存并启用将 Firestore 文档同步到 Loon 的功能。

import 'package:flutter/material.dart';
import 'package:loon_extension_firestore/loon_extension_firestore.dart';

void main() {
  WidgetsFlutterBinding.ensureInitialized();

  LoonExtensionFirestore.configure(enabled: true);
  
  runApp(MyApp());
}

数据源配置

接下来初始化一个数据源,定义如何访问您的数据,包括远程在 Firestore 中的数据和本地在 Loon 缓存中的数据。

import 'package:loon_extension_firestore/loon_extension_firestore.dart';
import 'package:cloud_firestore/cloud_firestore.dart';

final dataSource = CollectionDataSource(
  local: Loon.collection('users'),
  remote: FirebaseFirestore.instance.collection('users'),
);

通过该数据源获取的任何数据都会自动写入缓存。

// 从 Firestore 远程获取用户集合
final remoteUsersSnap = await dataSource.remote.get();
// 访问自动缓存的用户集合
final localUsers = dataSource.local.get();

类型化数据

如果您的集合可以解析为类型安全的数据模型,则可以在数据源上指定序列化器。

class UserModel {
  final String id;
  final String name;

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

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

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

final dataSource = CollectionDataSource(
  serializer: Serializer<UserModel>(
    UserModel.fromJson,
    (user) => user.toJson(),
  ),
  local: Loon.collection('users'),
  remote: FirebaseFirestore.instance.collection('users'),
);

这结合了需要为 Firestore 集合和 Loon 集合引用指定转换器的需求。

生命周期处理程序

onWrite

onWrite 处理程序可用于在远程 Firestore 文档被写入本地 Loon 缓存时执行副作用。

LoonExtensionFirestore.configure(
  enabled: true,
  onWrite: (snap) {
    print(snap.path); // 输出路径如 users__1
  },
);

final dataSource = CollectionDataSource(
  serializer: Serializer<UserModel>(
    UserModel.fromJson,
    (user) => user.toJson(),
  ),
  local: Loon.collection('users'),
  remote: FirebaseFirestore.instance.collection('users'),
);

final snap = await dataSource.doc('1').remote.get();

onBeforeWrite

onBeforeWrite 处理程序在 Firestore 文档被写入本地 Loon 缓存之前触发,并允许在缓存之前修改要写入的文档或完全取消缓存(如果事件返回 false)。

LoonExtensionFirestore.configure(
  enabled: true,
  onBeforeWrite: (localDoc, remoteSnap, serializer) {
    if (/* 条件 */) {
      return false; // 根据条件决定是否不写入 Loon 缓存。
    }
    return true; 
  }
);

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

1 回复

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


loon_extension_firestore 是一个用于在 Flutter 应用中集成 Firebase Firestore 数据库的插件。它提供了简化的 API 和扩展功能,使得开发者可以更轻松地与 Firestore 进行交互。以下是如何在 Flutter 项目中使用 loon_extension_firestore 的基本步骤:

1. 添加依赖

首先,你需要在 pubspec.yaml 文件中添加 loon_extension_firestore 的依赖:

dependencies:
  flutter:
    sdk: flutter
  loon_extension_firestore: ^latest_version

运行 flutter pub get 来安装依赖。

2. 初始化 Firebase

在使用 loon_extension_firestore 之前,你需要初始化 Firebase。通常,你需要在 main.dart 中进行初始化:

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

void main() async {
  WidgetsFlutterBinding.ensureInitialized();
  await Firebase.initializeApp();
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Firestore Example',
      home: HomePage(),
    );
  }
}

3. 使用 loon_extension_firestore

现在你可以在应用中使用 loon_extension_firestore 来与 Firestore 进行交互。以下是一些常见的操作示例:

添加数据

import 'package:loon_extension_firestore/loon_extension_firestore.dart';

void addData() async {
  await Firestore.instance.collection('users').add({
    'name': 'John Doe',
    'age': 30,
  });
}

读取数据

void readData() async {
  var snapshot = await Firestore.instance.collection('users').get();
  snapshot.docs.forEach((doc) {
    print(doc.data());
  });
}

更新数据

void updateData() async {
  await Firestore.instance.collection('users').doc('document_id').update({
    'age': 31,
  });
}

删除数据

void deleteData() async {
  await Firestore.instance.collection('users').doc('document_id').delete();
}

4. 监听实时数据

loon_extension_firestore 也支持实时监听 Firestore 数据的变化:

void listenToData() {
  Firestore.instance.collection('users').snapshots().listen((snapshot) {
    snapshot.docs.forEach((doc) {
      print(doc.data());
    });
  });
}

5. 高级查询

你可以使用 loon_extension_firestore 进行更复杂的查询,例如过滤、排序等:

void queryData() async {
  var query = Firestore.instance.collection('users').where('age', isGreaterThan: 25);
  var snapshot = await query.get();
  snapshot.docs.forEach((doc) {
    print(doc.data());
  });
}

6. 错误处理

在使用 Firestore 时,建议添加错误处理来捕获可能的异常:

void addDataWithErrorHandling() async {
  try {
    await Firestore.instance.collection('users').add({
      'name': 'John Doe',
      'age': 30,
    });
  } catch (e) {
    print('Error adding data: $e');
  }
}

7. 其他功能

loon_extension_firestore 可能还提供了其他有用的功能,例如批量操作、事务处理等。你可以查阅插件的文档以了解更多详情。

8. 调试和日志

在开发过程中,你可能需要查看 Firestore 的操作日志。你可以启用 Firestore 的调试日志:

Firestore.instance.settings(persistenceEnabled: true, host: 'localhost:8080', sslEnabled: false);
回到顶部