Flutter插件firedart_2的使用_firedart是一个 Dart 原生实现的 Firebase Auth 和 Firestore SDK

Flutter插件firedart_2的使用_firedart是一个 Dart 原生实现的 Firebase Auth 和 Firestore SDK

Flutter插件firedart_2简介

firedart 是一个 Dart 原生实现的 Firebase Auth 和 Firestore SDK。该库旨在减少外部依赖,使其能够在任何能够执行 Dart 代码的环境中运行。目前它已经在 Dart 运行时(x86-64arm32)以及 Flutter 的 Android、iOS 和桌面平台上成功测试过。

firedart 目前实现了 Firebase Auth 和 Firestore 的子集功能。

添加依赖

pubspec.yaml 文件中添加 firedart 依赖:

dependencies:
  firedart: [最新版本]

Firebase Auth 使用

FirebaseAuth 类实现了管理账户所需的必要功能。目前仅支持 Email/Password 登录和匿名登录。确保这些登录方法在 Firebase 控制台的 Authentication -> Sign-in Method 中已启用。

您还需要访问您的 Firebase 控制台,打开 Project Settings 并复制 Web API Key

注意: 为了减少外部依赖,该库不包含持久化令牌的机制。请参阅以下基于 SharedPreferencesHive 的示例。

使用示例
import 'package:firedart_2/firedart.dart';

// 初始化 FirebaseAuth 单例
FirebaseAuth.initialize(apiKey, await HiveStore.create());

// 登录
await FirebaseAuth.instance.signIn(email, password);

// 获取用户信息
var user = await FirebaseAuth.instance.getUser();

或者,您可以实例化自己的 FirebaseAuth 对象:

var firebaseAuth = FirebaseAuth(apiKey, await PreferencesStore());
await firebaseAuth.signIn(email, password);
var user = await firebaseAuth.getUser();

更多使用示例可以在集成测试中找到。

限制
  • 目前仅支持 Email/Password 认证方式。

Firestore 使用

Firestore 类是对服务的 RPC 接口的基本实现。API 类似于官方 SDK,但不完全相同。

使用示例
import 'package:firedart_2/firedart.dart';

// 初始化 Firestore 单例
Firestore.initialize(apiKey, projectId);

// 获取集合数据
var map = await Firestore.instance.collection("users").get();
var users = UserCollection.fromMap(map);

您也可以实例化自己的 Firestore 对象。如果数据库需要认证访问,您需要传递一个 FirebaseAuth 实例。

var firebaseAuth = FirebaseAuth(apiKey, await HiveStore());
var firestore = Firestore(projectId, auth: firebaseAuth);

await firebaseAuth.signIn(email, password);
var map = await firestore.collection("users").get();
var users = UserCollection.fromMap(map);

更多使用示例可以在集成测试中找到。

限制
  • 不支持集合查询(如 limit、sort 等)。
  • 数据不会被本地缓存。
  • 失败的写入(如由于网络错误)不会自动重试。
  • 关闭的流不会自动恢复。

调试

对于调试 Firebase Auth,您可以使用 VerboseClient,这是一个记录所有通信到控制台的 HTTP 客户端。建议仅在开发构建中启用此功能。在 Flutter 中,可以使用 foundation 包中的 kReleaseMode 常量来实现这一点:

var client = !kReleaseMode ? VerboseClient() : http.Client();
var firebaseAuth = FirebaseAuth(apiKey, await PreferencesStore(), httpClient: client);

保护令牌

如果您在需要保护访问令牌的环境中运行代码,可以扩展 TokenStore 以安全地持久化数据,例如通过加密数据或将数据存储在外部保险库中。示例实现可以在 token_store.dart 中找到。

示例代码

import 'package:firedart_2/firedart.dart';
import 'package:universal_io/io.dart';

const apiKey = '项目设置 -> 通用 -> Web API 密钥';
const projectId = '项目设置 -> 通用 -> 项目 ID';
const email = 'you@server.com';
const password = '1234';

Future<void> main() async {
  Firestore? firestore;
  try {
    // 初始化 Firestore
    firestore = Firestore.initialize(apiKey, projectId);

    // 使用用户凭据登录
    await firestore.signInWithPassword(email, password);

    // 获取用户信息
    var userDetails = await firestore.getUser();
    print('User Details ${userDetails?.email}');

    // 创建文档引用
    var ref = Firestore.instance.collection('test').document('doc');

    // 订阅文档更改
    ref.stream.listen((document) => print('updated: $document'));

    // 更新文档
    await ref.update({'value': 'test'});

    // 获取文档快照
    var document = await ref.get();
    print('snapshot: ${document['value']}');

    // 等待一段时间以获取登出事件
    await Future.delayed(Duration(seconds: 1));
  } finally {
    // 注销
    await firestore?.signOut();
  }

  exit(0);
}

更多关于Flutter插件firedart_2的使用_firedart是一个 Dart 原生实现的 Firebase Auth 和 Firestore SDK的实战教程也可以访问 https://www.itying.com/category-92-b0.html

回到顶部