Flutter客户端通信插件flipt_client的使用
Flutter客户端通信插件flipt_client的使用
Flipt Client Dart
flipt-client-dart 库包含了用于 Flipt 客户端评估的 Dart 源代码。
安装
在项目的 pubspec.yaml 文件中添加以下依赖:
dependencies:
flipt_client: ^0.1.0
然后运行以下命令以安装包:
dart pub get
如何工作?
flipt-client-dart 库是基于 flipt-engine-ffi 库的封装。所有评估都在 SDK 中进行,使用从 flipt-engine-ffi 库构建的共享库。
由于评估发生在 SDK 内部,因此可以在 Flipt 服务器不可用或不可达的环境中使用 SDK。
数据获取
在实例化时,flipt-client-dart 库会从 Flipt 服务器获取标志状态并存储在内存中。这意味着首次使用 SDK 时,它将向 Flipt 服务器发出请求。
轮询(默认)
默认情况下,SDK 将定期轮询 Flipt 服务器以获取新的标志状态。此间隔可以通过在构造客户端时使用 updateInterval 选项进行配置。默认间隔为 120 秒。
流式传输(仅限 Flipt Cloud)
Flipt Cloud 用户可以使用 streaming 获取方法,从 Flipt 服务器流式传输标志状态更改到 SDK。
在流模式下,SDK 将连接到 Flipt 服务器并打开一个持久连接,该连接将在客户端关闭之前保持打开状态。SDK 将实时接收标志状态更改。
重试
如果客户端暂时无法访问 Flipt 服务器,SDK 将自动重试获取(或启动流式传输)标志状态。
SDK 将最多重试 3 次,并在每次重试之间使用指数退避间隔。基本延迟为 1 秒,最大延迟为 30 秒。
可重试的错误包括:
429 Too Many Requests502 Bad Gateway503 Service Unavailable504 Gateway Timeout- 其他潜在的瞬态网络或 DNS 错误
支持的架构
此 SDK 当前支持以下操作系统/架构:
- Linux x86_64
- Linux arm64
- MacOS x86_64
- MacOS arm64
- Windows x86_64
重要提示
此 SDK 目前仅支持桌面平台(MacOS、Linux、Windows)。我们正在努力为 iOS 和 Android 等移动平台添加支持。
使用示例
以下是一个完整的示例,展示如何使用 flipt-client-dart:
import 'package:flipt_client/flipt_client.dart';
void main() {
// 初始化客户端
final client = FliptEvaluationClient(
'default', // 命名空间
Options.withClientToken(
'your-token', // 客户端令牌
url: 'http://localhost:8080', // Flipt 服务器地址
),
);
// 评估变体标志
final result = client.evaluateVariant(
flagKey: 'flag1', // 标志键
entityId: 'someentity', // 实体 ID
context: {'fizz': 'buzz'}, // 上下文
);
print('Variant: ${result.variantKey}'); // 输出变体值
// 评估布尔标志
final result = client.evaluateBoolean(
flagKey: 'flag2', // 标志键
entityId: 'user123', // 实体 ID
context: {'key': 'value'}, // 上下文
);
print('Enabled: ${result.enabled}'); // 输出布尔值
// 完成后关闭客户端
client.close();
}
客户端选项
FliptEvaluationClient 初始化程序接受多个选项,可用于配置客户端。可用选项包括:
namespace: 要从中获取标志状态的命名空间。如果不提供,默认为default。url: 上游 Flipt 实例的 URL。如果不提供,默认为http://localhost:8080。requestTimeout: 到上游 Flipt 实例的总请求时间超时(以秒为单位)。如果不提供,默认为无超时。注意:此选项仅影响轮询模式。流模式将没有超时设置。updateInterval: 获取新标志状态的间隔(以秒为单位)。如果不提供,默认为 120 秒。authentication: 与上游 Flipt 实例通信时使用的身份验证策略。如果不提供,默认为无身份验证。详见 身份验证 部分。reference: 在获取标志状态时使用的引用。如果不提供,默认不使用引用。fetchMode: 获取标志状态时使用的获取模式。如果不提供,默认为轮询。errorStrategy: 获取标志状态时使用的错误策略。如果不提供,默认为fail。详见 错误策略 部分。
身份验证
FliptEvaluationClient 支持以下身份验证策略:
- 无身份验证(默认)
- 使用令牌的身份验证
- 使用 JWT 的身份验证
错误策略
客户端支持以下错误策略:
fail: 如果无法获取标志状态,客户端将抛出错误。这是默认行为。fallback: 如果发生错误,客户端将保留最后一个已知的良好状态,并在评估时使用该状态。
开发
要生成 JSON 序列化代码,运行以下命令:
dart run build_runner build --delete-conflicting-outputs
更多关于Flutter客户端通信插件flipt_client的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter客户端通信插件flipt_client的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
flipt_client 是一个 Flutter 插件,用于与 Flipt 服务器进行通信。Flipt 是一个功能标记(feature flag)管理系统,允许你在应用程序中动态地启用或禁用功能,而无需重新部署应用程序。
要在 Flutter 项目中使用 flipt_client 插件,你需要完成以下步骤:
1. 添加依赖
首先,你需要在 pubspec.yaml 文件中添加 flipt_client 插件的依赖。
dependencies:
flutter:
sdk: flutter
flipt_client: ^0.1.0 # 请根据实际情况使用最新版本
然后运行 flutter pub get 来获取依赖。
2. 初始化 Flipt 客户端
在你的 Dart 代码中,首先需要初始化 Flipt 客户端。你需要提供 Flipt 服务器的地址和认证信息(如果需要)。
import 'package:flipt_client/flipt_client.dart';
void main() async {
final client = FliptClient(
baseUrl: 'https://your-flipt-server.com', // Flipt 服务器的地址
authentication: Authentication.basic(
username: 'your-username', // 如果需要认证
password: 'your-password', // 如果需要认证
),
);
// 现在你可以使用 client 来与 Flipt 服务器进行交互
}
3. 获取功能标记
你可以使用 client 来获取功能标记的状态。例如,检查某个功能是否启用:
void checkFeatureFlag(FliptClient client) async {
final flag = await client.getFlag(
namespaceKey: 'default', // 命名空间
key: 'my-feature-flag', // 功能标记的键
);
if (flag.enabled) {
print('Feature is enabled');
} else {
print('Feature is disabled');
}
}
4. 处理错误
在与 Flipt 服务器通信时,可能会遇到各种错误,例如网络错误或认证失败。你可以使用 try-catch 块来处理这些错误。
void checkFeatureFlagWithErrorHandling(FliptClient client) async {
try {
final flag = await client.getFlag(
namespaceKey: 'default',
key: 'my-feature-flag',
);
if (flag.enabled) {
print('Feature is enabled');
} else {
print('Feature is disabled');
}
} catch (e) {
print('Error: $e');
}
}
5. 其他操作
flipt_client 插件还支持其他操作,例如获取所有的功能标记、创建或更新功能标记等。你可以参考插件的文档或源代码来了解更多细节。
6. 释放资源
在使用完 Flipt 客户端后,记得释放资源,例如关闭网络连接。
void disposeClient(FliptClient client) {
client.dispose();
}
7. 示例
以下是一个完整的示例,展示如何使用 flipt_client 插件来检查功能标记:
import 'package:flipt_client/flipt_client.dart';
void main() async {
final client = FliptClient(
baseUrl: 'https://your-flipt-server.com',
authentication: Authentication.basic(
username: 'your-username',
password: 'your-password',
),
);
await checkFeatureFlag(client);
client.dispose();
}
void checkFeatureFlag(FliptClient client) async {
try {
final flag = await client.getFlag(
namespaceKey: 'default',
key: 'my-feature-flag',
);
if (flag.enabled) {
print('Feature is enabled');
} else {
print('Feature is disabled');
}
} catch (e) {
print('Error: $e');
}
}

