Flutter集成Kastela服务插件kastela_sdk_dart的使用

发布于 1周前 作者 nodeper 来自 Flutter

Flutter集成Kastela服务插件kastela_sdk_dart的使用

开始使用

要开始使用该插件,首先在您的 pubspec.yaml 文件中添加依赖项:

dependencies:
  kastela_sdk_dart: ^版本号

然后运行以下命令以获取依赖项:

flutter pub get

接下来,导入 Kastela 客户端 SDK:

import 'package:kastela_sdk_dart/kastela_sdk_dart.dart';

初始化 Kastela 客户端 SDK:

KastelaClient client = KastelaClient(
    "https://your-kastela-url.com", // 替换为您的 Kastela URL
);

使用示例

以下是一个完整的示例,展示了如何使用 kastela_sdk_dart 插件进行安全保护和安全存储的操作。

示例代码

import 'package:dio/dio.dart';
import 'package:kastela_sdk_dart/secure_protection_token.dart';
import 'package:kastela_sdk_dart/kastela_sdk_dart.dart';
import 'package:graphql_flutter/graphql_flutter.dart';
import 'package:kastela_sdk_dart/secure_vault_token.dart';

void main() async {
  // 初始化 Kastela 客户端
  KastelaClient client = KastelaClient(
    "http://127.0.0.1:3201", // 替换为您的 Kastela URL
  );

  // 数据准备
  List<Map<String, dynamic>> protectionList = [
    {"id": "5f77f9c2-2800-4661-b479-a0791aa0eacc", "data": ["example@company.com"]},
    {"id": "6980a205-db7a-4b8e-bfce-551709034cc3", "data": ["Indonesia"]},
    {"id": "963d8305-f68c-4f9a-b6b4-d568fc3d8f78", "data": ["1234567890123456"]},
    {"id": "0c392d3c-4ec0-4e11-a5bc-d6e094c21ea0", "data": ["123-456-7890"]},
  ];

  List<Map<String, dynamic>> vaultList = [
    {"id": "b64e2268-fca6-4605-8b5a-307a315b266d", "data": ["1945-08-17"]},
  ];

  int userId = 19067;

  // 存储数据
  void _store() async {
    // 获取保护凭证
    Response protectionCredentialRes = await Dio().post(
      "http://127.0.0.1:4000/api/secure/protection/init",
      data: {
        "operation": "WRITE",
        "protection_ids": protectionList.map((p) => p["id"]).toList(),
        "ttl": 1,
      },
    );
    dynamic protectionCredential = protectionCredentialRes.data["credential"];

    // 发送保护数据
    SecureProtectionToken protectionToken = await client.secureProtectionSend(
      protectionCredential,
      protectionList.map((p) => p["data"] as List<dynamic>).toList(),
    );

    // 打印保护令牌
    print("Protection Token: ${protectionToken.tokens[0][0]}");

    // 获取存储凭证
    Response vaultCredentialRes = await Dio().post(
      "http://127.0.0.1:4000/api/secure/vault/init",
      data: {
        "operation": "WRITE",
        "vault_ids": vaultList.map((v) => v["id"]).toList(),
        "ttl": 1,
      },
    );
    dynamic vaultCredential = vaultCredentialRes.data["credential"];

    // 发送存储数据
    SecureVaultToken vaultToken = await client.secureVaultSend(
      vaultCredential,
      vaultList.map((v) => v["data"] as List<dynamic>).toList(),
    );

    // 打印存储令牌
    print("Vault Token: ${vaultToken.tokens[0][0]}");
  }

  // 更新数据
  void _update() async {
    // 获取更新保护凭证
    Response protectionCredentialRes = await Dio().post(
      "http://127.0.0.1:4000/api/secure/protection/init",
      data: {
        "operation": "WRITE",
        "protection_ids": [protectionList[0]["id"]],
        "ttl": 1,
      },
    );
    dynamic protectionCredential = protectionCredentialRes.data["credential"];

    // 发送更新保护数据
    SecureProtectionToken protectionToken = await client.secureProtectionSend(
      protectionCredential,
      [["example-update@company.com"]],
    );

    // 打印更新后的保护令牌
    print("Updated Protection Token: ${protectionToken.tokens[0][0]}");

    // 获取更新存储凭证
    Response vaultCredentialRes = await Dio().post(
      "http://127.0.0.1:4000/api/secure/vault/init",
      data: {
        "operation": "WRITE",
        "vault_ids": [vaultList[0]["id"]],
        "ttl": 1,
      },
    );
    dynamic vaultCredential = vaultCredentialRes.data["credential"];

    // 发送更新存储数据
    SecureVaultToken vaultToken = await client.secureVaultSend(
      vaultCredential,
      [["2009-09-09"]],
    );

    // 打印更新后的存储令牌
    print("Updated Vault Token: ${vaultToken.tokens[0][0]}");
  }

  // 获取数据
  void _get() async {
    // 查询用户数据
    GraphQLClient gqlClient = GraphQLClient(
      link: HttpLink("http://127.0.0.1:4000/graphql"),
      cache: GraphQLCache(),
    );

    String queryGql = r"""
      query getUserSecure($id: Int!) {
        get_user_secure(id: $id) {
          id
          email
          country
          credit_card
          phone
          birthdate
        }
      }
    """;

    QueryOptions options = QueryOptions(
      document: gql(queryGql),
      variables: {"id": userId},
    );

    QueryResult res = await gqlClient.query(options);

    dynamic queryData = res.data?["get_user_secure"];

    if (queryData != null) {
      // 获取保护凭证
      Response protectionCredentialRes = await Dio().post(
        "http://127.0.0.1:4000/api/secure/protection/init",
        data: {
          "operation": "READ",
          "protection_ids": protectionList.map((p) => p["id"]).toList(),
          "ttl": 1,
        },
      );
      dynamic protectionCredential = protectionCredentialRes.data["credential"];

      // 接收保护数据
      SecureProtectionValues protectionValues = await client.secureProtectionReceive(
        protectionCredential,
        [
          [queryData["email"]],
          [queryData["country"]],
          [queryData["credit_card"]],
          [queryData["phone"]],
        ],
      );

      print("Protection Values:");
      print("Email: ${protectionValues.values[0][0]}");
      print("Country: ${protectionValues.values[1][0]}");
      print("Credit Card: ${protectionValues.values[2][0]}");
      print("Phone: ${protectionValues.values[3][0]}");

      // 获取存储凭证
      Response vaultCredentialRes = await Dio().post(
        "http://127.0.0.1:4000/api/secure/vault/init",
        data: {
          "operation": "READ",
          "vault_ids": vaultList.map((v) => v["id"]).toList(),
          "ttl": 1,
        },
      );
      dynamic vaultCredential = vaultCredentialRes.data["credential"];

      // 接收存储数据
      SecureVaultValues vaultValues = await client.secureVaultReceive(
        vaultCredential,
        [
          [queryData["birthdate"]],
        ],
      );

      print("Vault Values:");
      print("Birthdate: ${vaultValues.values[0][0]}");
    } else {
      print("No Data Found");
    }
  }

  // 执行操作
  void exec() async {
    _store();
    _get();
    _update();
    _get();
  }

  // 运行示例
  await exec();
}

