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中,你可以在运行配置中设置它们)

  1. GCP_PROJECT=项目ID
  2. 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

1 回复

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


当然,以下是一个关于如何在Flutter项目中集成和使用多功能插件 fire_api 的示例代码案例。请注意,fire_api 并非一个官方或广泛认知的Flutter插件,因此这里的代码将基于一个假设的插件功能和API设计。如果 fire_api 是一个真实存在的插件,请查阅其官方文档以获取准确的信息和API。

假设 fire_api 插件提供了以下功能:

  1. 用户认证(登录/注册)
  2. 数据库操作(读写数据)
  3. 云存储上传/下载

首先,你需要在 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调用方式。

回到顶部