Flutter多功能集成插件fire_api的使用
Flutter多功能集成插件fire_api的使用
Firestore API
Firestore API 是一个简化版的接口,用于Firestore数据库,允许同时使用firestore_api_dart
的Dart服务器和使用firestore_api_flutter
的Flutter应用访问相同的API。尽管存在一些限制(因为前后端需要大致支持相同的功能),但它可以用于基本的数据模型管理。
Firestore支持
功能 | Flutter | Dart |
---|---|---|
获取/设置/添加/删除/更新文档 | ✅ | ✅ |
获取/查询集合 | ✅ | ✅ |
聚合计数查询 | ✅ | ✅ |
使用FieldValue更新文档 | ✅ | ✅ |
原子设置(事务获取后设置) | ✅ | ✅ |
文档流 | ✅ | ❌ |
集合查询流 | ✅ | ❌ |
开始/结束于/之后/之前查询 | ✅ | ✅ |
限制查询 | ✅ | ✅ |
排序查询 | ✅ | ✅ |
获取缓存 | ✅ | ❌ |
云存储支持(Firebase Storage)
功能 | Flutter | Dart |
---|---|---|
上传文件 | ✅ | ✅ |
下载文件 | ✅ | ✅ |
删除文件 | ❌ | ❌ |
获取文件元数据 | ✅ | ✅ |
设置文件元数据 | ✅ | ✅ |
列出文件 | ❌ | ❌ |
流式文件 | ❌ | ❌ |
生成下载URL | ❌ | ❌ |
生成上传URL | ❌ | ❌ |
Flutter Setup
当前实现为fire_api_flutter
。
你只需要在初始化Firebase后初始化数据库即可:
import 'package:fire_api_flutter/fire_api_flutter.dart';
void main() {
// 在初始化Firebase之后
FirebaseFirestoreDatabase.create();
FirebaseFireStorage.create();
}
Dart Server Setup
当前实现为fire_api_dart
。
要使用Firestore,你需要确保运行在Google Cloud环境中,或者提供服务账户密钥文件。
如果你不在Google上运行并希望轻松测试,请确保在运行时设置了以下环境变量。(在IntelliJ中,你可以在运行配置中设置它们)
- GCP_PROJECT=项目ID
- GOOGLE_APPLICATION_CREDENTIALS=服务账户密钥文件路径
如果你需要自定义数据库名称或自定义AuthClient,你可以使用GoogleCloudFirestoreDatabase.create(database: "mydbname", auth: AuthClient)
来覆盖。
import 'package:fire_api_dart/fire_api_dart.dart';
void main() async {
// 因为使用身份验证凭据需要异步操作,所以需要等待
await GoogleCloudFirestoreDatabase.create();
await GoogleCloudFireStorage.create();
}
使用
Firestore API
API设计简单易用,主要模仿了Firebase Firestore API。
// 文档引用
DocumentReference dan = FirestoreDatabase.instance.collection("user").doc("dan");
// 获取数据
DocumentSnapshot danDoc = await dan.get();
// 检查是否存在
if (danDoc.exists) {
// 使用.data获取数据
Map<String, dynamic> danData = danDoc.data!;
} else {
print("Dan不存在!");
}
// 设置数据
await dan.set({"name": "Dan", "age": 21});
// 更新数据
await dan.update({
// 将"cats"和"dogs"添加到喜欢列表中,如果列表不存在则创建新列表
"likes": FieldValue.arrayUnion(["cats", "dogs"]),
// 年龄加1
"age": FieldValue.increment(1)
});
// 对dan进行原子设置(如果大量设备正在设置此文档的不同更改)
// 使用setAtomic而不是简单的set以避免覆盖其他人的最近更改
// 实际上就是运行事务 -> 获取 -> 设置 -> 提交
await dan.setAtomic((danRightNow) {
// 对该对象执行操作
danRightNow!["age"]++;
return danRightNow;
});
// 删除
await dan.delete(); // 简单
// 集合引用与查询
CollectionReference users = FirestoreDatabase.instance.collection("user");
// 获取所有用户
List<DocumentSnapshot> allUsers = await users.get();
// 获取年龄大于18岁的所有用户
users
.whereGreaterThanOrEqual("age", 18)
.limit(10)
.orderBy("name", descending: false)
.get();
// 只获取年龄小于18岁的用户数量,但最多只计算100个,不下载他们
int count = await users.whereLessThan("age", 18).limit(100).count();
// 仅限于Flutter侧,这将在服务器端失败
// 监听dan
Stream<DocumentSnapshot> danStream = dan.stream;
// 仅限于Flutter侧,这将在服务器端失败
// 监听年龄为25岁的所有用户,但只获取前50个
Stream<List<DocumentSnapshot>> usersStream =
users.whereEqual("age", 25).limit(50).stream;
Firebase Storage API
FireStorageRef r = FireStorage.instance
.bucket("my_bucket")
.ref("some/file");
Future<Uint8List> read = r.read();
Future<void> written = r.write(Uint8List);
更多关于Flutter多功能集成插件fire_api的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter多功能集成插件fire_api的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
当然,以下是一个关于如何在Flutter项目中集成和使用多功能插件 fire_api
的示例代码案例。请注意,fire_api
并非一个官方或广泛认知的Flutter插件,因此这里的代码将基于一个假设的插件功能和API设计。如果 fire_api
是一个真实存在的插件,请查阅其官方文档以获取准确的信息和API。
假设 fire_api
插件提供了以下功能:
- 用户认证(登录/注册)
- 数据库操作(读写数据)
- 云存储上传/下载
首先,你需要在 pubspec.yaml
文件中添加对 fire_api
的依赖(假设它存在于pub.dev上):
dependencies:
flutter:
sdk: flutter
fire_api: ^x.y.z # 替换为实际的版本号
然后,运行 flutter pub get
来获取依赖。
接下来,在你的 Flutter 项目中集成并使用 fire_api
。以下是一个简单的示例:
import 'package:flutter/material.dart';
import 'package:fire_api/fire_api.dart'; // 假设这是插件的导入路径
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Fire API Demo',
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: FireApiDemo(),
);
}
}
class FireApiDemo extends StatefulWidget {
@override
_FireApiDemoState createState() => _FireApiDemoState();
}
class _FireApiDemoState extends State<FireApiDemo> {
FireApi? _fireApi;
@override
void initState() {
super.initState();
// 初始化 FireApi 实例,这里假设需要传递一些配置信息
_fireApi = FireApi(
apiKey: 'your-api-key',
authDomain: 'your-app.firebaseapp.com',
projectId: 'your-project-id',
storageBucket: 'your-app.appspot.com',
messagingSenderId: 'your-messaging-sender-id',
appId: 'your-app-id',
);
// 示例:用户登录
_fireApi!.signInWithEmailAndPassword(email: 'user@example.com', password: 'password123')
.then((user) {
print('User signed in: ${user.email}');
}).catchError((error) {
print('Sign in failed: $error');
});
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Fire API Demo'),
),
body: Padding(
padding: const EdgeInsets.all(16.0),
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
// 示例:写入数据库
ElevatedButton(
onPressed: () {
_fireApi!.writeDataToDatabase(
path: 'users/userId123/name',
data: {'name': 'John Doe'},
).then((_) {
print('Data written to database');
}).catchError((error) {
print('Write failed: $error');
});
},
child: Text('Write to Database'),
),
// 示例:从数据库读取数据
ElevatedButton(
onPressed: () {
_fireApi!.readDataFromDatabase(path: 'users/userId123/name')
.then((data) {
print('Data read from database: $data');
}).catchError((error) {
print('Read failed: $error');
});
},
child: Text('Read from Database'),
),
// 示例:上传文件到云存储
ElevatedButton(
onPressed: () async {
var file = File('path/to/your/file.jpg');
await _fireApi!.uploadFileToStorage(
path: 'images/file.jpg',
file: file,
).then((uploadTaskSnapshot) {
print('File uploaded: ${uploadTaskSnapshot.ref.fullPath}');
}).catchError((error) {
print('Upload failed: $error');
});
},
child: Text('Upload to Storage'),
),
],
),
),
);
}
}
在这个示例中,我们假设 FireApi
类提供了初始化、用户认证、数据库操作和云存储上传/下载的方法。请注意,实际使用时你需要根据 fire_api
插件的文档来调整这些方法的调用和参数。
由于 fire_api
并非一个已知的官方插件,因此上述代码是一个基于假设的示例。如果你使用的是一个真实存在的插件,请查阅其官方文档以获取准确的信息和API调用方式。