Flutter后端服务集成插件appwrite_dart_wrapper的使用

Flutter后端服务集成插件appwrite_dart_wrapper的使用

Features(功能)

  • startWrapper 记录请求头和请求负载,并解析请求为头部、负载和变量。

    Future<void> start(final req, final res) async =>
        await startWrapper(
          req,
          res,
          biz,
          log: true,
          debug: true, // 默认设置为false
          // 如果设置为null,则不能使用'debug'
          // 如果设置为'your-appwrite.io-user-id',只有该用户可以使用'debug'
          // 可以从请求体覆盖变量
          debugUserId: 'your-appwrite.io-user-id or null', // 默认为null
        );
    
  • databases_wrapper 提供创建、更新、获取、查询文档的闭包函数。

    final fnCeateDoc = buildFnCreateRecord(
      client,
      databaseId: '<your-db-id>',
      collectionId: '<your-doc-collection-id>',
    );
    
    // 使用
    await fnCeateDoc(documentId: ID.unique(), data: {
      "name": 'test1',
      "age": 123,
    });
    
  • functions_wrapper 提供创建执行的闭包函数。

  • local_test 提供本地测试功能。

Getting Started(开始使用)

dart pub add appwrite_dart_wrapper

Usage(使用示例)

main.dart文件中添加以下代码:

import 'package:appwrite_dart_wrapper/appwrite_dart_wrapper.dart';

Future<void> start(final req, final res) async =>
    await startWrapper(
      req,
      res,
      biz,
      log: true,
      debugUserId: '<your appwrite admin user id or null>',
    );

Additional Information(附加信息)

Function Variables(函数变量)

Appwrite 提供的函数变量,除了你自己定义的变量之外,你还可以从函数代码中访问这些变量。这些变量提供了关于你的执行运行时环境的信息。

Name Description
APPWRITE_FUNCTION_ID 你的函数的唯一ID。
APPWRITE_FUNCTION_NAME 你的函数的名称。
APPWRITE_FUNCTION_DEPLOYMENT 你的函数代码部署的唯一ID。
APPWRITE_FUNCTION_TRIGGER 当通过所选范围触发时为 ‘event’,当通过HTTP请求或Appwrite控制台触发时为 ‘http’,当通过计划任务触发时为 ‘schedule’。
APPWRITE_FUNCTION_RUNTIME_NAME 你的函数运行时名称。可以是任何Appwrite支持的执行运行时。
APPWRITE_FUNCTION_RUNTIME_VERSION 你的函数运行时版本。
APPWRITE_FUNCTION_EVENT 仅在函数触发为 ‘event’ 时可用。此变量值可以是任何Appwrite系统事件。
APPWRITE_FUNCTION_EVENT_DATA 当你的函数触发器为 ‘event’ 时可用。此变量值包含一个JSON格式的字符串,其中包含特定事件数据。
APPWRITE_FUNCTION_DATA 仅在通过SDK或HTTP API及Appwrite控制台触发函数时可用。此变量值包含一个任意格式的字符串。如果自定义数据为JSON格式,必须在函数代码内部解析。
APPWRITE_FUNCTION_PROJECT_ID 你的函数的项目ID。
APPWRITE_FUNCTION_USER_ID 触发函数执行的用户的userId。在Appwrite控制台触发的执行将被前缀为 “admin-”。
APPWRITE_FUNCTION_JWT 为执行你的函数的用户生成的JSON Web Token。

cmd

dart pub publish --server=https://pub.dev

完整示例代码

以下是一个完整的示例代码,展示了如何使用appwrite_dart_wrapper插件。

import 'package:appwrite_dart_wrapper/appwrite_dart_wrapper.dart';
import 'package:dart_appwrite/dart_appwrite.dart';
import 'package:dart_appwrite/src/client.dart';

Future<void> main() async {
  await start(
      Req(variables: {
        "APPWRITE_FUNCTION_ENDPOINT": "https://api.appwrite.io",
        "APPWRITE_FUNCTION_PROJECT_ID": "your project id",
        "APPWRITE_FUNCTION_API_KEY": "your project key"
      }), Res(onData: (awesome, s) {
    print("awsome: $awesome");
  }));
}

Future<void> start(final req, final res) async =>
    await startWrapper(
      req,
      res,
      biz,
      log: true,
      debug: true, // 默认设置为false
      debugUserId: 'your-appwrite.io-user-id or null',
    );

Future<Result> biz(
  Map<String, dynamic> headers,
  Map<String, dynamic> payload,
  Map<String, String> vars,
  Client client,
) async {
  // 创建文档示例
  final fnCeateDoc = buildFnCreateRecord(
    client,
    databaseId: '<your-db-id>',
    collectionId: '<your-doc-collection-id>',
  );

  // 使用
  await fnCeateDoc(documentId: ID.unique(), data: {
    "name": 'test1',
    "age": 123,
  });

  // 测试错误报告
  // throw "hahaha";

  return Result.rOk(msg: 'Yes Awesome, payloads $payload, vars $vars');
}

更多关于Flutter后端服务集成插件appwrite_dart_wrapper的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

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


当然,以下是如何在Flutter项目中集成并使用 appwrite_dart_wrapper 插件来与 Appwrite 后端服务进行交互的代码案例。

1. 添加依赖

首先,在 pubspec.yaml 文件中添加 appwrite_dart_wrapper 依赖:

dependencies:
  flutter:
    sdk: flutter
  appwrite_dart_wrapper: ^x.y.z  # 请替换为最新版本号

然后运行 flutter pub get 以获取依赖。

2. 初始化 Appwrite 客户端

在你的 Flutter 项目中,创建一个文件(例如 appwrite_client.dart)来初始化 Appwrite 客户端:

import 'package:appwrite_dart_wrapper/appwrite.dart';

class AppwriteService {
  late Client client;

  AppwriteService({required String projectId, required String apiKey, String endpoint = 'https://[YOUR_APPWRITE_INSTANCE_ID].appwrite.io/v1'}) {
    client = Client(
      endpoint: endpoint,
      project: projectId,
      key: apiKey,
    );
  }
}

3. 使用 Appwrite 客户端进行数据库操作

下面是一个简单的例子,展示如何使用初始化后的 Appwrite 客户端执行数据库操作,例如读取集合中的数据:

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

void main() {
  runApp(MyApp());
}

class MyApp extends StatefulWidget {
  @override
  _MyAppState createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  late AppwriteService appwriteService;
  List<Map<String, dynamic>> documents = [];

  @override
  void initState() {
    super.initState();
    // 替换为实际的 projectId 和 apiKey
    appwriteService = AppwriteService(
      projectId: '[YOUR_PROJECT_ID]',
      apiKey: '[YOUR_API_KEY]',
    );

    fetchDocuments();
  }

  void fetchDocuments() async {
    try {
      var response = await appwriteService.client.database.listDocuments(
        collectionId: '[YOUR_COLLECTION_ID]', // 替换为实际的集合ID
      );
      setState(() {
        documents = response['documents'] ?? [];
      });
    } catch (e) {
      print('Error fetching documents: $e');
    }
  }

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('Appwrite Flutter Integration'),
        ),
        body: ListView.builder(
          itemCount: documents.length,
          itemBuilder: (context, index) {
            var doc = documents[index];
            return ListTile(
              title: Text(doc['$id'] ?? 'Unknown ID'), // 假设集合中有一个名为 `$id` 的字段作为标识符
              subtitle: Text(doc['name'] ?? 'Unknown Name'), // 假设集合中有一个名为 `name` 的字段
            );
          },
        ),
      ),
    );
  }
}

4. 运行应用

确保你的 Appwrite 实例正在运行,并且已经创建了项目、集合,并插入了数据。然后运行你的 Flutter 应用:

flutter run

这将启动你的 Flutter 应用,并显示从 Appwrite 数据库集合中读取的数据。

注意事项

  • 确保你替换了 [YOUR_APPWRITE_INSTANCE_ID][YOUR_PROJECT_ID][YOUR_API_KEY][YOUR_COLLECTION_ID] 为实际的值。
  • 在实际开发中,请注意不要将敏感信息硬编码到客户端代码中,可以考虑使用环境变量或安全存储机制。
  • 根据你的需求,你可以进一步扩展 AppwriteService 类,以包含更多的 Appwrite API 调用。

这个代码案例展示了如何使用 appwrite_dart_wrapper 插件在 Flutter 应用中集成 Appwrite 后端服务,并进行基本的数据库操作。

回到顶部