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-64
和 arm32
)以及 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
。
注意: 为了减少外部依赖,该库不包含持久化令牌的机制。请参阅以下基于 SharedPreferences
和 Hive
的示例。
使用示例
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