ByteNoteByteNote
flow_ui:用 Flutter 快速搭出生产级 AI 聊天界面的开源组件库

字节笔记本

2026年8月27日

flow_ui:用 Flutter 快速搭出生产级 AI 聊天界面的开源组件库

API中转
¥120

本文介绍 StacDev 开源的 flow_ui,一个用 Flutter 构建 AI 聊天和助手界面的 UI 组件库。它把"对话界面长什么样"和"模型怎么响应"彻底分开:组件只负责画状态、报回调,模型相关的逻辑全部留在你的应用里。

项目简介

flow_ui 今年 8 月发布,目前版本 0.2.0,MIT 协议,代码在 GitHub(StacDev/flow_ui)。这个团队此前做的就是 Stac——用 JSON 驱动 Flutter UI 的框架,做声明式组件库算是他们的老本行。

它给自己的定位有几个关键词:production-grade(生产级)、plain Flutter package(无代码生成)、no transitive dependency tree(除 Flutter SDK 外零传递依赖)。对一个 UI 库来说,最后这条挺难得——引一个包不会顺手拖进一堆第三方依赖。

设计思路

flow_ui 的组件是"哑"的:你把会话状态递给它,它画出来;用户做了什么操作,它通过回调告诉你。流式输出、工具调用、重试这些逻辑都由你的应用层掌控,库不绑架你的数据流。

主题通过 ThemeExtension 接入:颜色和排版做成 FlowTheme,挂进 MaterialApp 即可。设计系统用的 Figtree 字体直接打包在库里,不用往 pubspec 的 fonts 段加东西。不装 FlowTheme 也能跑——组件会按当前 ThemeData.brightness 回退到预设样式。

安装指南

前置要求:Dart SDK ^3.12.2、Flutter >= 3.44.0(要求比较新)。

pubspec.yaml 一行搞定:

yaml
dependencies:
  flow_ui: ^0.2.0

快速开始

接入主题

dart
MaterialApp(
  theme: ThemeData(extensions: [FlowTheme.light()]),
  darkTheme: ThemeData(
    brightness: Brightness.dark,
    extensions: [FlowTheme.dark()],
  ),
)

渲染一段三方会话

消息就是普通数据,交给 FlowThread 画出来:

dart
FlowThread(
  messages: [
    FlowMessageData.text(
      id: '1',
      role: FlowMessageRole.user,
      text: 'What is flow_ui?',
    ),
    FlowMessageData.text(
      id: '2',
      role: FlowMessageRole.assistant,
      text: 'An open-source Flutter UI library...',
    ),
    FlowMessageData.text(
      id: '3',
      role: FlowMessageRole.system,
      text: 'Model changed to Sonnet',
    ),
  ],
)

user / assistant / system 三种角色各归其位,system 提示(比如切换模型的通知)有独立的呈现方式,不用自己 hack 进消息列表。

适用场景

  • 给自家 App 加 AI 助手入口,不想从气泡布局、输入框状态机开始手写
  • 多模型客户端:UI 层与具体模型解耦,换后端不动界面
  • 快速搭 Demo 或内部工具的对话界面,再按需替换个别组件

官方仓库带 playground 示例工程,clone 下来跑一遍比看文档直观。

注意事项

  • 版本还早(0.2.0),API 大概率会变,锁版本升级
  • 要求 Flutter 3.44+,老项目先看升级成本
  • 组件覆盖的是聊天主流程,富媒体消息、复杂卡片类需求要看文档确认支持程度

项目链接

分享: