Unleash Flutter 接入指南:使用 unleash_proxy_client_flutter 完成功能开关的安装、初始化与判定
2026/9/14 23:08:38 网站建设 项目流程

Unleash Flutter 接入指南:使用 unleash_proxy_client_flutter 完成功能开关的安装、初始化与判定

【免费下载链接】unleashOpen-source feature management platform项目地址: https://gitcode.com/GitHub_Trending/un/unleash

本文以开源特性管理平台 Unleash 为背景,聚焦 Flutter(Dart)客户端如何通过官方代理客户端 SDK 快速接入:从pub安装、UnleashClient初始化与start()启动,到用isEnabled()轮询判定功能开关状态。读完本文,你将能够在任意 Flutter 应用中接入 Unleash 前端 API,实现远程配置下发与功能开关的灰度控制,并理解该接入片段在 Unleash 控制台“连接 SDK”引导流程中的真实运作方式。

一、Flutter SDK 在 Unleash 中的定位

在 Unleash 的 SDK 体系中,Flutter SDK 属于客户端 SDK(client SDK),即面向移动端/浏览器等最终用户设备运行的 SDK。这一点可以从仓库中的 SDK 注册表得到确认:SDKs.ts 将flutter注册为:

  • displayNameFlutter Proxy SDK
  • descriptionOfficial Unleash Client for Flutter
  • typeclient

与 Node.js、Go、Python 等服务端 SDK 直接访问常规客户端 API(/api/)不同,Flutter 这类客户端 SDK 走的是前端 API(Frontend API),地址形如https://<your-unleash-host>/api/frontend/。仓库中的 buildSdkApiUrl.ts 清晰地实现了这一分流逻辑:

const isFrontendSdk = clientSdks.some((sdk) => sdk.name === sdkName); return `${unleashUrl}/api${isFrontendSdk ? '/frontend' : ''}/`;

这意味着你的YOUR_API_URL应为https://your-unleash-instance/api/frontend/clientKey应使用在 Unleash 控制台创建的前端客户端密钥(Frontend API token)。前端 API 的设计让移动端 SDK 无需暴露服务端密钥,只需携带受限的客户端令牌即可安全地拉取功能开关状态。

二、第一步:安装 Flutter SDK 依赖

在 Flutter 项目的根目录执行以下命令,即可从 pub.dev 拉取官方代理客户端:

flutter pub add unleash_proxy_client_flutter

该命令会完成两件事:

  1. unleash_proxy_client_flutter添加到pubspec.yamldependencies中;
  2. 自动执行flutter pub get解析并下载依赖。

执行完成后,项目中即可直接import 'package:unleash_proxy_client_flutter/unleash_proxy_client_flutter.dart';使用 SDK 提供的能力。

三、第二步:初始化 UnleashClient 并启动

3.1 最小初始化示例

导入 SDK 后,创建UnleashClient实例并调用start()启动连接:

import 'package:unleash_proxy_client_flutter/unleash_proxy_client_flutter.dart'; import 'dart:async'; final unleash = UnleashClient( url: Uri.parse('<YOUR_API_URL>'), clientKey: '<YOUR_API_TOKEN>', // in production use environment variable appName: 'unleash-onboarding-flutter'); unleash.start();

三个必填参数的含义如下:

参数说明取值建议
urlUnleash 前端 API 地址https://<your-unleash-host>/api/frontend/,需以Uri.parse传入
clientKey前端 API 客户端令牌在 Unleash 控制台“API 访问”中创建的前端 Token;生产环境务必通过环境变量注入,而非硬编码
appName应用名称,用于在 Unleash 侧识别与统计该客户端自定义字符串,例如unleash-onboarding-flutter,建议与你的应用名保持一致

appName会被 Unleash 用于 SDK 连接状态识别与客户端实例统计,这也是后面“连接状态自检”能生效的前提之一。

3.2 生产环境:用环境变量注入密钥

将客户端令牌硬编码进代码库存在泄露风险。SDK 片段提供了基于dart:io的生产级写法,从进程环境变量读取密钥:

import 'package:unleash_proxy_client_flutter/unleash_proxy_client_flutter.dart'; import 'dart:io'; final unleash = UnleashClient( url: Uri.parse('<YOUR_API_URL>'), clientKey: Platform.environment['UNLEASH_CLIENT_KEY']!, appName: 'unleash-onboarding-flutter'); unleash.start();

Platform.environment['UNLEASH_CLIENT_KEY']!会在运行时读取名为UNLEASH_CLIENT_KEY的环境变量;若未设置,Dart 会因非空断言!抛出运行时错误——这能帮助你在启动阶段尽早发现配置缺失。在实际 CI/CD 或移动端构建流程中,可通过构建配置注入该变量。

四、第三步:使用 isEnabled 判定功能开关

SDK 启动后即可查询功能开关状态。由于前端 API 采用定期轮询拉取的更新模型,片段中使用Timer.periodic每秒轮询一次并打印结果:

Timer.periodic(Duration(seconds: 1), (Timer timer) { if (unleash.isEnabled('<YOUR_FLAG>')) { print('<YOUR_FLAG> is enabled'); } else { print('<YOUR_FLAG> is disabled'); } });

isEnabled('<YOUR_FLAG>')的核心语义如下:

  • <YOUR_FLAG>替换为你在 Unleash 中创建的功能开关名称(flag name);
  • 返回true表示当前客户端命中该开关的启用策略(例如命中灰度百分比、满足激活策略条件);
  • 返回false表示开关关闭,或当前上下文不满足激活条件。

在真实 UI 场景中,isEnabled通常不会配Timer.periodic做秒级轮询,而是配合 Flutter 的响应式刷新(如setStateValueListenableBuilder)或 SDK 提供的事件回调在开关状态变化时刷新界面。秒级轮询更适合日志输出、调试与演示场景。片段中也给出了可以直接放进build方法的最小判定块:

if (unleash.isEnabled("<YOUR_FLAG>")) { print("<YOUR_FLAG> is enabled"); } else { print("<YOUR_FLAG> is disabled"); }

五、这些代码片段是如何被“个性化”的

值得注意的是,flutter.md中的<YOUR_API_URL><YOUR_API_TOKEN><YOUR_FLAG>占位符,并非写死的固定值。当用户在 Unleash 控制台的新手引导(Onboarding)流程中选择 Flutter SDK 时,前端会动态替换这些占位符:

  1. CodeRenderer.tsx 通过codeRenderSnippets将各 SDK 的 Markdown 片段以?raw方式加载,其中Flutter键对应的正是 flutter.md;
  2. ConfigureSdk.tsx 依次执行字符串替换:<YOUR_API_TOKEN>→ 真实 API Token、<YOUR_API_URL>→ 由 buildSdkApiUrl.ts 计算出的前端 API 地址、<YOUR_FLAG>→ 你刚创建的功能开关名;
  3. 替换后的代码块通过Markdown组件配合CodeRenderer渲染为带语法高亮(Dart 语言已注册在 CodeRenderer.tsx 的高亮语言表中)和“一键复制”按钮的代码块。

因此你在文档中看到的<YOUR_API_URL><YOUR_API_TOKEN><YOUR_FLAG>,在实际引导界面中会被替换为可直接运行的配置值。

六、连接状态与常见问题排查

在 Onboarding 引导中,Flutter 片段下方还会展示 SDK 连接状态组件(SdkEvaluationStatus.tsx),其逻辑是:Unleash 通过项目概览轮询(refreshInterval: 1000,见 ConfigureSdk.tsx)检测onboardingStatus.status === 'sdk-connected',一旦收到来自该 SDK 的指标上报即判定连接成功。

据此,接入失败时可从以下几个方向排查:

  1. API 地址是否正确:Flutter 是客户端 SDK,必须指向/api/frontend/而非/api/
  2. Token 类型是否匹配:前端 API 只能使用前端客户端 Token(client-side token),使用服务端 Token 会鉴权失败;
  3. 应用是否真正启动:引导界面提示“如果约 30 秒后仍未看到评估结果,请确认应用已启动,且客户端使用步骤 2 中的 API 密钥完成初始化”;
  4. appName是否与引导流程一致:指标上报依赖appName等元数据,不一致可能导致连接状态无法被识别;
  5. start()是否被调用:只创建UnleashClient而不调用start(),SDK 不会建立连接、也不会拉取功能开关数据。

七、延伸阅读建议

围绕 Flutter 接入,官方还提供了以下配套资源(均可从 Unleash 官方文档与 SDK 示例仓库获取,本文不再罗列外部链接):

  • SDK 仓库文档unleash_proxy_client_flutter的完整 API 说明,涵盖UnleashClient的更多构造参数(如轮询间隔、自定义上下文 context 等);
  • Flutter 示例工程:官方 SDK 示例仓库中的 Flutter 目录,包含可直接运行的接入示例;
  • A/B 测试实战指南:官方文档中关于“在 Flutter 中使用 Unleash 与 Mixpanel 实现 A/B 测试”的指南,介绍如何将功能开关与数据分析平台结合,验证实验效果。

八、小结

在 Unleash 中接入 Flutter 只需三步:flutter pub add unleash_proxy_client_flutter安装依赖 → 创建UnleashClient(配置前端 API 地址、客户端 Token 与appName)并调用start()→ 通过isEnabled()判定功能开关状态。生产环境应通过环境变量注入客户端密钥,并牢记 Flutter 走的是/api/frontend/前端 API。本文所依据的接入片段位于 frontend/src/component/onboarding/dialog/snippets/flutter.md,其占位符替换与连接状态检测机制可分别在 ConfigureSdk.tsx 与 buildSdkApiUrl.ts 中查看。

【免费下载链接】unleashOpen-source feature management platform项目地址: https://gitcode.com/GitHub_Trending/un/unleash

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询