说明

  1. 初始化客户端

    • 使用 KastelaClient 初始化客户端,并传入 Kastela 的 URL。
  2. 存储数据

    • 使用 secureProtectionSend 方法发送保护数据。
    • 使用 secureVaultSend 方法发送存储数据。
  3. 更新数据

    • 更新保护和存储数据的过程与存储类似,但操作类型为 WRITE
  4. 获取数据

    • 使用 secureProtectionReceivesecureVaultReceive 方法接收保护和存储的数据。

输出示例

Protection Token: token1234567890
Vault Token: token9876543210
Protection Values:
Email: example@company.com
Country: Indonesia
Credit Card: 1234567890123456
Phone: 123-456-7890
Vault Values:
Birthdate: 1945-08-17

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

1 回复

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


要在Flutter项目中集成Kastela服务插件 kastela_sdk_dart,你可以按照以下步骤进行操作:

1. 添加依赖

首先,你需要在 pubspec.yaml 文件中添加 kastela_sdk_dart 依赖。

dependencies:
  flutter:
    sdk: flutter
  kastela_sdk_dart: ^1.0.0  # 请根据实际情况使用最新版本

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

2. 初始化Kastela SDK

在你的Flutter应用中,你需要在应用启动时初始化Kastela SDK。通常可以在 main.dart 文件中进行初始化。

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

void main() async {
  WidgetsFlutterBinding.ensureInitialized();

  // 初始化Kastela SDK
  await KastelaSDK.initialize(
    apiKey: 'YOUR_API_KEY',  // 替换为你的Kastela API Key
    environment: KastelaEnvironment.sandbox,  // 或者使用KastelaEnvironment.production
  );

  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Kastela Example',
      home: HomeScreen(),
    );
  }
}

3. 使用Kastela SDK

在初始化完成后,你可以在应用的其他部分使用Kastela SDK提供的功能。例如,你可以使用 KastelaSDK 实例来调用API。

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

class HomeScreen extends StatelessWidget {
  Future<void> _fetchData() async {
    try {
      // 调用Kastela API
      var response = await KastelaSDK.instance.getSomeData();
      print('Response: $response');
    } catch (e) {
      print('Error: $e');
    }
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Kastela Example'),
      ),
      body: Center(
        child: ElevatedButton(
          onPressed: _fetchData,
          child: Text('Fetch Data'),
        ),
      ),
    );
  }
}

4. 处理API响应

根据Kastela SDK的文档,你可以处理API的响应数据。通常,API会返回一个JSON对象,你可以将其解析为Dart对象。

5. 错误处理

在使用Kastela SDK时,确保处理可能出现的错误。例如,网络错误、API错误等。

6. 发布应用

在发布应用之前,确保你已经正确配置了Kastela SDK的生产环境API Key,并且已经测试了所有功能。

7. 其他注意事项

  • 确保你使用的Kastela SDK版本与你的Flutter版本兼容。
  • 如果你遇到任何问题,可以参考Kastela SDK的官方文档或联系Kastela支持团队。

示例代码

以下是一个完整的示例代码,展示了如何在Flutter应用中集成和使用Kastela SDK:

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

void main() async {
  WidgetsFlutterBinding.ensureInitialized();

  // 初始化Kastela SDK
  await KastelaSDK.initialize(
    apiKey: 'YOUR_API_KEY',  // 替换为你的Kastela API Key
    environment: KastelaEnvironment.sandbox,  // 或者使用KastelaEnvironment.production
  );

  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Kastela Example',
      home: HomeScreen(),
    );
  }
}

class HomeScreen extends StatelessWidget {
  Future<void> _fetchData() async {
    try {
      // 调用Kastela API
      var response = await KastelaSDK.instance.getSomeData();
      print('Response: $response');
    } catch (e) {
      print('Error: $e');
    }
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Kastela Example'),
      ),
      body: Center(
        child: ElevatedButton(
          onPressed: _fetchData,
          child: Text('Fetch Data'),
        ),
      ),
    );
  }
}
回到顶部
AI 助手
你好,我是IT营的 AI 助手
您可以尝试点击下方的快捷入口开启体验!