[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"similar-flyerhq--flutter_chat_ui":3,"tool-flyerhq--flutter_chat_ui":61},[4,18,26,36,44,52],{"id":5,"name":6,"github_repo":7,"description_zh":8,"stars":9,"difficulty_score":10,"last_commit_at":11,"category_tags":12,"status":17},4358,"openclaw","openclaw\u002Fopenclaw","OpenClaw 是一款专为个人打造的本地化 AI 助手，旨在让你在自己的设备上拥有完全可控的智能伙伴。它打破了传统 AI 助手局限于特定网页或应用的束缚，能够直接接入你日常使用的各类通讯渠道，包括微信、WhatsApp、Telegram、Discord、iMessage 等数十种平台。无论你在哪个聊天软件中发送消息，OpenClaw 都能即时响应，甚至支持在 macOS、iOS 和 Android 设备上进行语音交互，并提供实时的画布渲染功能供你操控。\n\n这款工具主要解决了用户对数据隐私、响应速度以及“始终在线”体验的需求。通过将 AI 部署在本地，用户无需依赖云端服务即可享受快速、私密的智能辅助，真正实现了“你的数据，你做主”。其独特的技术亮点在于强大的网关架构，将控制平面与核心助手分离，确保跨平台通信的流畅性与扩展性。\n\nOpenClaw 非常适合希望构建个性化工作流的技术爱好者、开发者，以及注重隐私保护且不愿被单一生态绑定的普通用户。只要具备基础的终端操作能力（支持 macOS、Linux 及 Windows WSL2），即可通过简单的命令行引导完成部署。如果你渴望拥有一个懂你",349277,3,"2026-04-06T06:32:30",[13,14,15,16],"Agent","开发框架","图像","数据工具","ready",{"id":19,"name":20,"github_repo":21,"description_zh":22,"stars":23,"difficulty_score":10,"last_commit_at":24,"category_tags":25,"status":17},3808,"stable-diffusion-webui","AUTOMATIC1111\u002Fstable-diffusion-webui","stable-diffusion-webui 是一个基于 Gradio 构建的网页版操作界面，旨在让用户能够轻松地在本地运行和使用强大的 Stable Diffusion 图像生成模型。它解决了原始模型依赖命令行、操作门槛高且功能分散的痛点，将复杂的 AI 绘图流程整合进一个直观易用的图形化平台。\n\n无论是希望快速上手的普通创作者、需要精细控制画面细节的设计师，还是想要深入探索模型潜力的开发者与研究人员，都能从中获益。其核心亮点在于极高的功能丰富度：不仅支持文生图、图生图、局部重绘（Inpainting）和外绘（Outpainting）等基础模式，还独创了注意力机制调整、提示词矩阵、负向提示词以及“高清修复”等高级功能。此外，它内置了 GFPGAN 和 CodeFormer 等人脸修复工具，支持多种神经网络放大算法，并允许用户通过插件系统无限扩展能力。即使是显存有限的设备，stable-diffusion-webui 也提供了相应的优化选项，让高质量的 AI 艺术创作变得触手可及。",162132,"2026-04-05T11:01:52",[14,15,13],{"id":27,"name":28,"github_repo":29,"description_zh":30,"stars":31,"difficulty_score":32,"last_commit_at":33,"category_tags":34,"status":17},1381,"everything-claude-code","affaan-m\u002Feverything-claude-code","everything-claude-code 是一套专为 AI 编程助手（如 Claude Code、Codex、Cursor 等）打造的高性能优化系统。它不仅仅是一组配置文件，而是一个经过长期实战打磨的完整框架，旨在解决 AI 代理在实际开发中面临的效率低下、记忆丢失、安全隐患及缺乏持续学习能力等核心痛点。\n\n通过引入技能模块化、直觉增强、记忆持久化机制以及内置的安全扫描功能，everything-claude-code 能显著提升 AI 在复杂任务中的表现，帮助开发者构建更稳定、更智能的生产级 AI 代理。其独特的“研究优先”开发理念和针对 Token 消耗的优化策略，使得模型响应更快、成本更低，同时有效防御潜在的攻击向量。\n\n这套工具特别适合软件开发者、AI 研究人员以及希望深度定制 AI 工作流的技术团队使用。无论您是在构建大型代码库，还是需要 AI 协助进行安全审计与自动化测试，everything-claude-code 都能提供强大的底层支持。作为一个曾荣获 Anthropic 黑客大奖的开源项目，它融合了多语言支持与丰富的实战钩子（hooks），让 AI 真正成长为懂上",148568,2,"2026-04-09T23:34:24",[14,13,35],"语言模型",{"id":37,"name":38,"github_repo":39,"description_zh":40,"stars":41,"difficulty_score":32,"last_commit_at":42,"category_tags":43,"status":17},2271,"ComfyUI","Comfy-Org\u002FComfyUI","ComfyUI 是一款功能强大且高度模块化的视觉 AI 引擎，专为设计和执行复杂的 Stable Diffusion 图像生成流程而打造。它摒弃了传统的代码编写模式，采用直观的节点式流程图界面，让用户通过连接不同的功能模块即可构建个性化的生成管线。\n\n这一设计巧妙解决了高级 AI 绘图工作流配置复杂、灵活性不足的痛点。用户无需具备编程背景，也能自由组合模型、调整参数并实时预览效果，轻松实现从基础文生图到多步骤高清修复等各类复杂任务。ComfyUI 拥有极佳的兼容性，不仅支持 Windows、macOS 和 Linux 全平台，还广泛适配 NVIDIA、AMD、Intel 及苹果 Silicon 等多种硬件架构，并率先支持 SDXL、Flux、SD3 等前沿模型。\n\n无论是希望深入探索算法潜力的研究人员和开发者，还是追求极致创作自由度的设计师与资深 AI 绘画爱好者，ComfyUI 都能提供强大的支持。其独特的模块化架构允许社区不断扩展新功能，使其成为当前最灵活、生态最丰富的开源扩散模型工具之一，帮助用户将创意高效转化为现实。",108111,"2026-04-08T11:23:26",[14,15,13],{"id":45,"name":46,"github_repo":47,"description_zh":48,"stars":49,"difficulty_score":10,"last_commit_at":50,"category_tags":51,"status":17},4487,"LLMs-from-scratch","rasbt\u002FLLMs-from-scratch","LLMs-from-scratch 是一个基于 PyTorch 的开源教育项目，旨在引导用户从零开始一步步构建一个类似 ChatGPT 的大型语言模型（LLM）。它不仅是同名技术著作的官方代码库，更提供了一套完整的实践方案，涵盖模型开发、预训练及微调的全过程。\n\n该项目主要解决了大模型领域“黑盒化”的学习痛点。许多开发者虽能调用现成模型，却难以深入理解其内部架构与训练机制。通过亲手编写每一行核心代码，用户能够透彻掌握 Transformer 架构、注意力机制等关键原理，从而真正理解大模型是如何“思考”的。此外，项目还包含了加载大型预训练权重进行微调的代码，帮助用户将理论知识延伸至实际应用。\n\nLLMs-from-scratch 特别适合希望深入底层原理的 AI 开发者、研究人员以及计算机专业的学生。对于不满足于仅使用 API，而是渴望探究模型构建细节的技术人员而言，这是极佳的学习资源。其独特的技术亮点在于“循序渐进”的教学设计：将复杂的系统工程拆解为清晰的步骤，配合详细的图表与示例，让构建一个虽小但功能完备的大模型变得触手可及。无论你是想夯实理论基础，还是为未来研发更大规模的模型做准备",90106,"2026-04-06T11:19:32",[35,15,13,14],{"id":53,"name":54,"github_repo":55,"description_zh":56,"stars":57,"difficulty_score":10,"last_commit_at":58,"category_tags":59,"status":17},4292,"Deep-Live-Cam","hacksider\u002FDeep-Live-Cam","Deep-Live-Cam 是一款专注于实时换脸与视频生成的开源工具，用户仅需一张静态照片，即可通过“一键操作”实现摄像头画面的即时变脸或制作深度伪造视频。它有效解决了传统换脸技术流程繁琐、对硬件配置要求极高以及难以实时预览的痛点，让高质量的数字内容创作变得触手可及。\n\n这款工具不仅适合开发者和技术研究人员探索算法边界，更因其极简的操作逻辑（仅需三步：选脸、选摄像头、启动），广泛适用于普通用户、内容创作者、设计师及直播主播。无论是为了动画角色定制、服装展示模特替换，还是制作趣味短视频和直播互动，Deep-Live-Cam 都能提供流畅的支持。\n\n其核心技术亮点在于强大的实时处理能力，支持口型遮罩（Mouth Mask）以保留使用者原始的嘴部动作，确保表情自然精准；同时具备“人脸映射”功能，可同时对画面中的多个主体应用不同面孔。此外，项目内置了严格的内容安全过滤机制，自动拦截涉及裸露、暴力等不当素材，并倡导用户在获得授权及明确标注的前提下合规使用，体现了技术发展与伦理责任的平衡。",88924,"2026-04-06T03:28:53",[14,15,13,60],"视频",{"id":62,"github_repo":63,"name":64,"description_en":65,"description_zh":66,"ai_summary_zh":66,"readme_en":67,"readme_zh":68,"quickstart_zh":69,"use_case_zh":70,"hero_image_url":71,"owner_login":72,"owner_name":73,"owner_avatar_url":74,"owner_bio":75,"owner_company":76,"owner_location":76,"owner_email":77,"owner_twitter":76,"owner_website":78,"owner_url":79,"languages":80,"stars":85,"forks":86,"last_commit_at":87,"license":88,"difficulty_score":32,"env_os":89,"env_gpu":90,"env_ram":90,"env_deps":91,"category_tags":103,"github_topics":104,"view_count":32,"oss_zip_url":76,"oss_zip_packed_at":76,"status":17,"created_at":112,"updated_at":113,"faqs":114,"releases":145},6028,"flyerhq\u002Fflutter_chat_ui","flutter_chat_ui","Free and open-source chat SDK. Build fast, real-time apps and generative AI agents with a high-performance, customizable, cross-platform UI.","flutter_chat_ui 是一款专为 Flutter 开发者打造的开源聊天界面 SDK，旨在帮助团队快速构建高性能、可定制的跨平台即时通讯应用及生成式 AI 智能体。它解决了从零开发聊天功能时面临的 UI 适配复杂、多端兼容性差以及流式消息处理困难等痛点，让开发者无需重复造轮子即可拥有专业的对话体验。\n\n该工具特别适合需要集成聊天功能的移动应用开发者、AI 产品经理以及希望快速验证原型的初创团队。其核心亮点在于“后端无关”的设计，允许灵活对接任意后端服务；同时具备极高的模块化程度，开发者可以像搭积木一样自由选择或替换文本、图片、文件乃至系统消息等组件。针对当下流行的 AI 场景，它原生支持带打字机效果的流式文本渲染和 Markdown 格式，完美契合大模型助手的需求。此外，flutter_chat_ui 全面覆盖 iOS、Android、Web 及桌面端，并提供丰富的主题定制选项，确保在保持流畅动画性能的同时，也能轻松匹配各类品牌风格。作为基于 Apache 2.0 协议开源的项目，它为构建现代化聊天应用提供了坚实且免费的基础设施。","# [Flyer Chat](https:\u002F\u002Fflyer.chat) 💬\n\n[![Ship faster with a go-to chat SDK for Flutter](https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fflyerhq_flutter_chat_ui_readme_741c2b186945.png)](https:\u002F\u002Fflyer.chat\u002Fdocs\u002Fflutter\u002Fintroduction\u002F)\n\n[![Pub Version](https:\u002F\u002Fimg.shields.io\u002Fpub\u002Fv\u002Fflutter_chat_ui?logo=flutter&color=orange)](https:\u002F\u002Fpub.dev\u002Fpackages\u002Fflutter_chat_ui) [![Pub Likes](https:\u002F\u002Fimg.shields.io\u002Fpub\u002Flikes\u002Fflutter_chat_ui?logo=flutter&color=orange&label=pub%20likes)](https:\u002F\u002Fpub.dev\u002Fpackages\u002Fflutter_chat_ui) [![Stars](https:\u002F\u002Fimg.shields.io\u002Fgithub\u002Fstars\u002Fflyerhq\u002Fflutter_chat_ui?style=flat&color=orange&logo=github)](https:\u002F\u002Fgithub.com\u002Fflyerhq\u002Fflutter_chat_ui\u002Fstargazers) [![melos](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002Fmaintained%20with-melos-ffffff.svg?color=orange)](https:\u002F\u002Fgithub.com\u002Finvertase\u002Fmelos)\n\nFlyer Chat is an open-source chat UI package for Flutter applications, designed for performance, customization, and ease of integration.\n\n## ✨ Features\n\n- 🔄 **Backend-agnostic**: Connect to any backend service.\n- 🧬 **Adaptable**: Perfect for real-time messengers, generative AI agents and LLM-based assistants, support platforms, and beyond.\n- 🎨 **Highly Customizable**: Tailor the UI with extensive theme options and builder functions.\n- 🧩 **Modular**: Pick and choose the features you want. You can change any part of the UI or swap it with your own custom implementation.\n- ⚡ **Performance Optimized**: Built for speed and smooth animations.\n- 🌐 **Cross-Platform**: Supports iOS, Android, Web, macOS, Windows, and Linux.\n- 📜 **Open Source**: Free to use under the Apache 2.0 License.\n\n## 🚀 Installation\n\nAdd the package to your `pubspec.yaml`:\n\n```yaml\ndependencies:\n  flutter_chat_core: ^2.0.0\n  flutter_chat_ui: ^2.0.0\n```\n\nThen, import and use the `Chat` widget.\n\n## 📚 Documentation & Examples\n\nFor detailed usage, customization options, different message types, controllers, and more complex scenarios, please refer to the **full documentation**:\n\n➡️ **[flyer.chat\u002Fdocs\u002Fflutter\u002Fintroduction](https:\u002F\u002Fflyer.chat\u002Fdocs\u002Fflutter\u002Fintroduction)** ⬅️\n\nExplore the comprehensive [example application](https:\u002F\u002Fgithub.com\u002Fflyerhq\u002Fflutter_chat_ui\u002Ftree\u002Fmain\u002Fexamples\u002Fflyer_chat) to see various features and customizations in action.\n\n## 📦 Packages\n\nThe project is structured as a monorepo managed by [Melos](https:\u002F\u002Fmelos.invertase.dev\u002F) 💙.\n\n### Core Packages\n\nThese are the foundational packages included when you install `flutter_chat_ui`:\n\n- [`flutter_chat_ui`](https:\u002F\u002Fgithub.com\u002Fflyerhq\u002Fflutter_chat_ui\u002Ftree\u002Fmain\u002Fpackages\u002Fflutter_chat_ui): The main UI package.\n- [`flutter_chat_core`](https:\u002F\u002Fgithub.com\u002Fflyerhq\u002Fflutter_chat_ui\u002Ftree\u002Fmain\u002Fpackages\u002Fflutter_chat_core): Contains core models, controllers, theming, and utilities used across the ecosystem.\n- [`cross_cache`](https:\u002F\u002Fgithub.com\u002Fflyerhq\u002Fflutter_chat_ui\u002Ftree\u002Fmain\u002Fpackages\u002Fcross_cache): Provides a cross-platform (IO & Web) image caching solution.\n\n### Optional Message Widget Packages\n\nOpinionated packages for rendering different message types. You can also build your own!\n\n- [`flyer_chat_text_message`](https:\u002F\u002Fgithub.com\u002Fflyerhq\u002Fflutter_chat_ui\u002Ftree\u002Fmain\u002Fpackages\u002Fflyer_chat_text_message): Renders text messages with markdown support.\n- [`flyer_chat_text_stream_message`](https:\u002F\u002Fgithub.com\u002Fflyerhq\u002Fflutter_chat_ui\u002Ftree\u002Fmain\u002Fpackages\u002Fflyer_chat_text_stream_message): Renders streamed text messages with markdown and fade-in animation support.\n- [`flyer_chat_image_message`](https:\u002F\u002Fgithub.com\u002Fflyerhq\u002Fflutter_chat_ui\u002Ftree\u002Fmain\u002Fpackages\u002Fflyer_chat_image_message): Renders image messages.\n- [`flyer_chat_file_message`](https:\u002F\u002Fgithub.com\u002Fflyerhq\u002Fflutter_chat_ui\u002Ftree\u002Fmain\u002Fpackages\u002Fflyer_chat_file_message): Renders file messages.\n- [`flyer_chat_system_message`](https:\u002F\u002Fgithub.com\u002Fflyerhq\u002Fflutter_chat_ui\u002Ftree\u002Fmain\u002Fpackages\u002Fflyer_chat_system_message): Renders system messages (e.g., user joined).\n\n## 🤝 Contributing\n\nContributions are welcome! Please see [CONTRIBUTING.md](https:\u002F\u002Fgithub.com\u002Fflyerhq\u002Fflutter_chat_ui\u002Fblob\u002Fmain\u002FCONTRIBUTING.md) for guidelines on how to contribute.\n\n## 📜 License\n\nLicensed under the Apache License, Version 2.0. See the [LICENSE](https:\u002F\u002Fgithub.com\u002Fflyerhq\u002Fflutter_chat_ui\u002Fblob\u002Fmain\u002FLICENSE) file for details.\n","# [Flyer Chat](https:\u002F\u002Fflyer.chat) 💬\n\n[![使用适用于 Flutter 的即用型聊天 SDK 加速开发](https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fflyerhq_flutter_chat_ui_readme_741c2b186945.png)](https:\u002F\u002Fflyer.chat\u002Fdocs\u002Fflutter\u002Fintroduction\u002F)\n\n[![Pub 版本](https:\u002F\u002Fimg.shields.io\u002Fpub\u002Fv\u002Fflutter_chat_ui?logo=flutter&color=orange)](https:\u002F\u002Fpub.dev\u002Fpackages\u002Fflutter_chat_ui) [![Pub 点赞数](https:\u002F\u002Fimg.shields.io\u002Fpub\u002Flikes\u002Fflutter_chat_ui?logo=flutter&color=orange&label=pub%20likes)](https:\u002F\u002Fpub.dev\u002Fpackages\u002Fflutter_chat_ui) [![GitHub 星标](https:\u002F\u002Fimg.shields.io\u002Fgithub\u002Fstars\u002Fflyerhq\u002Fflutter_chat_ui?style=flat&color=orange&logo=github)](https:\u002F\u002Fgithub.com\u002Fflyerhq\u002Fflutter_chat_ui\u002Fstargazers) [![melos](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002Fmaintained%20with-melos-ffffff.svg?color=orange)](https:\u002F\u002Fgithub.com\u002Finvertase\u002Fmelos)\n\nFlyer Chat 是一个面向 Flutter 应用的开源聊天 UI 包，专为高性能、可定制性和易集成而设计。\n\n## ✨ 特性\n\n- 🔄 **后端无关**：可连接任何后端服务。\n- 🧬 **适应性强**：非常适合实时消息应用、生成式 AI 助手和基于 LLM 的助手、客服平台等场景。\n- 🎨 **高度可定制**：通过丰富的主题选项和构建器函数自定义 UI。\n- 🧩 **模块化**：按需选择所需功能。您可以更改 UI 的任何部分，或将其替换为自己的自定义实现。\n- ⚡ **性能优化**：专为快速响应和流畅动画打造。\n- 🌐 **跨平台**：支持 iOS、Android、Web、macOS、Windows 和 Linux。\n- 📜 **开源**：在 Apache 2.0 许可下免费使用。\n\n## 🚀 安装\n\n将该包添加到您的 `pubspec.yaml` 文件中：\n\n```yaml\ndependencies:\n  flutter_chat_core: ^2.0.0\n  flutter_chat_ui: ^2.0.0\n```\n\n然后导入并使用 `Chat` 小部件。\n\n## 📚 文档与示例\n\n有关详细用法、自定义选项、不同消息类型、控制器以及更复杂场景的说明，请参阅**完整文档**：\n\n➡️ **[flyer.chat\u002Fdocs\u002Fflutter\u002Fintroduction](https:\u002F\u002Fflyer.chat\u002Fdocs\u002Fflutter\u002Fintroduction)** ⬅️\n\n您还可以探索全面的[示例应用](https:\u002F\u002Fgithub.com\u002Fflyerhq\u002Fflutter_chat_ui\u002Ftree\u002Fmain\u002Fexamples\u002Fflyer_chat)，以了解各种功能和自定义效果的实际应用。\n\n## 📦 包结构\n\n该项目采用由 [Melos](https:\u002F\u002Fmelos.invertase.dev\u002F) 管理的单仓库多包结构 💙。\n\n### 核心包\n\n这些是安装 `flutter_chat_ui` 时包含的基础包：\n\n- [`flutter_chat_ui`](https:\u002F\u002Fgithub.com\u002Fflyerhq\u002Fflutter_chat_ui\u002Ftree\u002Fmain\u002Fpackages\u002Fflutter_chat_ui)：主 UI 包。\n- [`flutter_chat_core`](https:\u002F\u002Fgithub.com\u002Fflyerhq\u002Fflutter_chat_ui\u002Ftree\u002Fmain\u002Fpackages\u002Fflutter_chat_core)：包含核心模型、控制器、主题设置及整个生态中使用的工具类。\n- [`cross_cache`](https:\u002F\u002Fgithub.com\u002Fflyerhq\u002Fflutter_chat_ui\u002Ftree\u002Fmain\u002Fpackages\u002Fcross_cache)：提供跨平台（IO 和 Web）的图片缓存解决方案。\n\n### 可选消息组件包\n\n用于渲染不同类型消息的意见型包。您也可以自行构建！\n\n- [`flyer_chat_text_message`](https:\u002F\u002Fgithub.com\u002Fflyerhq\u002Fflutter_chat_ui\u002Ftree\u002Fmain\u002Fpackages\u002Fflyer_chat_text_message)：渲染支持 Markdown 的文本消息。\n- [`flyer_chat_text_stream_message`](https:\u002F\u002Fgithub.com\u002Fflyerhq\u002Fflutter_chat_ui\u002Ftree\u002Fmain\u002Fpackages\u002Fflyer_chat_text_stream_message)：渲染支持 Markdown 和淡入动画的流式文本消息。\n- [`flyer_chat_image_message`](https:\u002F\u002Fgithub.com\u002Fflyerhq\u002Fflutter_chat_ui\u002Ftree\u002Fmain\u002Fpackages\u002Fflyer_chat_image_message)：渲染图片消息。\n- [`flyer_chat_file_message`](https:\u002F\u002Fgithub.com\u002Fflyerhq\u002Fflutter_chat_ui\u002Ftree\u002Fmain\u002Fpackages\u002Fflyer_chat_file_message)：渲染文件消息。\n- [`flyer_chat_system_message`](https:\u002F\u002Fgithub.com\u002Fflyerhq\u002Fflutter_chat_ui\u002Ftree\u002Fmain\u002Fpackages\u002Fflyer_chat_system_message)：渲染系统消息（例如“用户加入”）。\n\n## 🤝 贡献\n\n欢迎贡献！请参阅 [CONTRIBUTING.md](https:\u002F\u002Fgithub.com\u002Fflyerhq\u002Fflutter_chat_ui\u002Fblob\u002Fmain\u002FCONTRIBUTING.md)，了解如何参与贡献的指南。\n\n## 📜 许可证\n\n根据 Apache License, Version 2.0 许可。详细信息请参阅 [LICENSE](https:\u002F\u002Fgithub.com\u002Fflyerhq\u002Fflutter_chat_ui\u002Fblob\u002Fmain\u002FLICENSE) 文件。","# Flutter Chat UI 快速上手指南\n\nFlyer Chat 是一个专为 Flutter 应用打造的开源聊天 UI 组件库，具有高性能、高度可定制和易于集成的特点。它不依赖特定后端，适用于即时通讯、AI 助手、客服系统等多种场景，支持 iOS、Android、Web 及桌面端全平台。\n\n## 环境准备\n\n在开始之前，请确保您的开发环境满足以下要求：\n\n- **Flutter SDK**: 建议安装最新稳定版（可通过 `flutter upgrade` 更新）。\n- **Dart SDK**: 随 Flutter 自动安装，需保持版本兼容。\n- **IDE**: 推荐 VS Code 或 Android Studio，并安装 Flutter 插件。\n- **前置依赖**: 本项目采用 Monorepo 结构，核心功能依赖 `flutter_chat_core`，安装主包时会自动处理。\n\n> 💡 **国内加速建议**：若拉取依赖较慢，可配置 Dart \u002Fpub 国内镜像源。\n> 在终端执行以下命令（以清华大学镜像为例）：\n> ```bash\n> export PUB_HOSTED_URL=https:\u002F\u002Fpub.flutter-io.cn\n> export FLUTTER_STORAGE_BASE_URL=https:\u002F\u002Fstorage.flutter-io.cn\n> ```\n> *(Windows PowerShell 用户请使用 `$env:PUB_HOSTED_URL=\"...\"`)*\n\n## 安装步骤\n\n1. 打开项目的 `pubspec.yaml` 文件。\n2. 在 `dependencies` 部分添加以下依赖：\n\n```yaml\ndependencies:\n  flutter_chat_core: ^2.0.0\n  flutter_chat_ui: ^2.0.0\n```\n\n3. 保存文件并在终端运行以下命令安装依赖：\n\n```bash\nflutter pub get\n```\n\n## 基本使用\n\n安装完成后，即可在代码中导入并使用 `Chat`  widget。以下是一个最简化的使用示例：\n\n```dart\nimport 'package:flutter\u002Fmaterial.dart';\nimport 'package:flutter_chat_ui\u002Fflutter_chat_ui.dart';\nimport 'package:flutter_chat_core\u002Fflutter_chat_core.dart';\n\nvoid main() => runApp(const MyApp());\n\nclass MyApp extends StatelessWidget {\n  const MyApp({super.key});\n\n  @override\n  Widget build(BuildContext context) {\n    return MaterialApp(\n      home: Scaffold(\n        appBar: AppBar(title: const Text('Flyer Chat Demo')),\n        body: Chat(\n          messages: const [], \u002F\u002F 初始消息列表\n          onSendPressed: (PartialText message) {\n            \u002F\u002F 处理发送逻辑，将消息添加到列表中\n            print('发送消息：${message.text}');\n          },\n          user: const User(id: 'current-user-id'), \u002F\u002F 当前用户信息\n        ),\n      ),\n    );\n  }\n}\n```\n\n**关键点说明：**\n- `messages`: 传入聊天消息列表（类型为 `List\u003CMessage>`）。\n- `onSendPressed`: 当用户点击发送按钮时触发的回调，需在此处更新消息状态。\n- `user`: 定义当前登录用户的身份信息。\n\n更多高级用法（如自定义主题、流式消息、文件图片消息等），请参考 [官方完整文档](https:\u002F\u002Fflyer.chat\u002Fdocs\u002Fflutter\u002Fintroduction) 或查看 GitHub 上的 [示例应用](https:\u002F\u002Fgithub.com\u002Fflyerhq\u002Fflutter_chat_ui\u002Ftree\u002Fmain\u002Fexamples\u002Fflyer_chat)。","一家初创团队正在开发一款跨平台的 AI 心理咨询助手，需要快速构建支持文字流式输出、图片分享及多端同步的聊天界面。\n\n### 没有 flutter_chat_ui 时\n- **重复造轮子耗时久**：团队需从零编写消息气泡、输入框及列表滚动逻辑，仅基础 UI 就耗费了两周开发时间。\n- **流式响应体验差**：实现类似大模型的“打字机”效果极其复杂，难以处理 Markdown 渲染与动画流畅度的平衡。\n- **多端适配成本高**：在 iOS、Android 和 Web 端分别调整布局细节，导致代码冗余且维护困难。\n- **扩展功能受限**：想要增加文件发送或系统提示消息时，需大幅重构现有代码结构，风险极高。\n\n### 使用 flutter_chat_ui 后\n- **集成速度显著提升**：直接引入 `Chat` 组件，半天内即可搭建出包含文本、图片及系统消息的专业聊天界面。\n- **原生支持流式交互**：利用 `flyer_chat_text_stream_message` 包，轻松实现带淡入动画的 Markdown 流式回复，用户体验丝滑。\n- **一次编写多端运行**：凭借跨平台特性，同一套代码完美适配手机、网页及桌面端，无需额外适配工作。\n- **模块化灵活定制**：通过替换默认的消息 Widget 或调整主题配置，快速实现了符合品牌风格的个性化界面。\n\nflutter_chat_ui 让开发者从繁琐的 UI 细节中解放出来，专注于核心业务逻辑与 AI 代理能力的构建。","https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fflyerhq_flutter_chat_ui_77169cda.png","flyerhq","Flyer Chat","https:\u002F\u002Foss.gittoolsai.com\u002Favatars\u002Fflyerhq_26c2039b.png","Ship faster with a go-to chat SDK",null,"hello@flyer.chat","https:\u002F\u002Fflyer.chat","https:\u002F\u002Fgithub.com\u002Fflyerhq",[81],{"name":82,"color":83,"percentage":84},"Dart","#00B4AB",100,2261,848,"2026-04-09T10:35:12","Apache-2.0","iOS, Android, Web, macOS, Windows, Linux","未说明",{"notes":92,"python":93,"dependencies":94},"这是一个 Flutter UI 组件库，非独立运行的 AI 模型，因此无特定 GPU、内存或 Python 版本要求。需配合 Flutter 开发环境使用，后端服务可任意连接（与后端无关）。项目由 Melos 管理，包含核心包及多个可选的消息类型渲染包。","不适用 (基于 Flutter\u002FDart)",[95,96,97,98,99,100,101,102],"flutter_chat_core ^2.0.0","flutter_chat_ui ^2.0.0","flyer_chat_text_message","flyer_chat_text_stream_message","flyer_chat_image_message","flyer_chat_file_message","flyer_chat_system_message","cross_cache",[35,15],[105,106,107,108,109,110,111],"flutter","chat","ui","widget","dart","android","ios","2026-03-27T02:49:30.150509","2026-04-10T07:45:00.338834",[115,120,125,130,135,140],{"id":116,"question_zh":117,"answer_zh":118,"source_url":119},27299,"如何发送音频消息？该功能是否支持？","目前核心包中尚未直接内置音频消息功能，但可以通过自定义实现。维护者建议在 v2 版本中将更好地支持此类扩展。你可以参考以下步骤自行实现：\n1. 创建一个 `AudioMessage` 类，包含 `audioUrl`、`duration` 等属性。\n2. 构建一个 `AudioMessageWidget` 用于展示音频消息（包含播放按钮、时长显示等）。\n3. 参考第三方库如 `audio_waveforms` (https:\u002F\u002Fgithub.com\u002FSimformSolutionsPvtLtd\u002Faudio_waveforms) 来辅助开发。\n社区成员已提供部分代码示例，可在此基础上进行定制开发。","https:\u002F\u002Fgithub.com\u002Fflyerhq\u002Fflutter_chat_ui\u002Fissues\u002F189",{"id":121,"question_zh":122,"answer_zh":123,"source_url":124},27300,"如何在输入框上方显示“回复某条消息”的预览区域？","该功能未默认内置，但可以通过自定义 Widget 实现。社区用户分享了一个开源实现方案：\n- 参考项目：https:\u002F\u002Fgithub.com\u002Fimboy-pub\u002Fimboy-flutter\u002Fblob\u002Fmain\u002Flib\u002Fcomponent\u002Fmessage\u002Fmessage_quote_builder.dart\n- 该实现展示了如何在输入框上方渲染被回复的消息内容（包含引用样式）。\n你可以借鉴其逻辑，结合 `ChatInput` 的 `prefix` 或自定义 `InputDecoration` 来实现类似效果。","https:\u002F\u002Fgithub.com\u002Fflyerhq\u002Fflutter_chat_ui\u002Fissues\u002F466",{"id":126,"question_zh":127,"answer_zh":128,"source_url":129},27301,"v2 版本相比 v1 有哪些主要变化和新增功能？","v2 版本进行了架构重构，主要更新包括：\n- **核心功能**：支持 Markdown 文本、图片消息（含 Thumbhash\u002FBlurhash 缩略图）、文件消息、纯表情消息。\n- **架构优化**：采用模块化设计，核心更轻量，消息类型可作为可选包引入；提供完整的 `ChatController` 管理聊天状态。\n- **UI\u002FUX**：支持正向\u002F反向滚动列表、自动滚动到底部、丰富的主题定制（基于 `ThemeData` 或 Builder 模式）、自动切换深色\u002F浅色模式。\n- **集成示例**：包含 REST API 集成、Gemini AI 聊天、本地存储（Sembast\u002FHive）示例。\n- **移除特性**：本地化支持已移出核心，改为由使用者自行传入翻译文本。\n详细进展和发布公告可查看：https:\u002F\u002Fflyer.chat\u002Fblog\u002Fv2-announcement\u002F","https:\u002F\u002Fgithub.com\u002Fflyerhq\u002Fflutter_chat_ui\u002Fissues\u002F646",{"id":131,"question_zh":132,"answer_zh":133,"source_url":134},27302,"升级到 2.2.0 后聊天动画出现异常或崩溃，如何解决？","此问题通常与消息列表参数传递有关。在 2.2.0 版本中，某些参数行为发生了变化：\n- 如果之前传递了 `null` 作为消息列表，现在可能被解释为空列表或导致异常。\n- 解决方案：确保传递给聊天 Widget 的消息列表参数不为 `null`。如果无消息，请显式传递一个空列表 `[]`。\n- 维护者表示可能会在未来版本将该参数设为必填（required）以避免混淆。\n检查你的代码中是否依赖了旧版本的隐式 fallback 行为（如自动回退到 `chatController.messages`），并显式处理空状态。","https:\u002F\u002Fgithub.com\u002Fflyerhq\u002Fflutter_chat_ui\u002Fissues\u002F783",{"id":136,"question_zh":137,"answer_zh":138,"source_url":139},27303,"Chat 组件在无操作时持续渲染帧，导致手机发热和耗电快，如何优化？","这是一个已知的性能问题，通常由不必要的重绘引起。虽然具体修复取决于版本，但你可以尝试以下优化措施：\n1. **检查列表构建器**：确保使用 `ListView.builder` 而非固定列表，以减少离屏渲染。\n2. **避免状态频繁更新**：检查是否有定时器或流（Stream）在后台不断触发 `setState`，即使 UI 没有变化。\n3. **升级版本**：该问题在后续版本（特别是 v2）的架构重构中得到了重点优化，采用了更高效的渲染策略。\n4. **禁用不必要的动画**：如果不需要复杂的入场动画，尝试简化或关闭相关动画效果。\n建议升级到最新稳定版以获取最新的性能修复。","https:\u002F\u002Fgithub.com\u002Fflyerhq\u002Fflutter_chat_ui\u002Fissues\u002F449",{"id":141,"question_zh":142,"answer_zh":143,"source_url":144},27304,"v1.1 版本带来了哪些重要更新？","v1.1 是一次重大更新，主要包含以下功能：\n- **动画聊天 UI**：引入了流畅的消息进出场动画。\n- **日期分隔符更新**：优化了时间戳和日期分割线的显示样式。\n- **消息状态增强**：更新了消息送达\u002F阅读状态的图标和逻辑。\n- **用户信息展示**：支持在消息旁显示用户名和头像。\n- **分页加载**：原生支持消息列表的分页加载（Pagination），解决了长列表性能瓶颈。\n注意：此次更新涉及较大的底层重构，属于破坏性更新（Breaking Change），升级时需参考迁移指南。","https:\u002F\u002Fgithub.com\u002Fflyerhq\u002Fflutter_chat_ui\u002Fissues\u002F24",[146,151,156,161,166,171,176,181,186,191,196,201,206,211,216,221,226,231,236,241],{"id":147,"version":148,"summary_zh":149,"released_at":150},180440,"v2.11.0","- **修复**: 在 ChatMessage 组件中处理消息手势回调的空值检查 ([#861](https:\u002F\u002Fgithub.com\u002Fflyerhq\u002Fflutter_chat_ui\u002Fissues\u002F861))。([0a7fe3dd](https:\u002F\u002Fgithub.com\u002Fflyerhq\u002Fflutter_chat_ui\u002Fcommit\u002F0a7fe3dd61ab6310c45774cc28103611df1dd3d3))\n- **修复**: 为 onMessageTap、onMessageDoubleTap 和 onMessageLongPress 的命名参数添加 required 修饰符。([8509a1b2](https:\u002F\u002Fgithub.com\u002Fflyerhq\u002Fflutter_chat_ui\u002Fcommit\u002F8509a1b2583a7fd1c5b3e3e9f81c38898f9e9cb2))\n- **功能**: 为消息编写器添加 sendOnEnter 参数。([98ece404](https:\u002F\u002Fgithub.com\u002Fflyerhq\u002Fflutter_chat_ui\u002Fcommit\u002F98ece404dd17f530fdc6bb9a5e7c260c17921751))\n- **功能**: 添加 onMessageSecondaryTap 回调。([fcca65a5](https:\u002F\u002Fgithub.com\u002Fflyerhq\u002Fflutter_chat_ui\u002Fcommit\u002Ffcca65a500bdb73bfbce8d2c327f67d67e2df10e))\n- **功能**: headerWidget 应忽略水平方向的内边距。([14ca1b2d](https:\u002F\u002Fgithub.com\u002Fflyerhq\u002Fflutter_chat_ui\u002Fcommit\u002F14ca1b2d023f81c4e865c33022d7f01ec9a4952e))","2025-12-06T23:50:22",{"id":152,"version":153,"summary_zh":154,"released_at":155},180441,"v2.10.0","更新依赖至最新版本，要求 Dart 最低版本为 3.8，Flutter 最低版本为 3.32。将单仓库迁移到 pub 工作区。\n\n## 2.9.2\n\n- **修复**：发送新消息后重新构建聊天消息。([a17f3162](https:\u002F\u002Fgithub.com\u002Fflyerhq\u002Fflutter_chat_ui\u002Fcommit\u002Fa17f3162b118b7d539486c5a15c14e2fa9b9a464))\n\n## 2.9.1\n\n- **修复**：在 cross_cache 中添加 dart.library.js_interop 情况，以支持 --wasm ([#847](https:\u002F\u002Fgithub.com\u002Fflyerhq\u002Fflutter_chat_ui\u002Fissues\u002F847))。([3650bc75](https:\u002F\u002Fgithub.com\u002Fflyerhq\u002Fflutter_chat_ui\u002Fcommit\u002F3650bc75cd0ae17be720a178245cedbf2aab7dbc))\n\n- **修复**：向 Composer 组件添加内容插入配置 ([#852](https:\u002F\u002Fgithub.com\u002Fflyerhq\u002Fflutter_chat_ui\u002Fissues\u002F852))。([6b5f6afc](https:\u002F\u002Fgithub.com\u002Fflyerhq\u002Fflutter_chat_ui\u002Fcommit\u002F6b5f6afcd55054b79c31d950be63c2a4583f8128))\n\n- **修复**：添加对 linksDecoration、sentLinksDecorationColor 和 receivedLinksDecorationColor 的支持。([b5b9e906](https:\u002F\u002Fgithub.com\u002Fflyerhq\u002Fflutter_chat_ui\u002Fcommit\u002Fb5b9e906fc94fc0b22b72a12eb3d71860e301323))\n\n- **修复**：链接颜色问题 ([#858](https:\u002F\u002Fgithub.com\u002Fflyerhq\u002Fflutter_chat_ui\u002Fissues\u002F858))。([bb9f814d](https:\u002F\u002Fgithub.com\u002Fflyerhq\u002Fflutter_chat_ui\u002Fcommit\u002Fbb9f814d8d7f6a0ff03b4788f892eec23c4bbb88))","2025-12-06T22:45:26",{"id":157,"version":158,"summary_zh":159,"released_at":160},180442,"v2.9.0","此版本引入了双向分页功能。现在，您可以使用新的 `onStartReached` 回调加载较新的消息，而 `onEndReached` 仍可用于加载较旧的消息。为了使分页正常工作，消息应立即插入，且不带动画效果。\n\n为实现这一功能并提供更精细的控制，所有控制器操作（除 `update` 外）都新增了一个可选的 `animated` 参数。这并非破坏性变更，但如果您希望使用该参数，可以按如下方式更新您的控制器代码：\n```dart\ninsertMessage(Message message, {int? index}) \u002F\u002F ❌\ninsertMessage(Message message, {int? index, bool animated = true}) \u002F\u002F ✅\nChatOperation.insert(..., animated: animated) \u002F\u002F 在插入操作中添加 animated\n\ninsertAllMessages(List\u003CMessage> messages, {int? index}) \u002F\u002F ❌\ninsertAllMessages(List\u003CMessage> messages, {int? index, bool animated = true}) \u002F\u002F ✅\nChatOperation.insertAll(..., animated: animated) \u002F\u002F 在 insertAll 操作中添加 animated\n\nremoveMessage(Message message) \u002F\u002F ❌\nremoveMessage(Message message, {bool animated = true}) \u002F\u002F ✅\nChatOperation.remove(..., animated: animated) \u002F\u002F 在移除操作中添加 animated\n\nsetMessages(List\u003CMessage> messages) \u002F\u002F ❌\nsetMessages(List\u003CMessage> messages, {bool animated = true}) \u002F\u002F ✅\nChatOperation.set(..., animated: animated) \u002F\u002F 在设置操作中添加 animated\n```\n\n作为一项可选改进，您还可以使用此参数在清空聊天时禁用动画效果，目前示例应用中已将其设为默认行为。\n```dart\nChatOperation.set(messages, animated: messages.isEmpty ? false : animated) \u002F\u002F 在控制器内部\n```\n\n⚠️ 存在一个小的潜在破坏性变更：`LoadMoreNotifier` 已针对双向加载进行了更新。如果您曾使用自定义的 **LoadMore** 组件，并借助 `LoadMoreNotifier` 来测量其高度，那么这部分逻辑已被移除，因为实际上并未被使用。此外，内部属性 `_isLoading` 现已更名为 `_isLoadingOlder`，并新增了 `_isLoadingNewer` 属性。\n\n- **特性**：实现双向分页（[#840](https:\u002F\u002Fgithub.com\u002Fflyerhq\u002Fflutter_chat_ui\u002Fissues\u002F840)）。([8cca3141](https:\u002F\u002Fgithub.com\u002Fflyerhq\u002Fflutter_chat_ui\u002Fcommit\u002F8cca314116664216b9f1697fabde0eccfd1c582d))\n\n## 2.8.1\n\n- **修复**：修复了撰写器的 inputClearMode 问题，并修正了自定义编辑控制器的相关问题。（[b4872190](https:\u002F\u002Fgithub.com\u002Fflyerhq\u002Fflutter_chat_ui\u002Fcommit\u002Fb4872190e92c5eae27dbd7c2bfa352f12085b527))","2025-07-26T14:32:48",{"id":162,"version":163,"summary_zh":164,"released_at":165},180443,"v2.8.0","- 功能：允许在气泡内显示顶部小部件（https:\u002F\u002Fgithub.com\u002Fflyerhq\u002Fflutter_chat_ui\u002Fissues\u002F814）。([e267c27c](https:\u002F\u002Fgithub.com\u002Fflyerhq\u002Fflutter_chat_ui\u002Fcommit\u002Fe267c27ca2ac8541e4f7c4ba05ee38cecaa1f9b6))","2025-07-19T12:49:00",{"id":167,"version":168,"summary_zh":169,"released_at":170},180444,"v2.7.0","- **特性**：链接预览组件包（[#790](https:\u002F\u002Fgithub.com\u002Fflyerhq\u002Fflutter_chat_ui\u002Fissues\u002F790)）。([2938f646](https:\u002F\u002Fgithub.com\u002Fflyerhq\u002Fflutter_chat_ui\u002Fcommit\u002F2938f646f3167fb9ab65ca769f2326801db45c52))\n\n## 2.6.2\n\n- **修复**：为流式消息新增 loadingBuilder。([38d539ac](https:\u002F\u002Fgithub.com\u002Fflyerhq\u002Fflutter_chat_ui\u002Fcommit\u002F38d539ac7480392d223885a3378deee2b86b5966))\n\n## 2.6.1\n\n- **修复**：添加 sendButtonDisabled 和 sendButtonHidden [#828](https:\u002F\u002Fgithub.com\u002Fflyerhq\u002Fflutter_chat_ui\u002Fissues\u002F828)。([d476dd45](https:\u002F\u002Fgithub.com\u002Fflyerhq\u002Fflutter_chat_ui\u002Fcommit\u002Fd476dd4502df51148621577f9c66843cd3a067ab))","2025-07-12T20:57:23",{"id":172,"version":173,"summary_zh":174,"released_at":175},180445,"v2.6.0","⚠️ 重大变更 ⚠️\n\n`onMessageTap` 和 `onMessageLongPress` 已将 `BuildContext` 添加为第一个参数。因此，如果您之前有如下代码：\n```dart\nvoid _handleMessageLongPress(\n  Message message, {\n  int? index,\n  LongPressStartDetails? details,\n})\n```\n请将其替换为：\n```dart\nvoid _handleMessageLongPress(\n  BuildContext context,\n  Message message, {\n  int? index,\n  LongPressStartDetails? details,\n})\n```\n\n---\n\n- **修复**：当列表为空时，`scrollToIndex` 方法无法正常工作 [#793](https:\u002F\u002Fgithub.com\u002Fflyerhq\u002Fflutter_chat_ui\u002Fissues\u002F793)。([1948c1f5](https:\u002F\u002Fgithub.com\u002Fflyerhq\u002Fflutter_chat_ui\u002Fcommit\u002F1948c1f5c421d40ee8d276230eec295ca6b41d05))\n- **新增功能**：在消息编写器中添加了 `sendButtonVisibilityMode` 和 `allowEmptyMessage` 属性。([7a496607](https:\u002F\u002Fgithub.com\u002Fflyerhq\u002Fflutter_chat_ui\u002Fcommit\u002F7a496607966f0e976ccefdc80ac5b42e4bf59f8f))\n- **新增功能**：添加了 `OnMessageDoubleTapCallback` 方法；同时为 `OnMessageTapCallback` 和 `OnMessageLongPressCallback` 增加了 `BuildContext context` 参数 ([#817](https:\u002F\u002Fgithub.com\u002Fflyerhq\u002Fflutter_chat_ui\u002Fissues\u002F817))。([6fe68886](https:\u002F\u002Fgithub.com\u002Fflyerhq\u002Fflutter_chat_ui\u002Fcommit\u002F6fe688866c631a4976ec85e9adda210c58457d21))\n\n## 2.5.3\n\n- **修复**：更新依赖项。([a8ff8b57](https:\u002F\u002Fgithub.com\u002Fflyerhq\u002Fflutter_chat_ui\u002Fcommit\u002Fa8ff8b573a25146d5c78b1014c9caa3126d1de40))\n\n## 2.5.2\n\n- 将某依赖更新至最新版本。\n\n## 2.5.1\n\n- **修复**：重新启用消息编写器的模糊效果。([791f7308](https:\u002F\u002Fgithub.com\u002Fflyerhq\u002Fflutter_chat_ui\u002Fcommit\u002F791f7308cb499e854a6f59dc95a19ca9de7ef88d))","2025-06-27T22:15:39",{"id":177,"version":178,"summary_zh":179,"released_at":180},180446,"v2.5.0","- **修复**: 恢复状态字段（[#809](https:\u002F\u002Fgithub.com\u002Fflyerhq\u002Fflutter_chat_ui\u002Fissues\u002F809)）。([1aadf874](https:\u002F\u002Fgithub.com\u002Fflyerhq\u002Fflutter_chat_ui\u002Fcommit\u002F1aadf8747d81672422a0e40363b0c2aeaa9e3efd))\n- **修复**: 阻止发送空消息（[#808](https:\u002F\u002Fgithub.com\u002Fflyerhq\u002Fflutter_chat_ui\u002Fissues\u002F808)）。([6fbcfc73](https:\u002F\u002Fgithub.com\u002Fflyerhq\u002Fflutter_chat_ui\u002Fcommit\u002F6fbcfc73645ec5f704fb1add52f0862bc19bc129))\n- **修复**: 性能优化（[#807](https:\u002F\u002Fgithub.com\u002Fflyerhq\u002Fflutter_chat_ui\u002Fissues\u002F807)）。([71e6d690](https:\u002F\u002Fgithub.com\u002Fflyerhq\u002Fflutter_chat_ui\u002Fcommit\u002F71e6d69027d520c351b00c5e85e30cd97dabd321))\n- **修复**: 允许在输入框不为空时设置不同的颜色（[#794](https:\u002F\u002Fgithub.com\u002Fflyerhq\u002Fflutter_chat_ui\u002Fissues\u002F794)）。([788ca0c6](https:\u002F\u002Fgithub.com\u002Fflyerhq\u002Fflutter_chat_ui\u002Fcommit\u002F788ca0c6ce470b10d70ef8965b49150e7e8570f9))\n- **功能**: 修复同一分钟内时间和状态分组的问题 [#764](https:\u002F\u002Fgithub.com\u002Fflyerhq\u002Fflutter_chat_ui\u002Fissues\u002F764)（[#792](https:\u002F\u002Fgithub.com\u002Fflyerhq\u002Fflutter_chat_ui\u002Fissues\u002F792)）。([61c04002](https:\u002F\u002Fgithub.com\u002Fflyerhq\u002Fflutter_chat_ui\u002Fcommit\u002F61c04002153897113f47c239e059511b1e3468ec))","2025-06-08T17:57:01",{"id":182,"version":183,"summary_zh":184,"released_at":185},180447,"v2.4.0","⚠️ 重大变更 ⚠️\n\n所有消息构建器现在都会提供 `isSentByMe` 和 `groupStatus`。只需在索引参数之后传递以下内容：\n```dart\n{\n  required bool isSentByMe,\n  MessageGroupStatus? groupStatus,\n}\n```\n如果不需要这些字段，也可以不使用。\n\n---\n- **修复**: 添加 `editedAt` 和 `pinned` [#797](https:\u002F\u002Fgithub.com\u002Fflyerhq\u002Fflutter_chat_ui\u002Fissues\u002F797) ([#798](https:\u002F\u002Fgithub.com\u002Fflyerhq\u002Fflutter_chat_ui\u002Fissues\u002F798))。([e164caa3](https:\u002F\u002Fgithub.com\u002Fflyerhq\u002Fflutter_chat_ui\u002Fcommit\u002Fe164caa3de4a172f13f5810ffc32891e3e143c64))\n- **功能**: 在所有消息构建器中公开 `isSentByMe` 和 `groupStatus` [#805](https:\u002F\u002Fgithub.com\u002Fflyerhq\u002Fflutter_chat_ui\u002Fissues\u002F805)。([263d145b](https:\u002F\u002Fgithub.com\u002Fflyerhq\u002Fflutter_chat_ui\u002Fcommit\u002F263d145bc3998d0f6ebed02406dda35634439b03))","2025-06-08T12:21:52",{"id":187,"version":188,"summary_zh":189,"released_at":190},180448,"v2.3.1","⚠️ 重大变更 ⚠️\n\n尽管这是一个补丁版本，但它依赖于 `flutter_chat_core`，而该库引入了一处小的破坏性变更。我意识到在发布之前没有将 `flutter_chat_ui` 的版本号升级到一个新的次版本——对此深表歉意！\n\n修复方法很简单：如果你自定义了 `ChatController`，那么 `set` 操作现在**必须**传入一个消息数组。\n1. 如果你之前使用命名参数，例如 `set(messages: messages)`，请将其改为：`set(messages)`。\n2. 如果你之前直接调用 `set()` 而不传任何参数，请将其替换为：`set([])`。\n\n---\n\n- **修复**：添加用户名组件。（[892ee622](https:\u002F\u002Fgithub.com\u002Fflyerhq\u002Fflutter_chat_ui\u002Fcommit\u002F892ee6220273431ef90f51ce305c06dcca6944f7)）\n- **修复**：公开 `user_cache` 并将其改为 `ChangeNotifier`。（[baa7eee6](https:\u002F\u002Fgithub.com\u002Fflyerhq\u002Fflutter_chat_ui\u002Fcommit\u002Fbaa7eee65201507eaf05574c8fcbd9afb9120d4a)）\n- **修复**：公开头像和图片消息的头部信息。（[0261ce1c](https:\u002F\u002Fgithub.com\u002Fflyerhq\u002Fflutter_chat_ui\u002Fcommit\u002F0261ce1cbace258836f90c83d7d1348fc6253ab5)）\n- **修复**：新增 Gemini 示例，并提供停止流式输出的选项。（[fa558e46](https:\u002F\u002Fgithub.com\u002Fflyerhq\u002Fflutter_chat_ui\u002Fcommit\u002Ffa558e4631708dd590468f8a0ea4cf2dcb1e68fc)）\n  - **功能**：使 `set` 操作必需传入消息列表。（[9e123732](https:\u002F\u002Fgithub.com\u002Fflyerhq\u002Fflutter_chat_ui\u002Fcommit\u002F9e1237321d0ee3781576d3486f695df8834de3b8)）","2025-05-26T21:58:18",{"id":192,"version":193,"summary_zh":194,"released_at":195},180449,"v2.3.0","## 2.3.0\n\n⚠️ 重大变更 ⚠️\n\n- 将 **LinkPreview** 重命名为 **LinkPreviewData**\n- `LinkPreview.imageUrl` → `LinkPreviewData.image.url`\n- `LinkPreviewData.image.width` 和 `LinkPreviewData.image.height` 现在都为必填项\n\n - **新功能**: 链接预览 v2 ([#784](https:\u002F\u002Fgithub.com\u002Fflyerhq\u002Fflutter_chat_ui\u002Fissues\u002F784))。([b65060e1](https:\u002F\u002Fgithub.com\u002Fflyerhq\u002Fflutter_chat_ui\u002Fcommit\u002Fb65060e11036402934489976c702dab28c7feb80))\n\n## 2.2.4\n\n - **修复**: 向 ChatAnimatedList(Reversed) 添加 physics 参数。([ede3a170](https:\u002F\u002Fgithub.com\u002Fflyerhq\u002Fflutter_chat_ui\u002Fcommit\u002Fede3a1709ea3d496e906925efa863a13b54d84bc))\n - **修复**: emptyChatList 不可点击 ([#787](https:\u002F\u002Fgithub.com\u002Fflyerhq\u002Fflutter_chat_ui\u002Fissues\u002F787))。([88937baa](https:\u002F\u002Fgithub.com\u002Fflyerhq\u002Fflutter_chat_ui\u002Fcommit\u002F88937baa657c5ca0842e77190756e521453f04cf))\n\n## 2.2.3\n\n - **修复**: 添加 emptyChatListWidget ([#771](https:\u002F\u002Fgithub.com\u002Fflyerhq\u002Fflutter_chat_ui\u002Fissues\u002F771))。([69954654](https:\u002F\u002Fgithub.com\u002Fflyerhq\u002Fflutter_chat_ui\u002Fcommit\u002F699546546ca4df7d4271316b52332364fde55ed8))\n\n## 2.2.2\n\n - **修复**: 滚动到底部按钮的显示阈值 [#769](https:\u002F\u002Fgithub.com\u002Fflyerhq\u002Fflutter_chat_ui\u002Fissues\u002F769) ([#774](https:\u002F\u002Fgithub.com\u002Fflyerhq\u002Fflutter_chat_ui\u002Fissues\u002F774))。([e97d5c13](https:\u002F\u002Fgithub.com\u002Fflyerhq\u002Fflutter_chat_ui\u002Fcommit\u002Fe97d5c13b6461bde91a6ac55ffeb1c7f302b5415))\n\n## 2.2.1\n\n - **修复**: 键盘打开\u002F关闭时列表重新构建的问题。([48e28e7e](https:\u002F\u002Fgithub.com\u002Fflyerhq\u002Fflutter_chat_ui\u002Fcommit\u002F48e28e7e2e5f36d27dcec8d0532b1d697684c541))","2025-05-22T20:39:28",{"id":197,"version":198,"summary_zh":199,"released_at":200},180450,"2.2.0","## 2.2.0\r\n\r\n**⚠️ Breaking Changes ⚠️**\r\n\r\n- **`ChatAnimatedList` Redesign**:\r\n    - Significantly overhauled for robust handling of asynchronous controller updates.\r\n    - The `update` operation (`ChatOperation.update`) now requires the `index` of the message to be updated.\r\n- **CRITICAL**: When implementing custom `ChatController`s, you **MUST** now fetch the most up-to-date message instance from your data source *before* passing it to `remove` or `update` operations. The internal list now relies on the exact object reference. Failing to do so will lead to errors or unexpected behavior. (See `InMemoryChatController` for an example of fetching the actual message before emitting `ChatOperation.remove` or `ChatOperation.update`).\r\n\r\n**✨ Key Enhancements & Fixes ✨**\r\n\r\n- **Asynchronous Operations**: `ChatAnimatedList` now uses an internal operation queue to serialize updates, preventing race conditions and resolving prior `StreamOperation` issues.\r\n- **List Factorization**: Common logic between normal and reversed `ChatAnimatedList` instances has been factorized, improving maintainability.\r\n- **Bulk Insertions**: Added `insertAllMessages` to `ChatController` and `ChatAnimatedList` for efficient bulk message additions with animations.\r\n- **Diffing & Stability**: `ChatController`'s `setMessages` now uses an improved `DiffUtil` (with move support), fixing \"out of bounds\" errors during complex list updates.\r\n- **Data Consistency**: The controller now fetches the latest message version before updates or deletions to ensure operations use current data.\r\n- **Bug Fixes**:\r\n    - Corrected message insertion position in reversed lists ([#754](https:\u002F\u002Fgithub.com\u002Fflyerhq\u002Fflutter_chat_ui\u002Fissues\u002F754), [#755](https:\u002F\u002Fgithub.com\u002Fflyerhq\u002Fflutter_chat_ui\u002Fissues\u002F755)).\r\n    - Ensured message update operations are correctly persisted ([#778](https:\u002F\u002Fgithub.com\u002Fflyerhq\u002Fflutter_chat_ui\u002Fissues\u002F778)).\r\n- **Testing**: Introduced integration tests for `ChatAnimatedList` to validate list operations and item positioning.\r\n\r\n---\r\n\r\n - **FIX**: update operation not persisted in the list ([#778](https:\u002F\u002Fgithub.com\u002Fflyerhq\u002Fflutter_chat_ui\u002Fissues\u002F778)). ([37472015](https:\u002F\u002Fgithub.com\u002Fflyerhq\u002Fflutter_chat_ui\u002Fcommit\u002F374720152912648643c03f761b0a27eafcf0a46f))\r\n - **FEAT**: Fix StreamOperation Async issues \u002F create insertAll \u002F fixInsert on reverted list ([#756](https:\u002F\u002Fgithub.com\u002Fflyerhq\u002Fflutter_chat_ui\u002Fissues\u002F756)). ([60395f9b](https:\u002F\u002Fgithub.com\u002Fflyerhq\u002Fflutter_chat_ui\u002Fcommit\u002F60395f9ba97ac4b8000aea70c7040d55bb40b6aa))\r\n\r\n## 2.1.3\r\n\r\n - **FIX**: hide attachmentButton if no there is no onAttachmentTap provided ([#757](https:\u002F\u002Fgithub.com\u002Fflyerhq\u002Fflutter_chat_ui\u002Fissues\u002F757)). ([2eae2002](https:\u002F\u002Fgithub.com\u002Fflyerhq\u002Fflutter_chat_ui\u002Fcommit\u002F2eae2002a9c846062902d7582724d0a932fae623))\r\n\r\n## 2.1.2\r\n\r\n - **FIX**: add audio message type. ([8d2b705a](https:\u002F\u002Fgithub.com\u002Fflyerhq\u002Fflutter_chat_ui\u002Fcommit\u002F8d2b705ad261275368d8c92d91ccdd53193d58ca))\r\n\r\n## 2.1.1\r\n\r\n - **FIX**: add video message type. ([93a13840](https:\u002F\u002Fgithub.com\u002Fflyerhq\u002Fflutter_chat_ui\u002Fcommit\u002F93a13840c2ae3fae7e36093efeb4f9bf69e8a755))","2025-05-17T14:11:22",{"id":202,"version":203,"summary_zh":204,"released_at":205},180451,"2.1.0","## 2.1.0\r\n\r\n**⚠️ Breaking Changes ⚠️**\r\n\r\nChat controller methods have been renamed to avoid name conflicts with Riverpod.\r\n\r\n- `insert` -> `insertMessage`\r\n- `update` -> `updateMessage`\r\n- `remove` -> `removeMessage`\r\n- `set` -> `setMessages`\r\n\r\n - **FEAT**: rename chat controller methods. ([dc1bf57d](https:\u002F\u002Fgithub.com\u002Fflyerhq\u002Fflutter_chat_ui\u002Fcommit\u002Fdc1bf57d9b5f9655805589fdda5581759b9cc1a9))\r\n - **FIX**: improve documentation and add example. ([113141b3](https:\u002F\u002Fgithub.com\u002Fflyerhq\u002Fflutter_chat_ui\u002Fcommit\u002F113141b31de52a166eea54625f4cdd5b80bb897a))\r\n - **FIX**: document public APIs.","2025-05-03T18:34:47",{"id":207,"version":208,"summary_zh":209,"released_at":210},180452,"2.0.0","- Version 2.0.0 is a major update where we completely rebuilt the library. This version focuses on better performance, more customization options, and improved stability. We have added many new features and improvements to make your experience better. For more details, check out our blog post: https:\u002F\u002Fflyer.chat\u002Fblog\u002Fv2-announcement\u002F 🚀","2025-05-01T21:23:29",{"id":212,"version":213,"summary_zh":214,"released_at":215},180453,"2.0.0-dev.11","**⚠️ Breaking Changes ⚠️**\r\n\r\n- Enhanced pagination functionality for the `ChatAnimatedList` widget. If you utilize the `paginationThreshold` parameter, please refer to the comments in the `ChatAnimatedList` widget implementation for detailed guidance.\r\n- Updated the `Message` model to rename `parentId` to `replyToMessageId`\r\n- The `createdAt` field is now optional in the message model\r\n- The `sending` field has been removed from the message model; instead, you can set `sending: true` in the metadata of the Message model to achieve the same functionality.\r\n- The `isOnlyEmoji` property has been removed from the text message model; to indicate that a message contains only emojis, use `isOnlyEmoji: true` in the metadata of the text message.\r\n- The `firstName` and `lastName` fields in the `User` model have been consolidated into a single `name` field for improved simplicity.\r\n- The default sentinel values that previously allowed users to set specific properties to `null` have been removed. Instead, please use `Colors.transparent`, `BorderRadius.zero`, or `TextStyle()` to achieve the desired effect. Passing `null` will now use the standard configuration.\r\n\r\n**⚠️ New Features ⚠️**\r\n\r\n- Added a `headerWidget` to the `ChatMessage` widget, enabling the display of a custom header for each message. You have the flexibility to control the header's position; wrap it with a `Center` widget for centering.\r\n- Introduced new parameters: `sentMessageColumnAlignment`, `receivedMessageColumnAlignment`, `sentMessageRowAlignment`, and `receivedMessageRowAlignment` for the `ChatMessage` widget. These allow for precise control over the positioning of `leadingWidget`, `trailingWidget`, `topWidget`, and `bottomWidget`. Ensure correct defaults are set for proper alignment, especially when using the `topWidget`.\r\n- Introduced `TextStreamMessage` type to support text streaming\r\n- Added `textStreamMessageBuilder` to the `Builders` class to support text streaming UI widget\r\n\r\n**Other changes**\r\n\r\n- Introduced `MessageID` and `UserID` typedefs to provide clearer context, while maintaining their underlying type as `String`s\r\n- Do not show status for received messages\r\n- Added example for text streaming","2025-05-01T11:18:53",{"id":217,"version":218,"summary_zh":219,"released_at":220},180454,"2.0.0-dev.10","**⚠️ Breaking Changes ⚠️**\r\n\r\n- Rename `ChatInput` to `Composer`\r\n- Rename `ChatInputHeightNotifier` to `ComposerHeightNotifier`\r\n- Rename `inputBuilder` to `composerBuilder`","2025-04-29T05:45:43",{"id":222,"version":223,"summary_zh":224,"released_at":225},180455,"2.0.0-dev.9","**⚠️ Breaking Changes ⚠️**\r\n\r\n- Requires Freezed 3.0.0\r\n- Replace `status` field with a computed getter that determines message state based on lifecycle timestamps (`createdAt`, `deletedAt`, `sending`, `failedAt`, `sentAt`, `deliveredAt`, `seenAt`, `updatedAt`). This enables granular message history tracking and status transitions, matching the behavior of popular chat applications.\r\n- Rename `overlay` to `hasOverlay` in `ImageMessage`\r\n\r\n**Other changes**\r\n\r\n- Downgrade `intl` package version for better compatibility with other Flutter packages\r\n- Added `FileMessage` support to the example project\r\n- Migrated web storage implementation from `indexed_db` to `idb_shim` for improved cross-platform compatibility and better performance","2025-04-06T21:16:18",{"id":227,"version":228,"summary_zh":229,"released_at":230},180456,"2.0.0-dev.8","**⚠️ Breaking Changes ⚠️**\r\n\r\n- Package requires `intl` package for date\u002Ftime formatting\r\n\r\n**⚠️ New features ⚠️**\r\n\r\n- Added support for long press actions on messages with customizable callback\r\n- Added system message for displaying system notifications and events in chat\r\n- Added examples demonstrating both long press handling and system messages\r\n- Added message status indicators (delivered, error, seen, sending, sent)\r\n- Added message timestamps with customizable format, position","2025-03-25T17:29:11",{"id":232,"version":233,"summary_zh":234,"released_at":235},180457,"2.0.0-dev.7","**⚠️ Breaking Changes ⚠️**\r\n\r\n- Changed dependency from `flutter_markdown` to `gpt_markdown` for the `FlyerChatTextMessage` class\r\n- `onMessageTap` callback now includes message index and tap up details - updated parameters to `(Message item, {int? index, TapUpDetails? details})`\r\n- Added more customization options to `ChatInput`, with default capitalization set to sentences\r\n- Changed default behavior of Enter key in `ChatInput` to create a newline instead of sending message\r\n  - To send message on Enter, set `textInputAction: TextInputAction.send` when configuring `ChatInput` through builders\r\n  - See `local.dart` example for how to use builders to customize input behavior\r\n\r\n**⚠️ New features ⚠️**\r\n\r\n- Add `ScrollToMessageMixin` to enable programmatic scrolling in chat list:\r\n  - `scrollToMessage(messageId)`: Scrolls to a specific message by ID\r\n  - `scrollToIndex(index)`: Scrolls to a message at a specific index\r\n  - Both methods support customizable animation duration, curve, alignment and offset\r\n  - Can be used directly through any `ChatController` instance\r\n  - See the pagination example in the example project for usage details\r\n- Add validation to prevent duplicate message IDs\r\n- Added support for sending messages using Shift+Enter keyboard shortcut in ChatInput\r\n\r\n**🐛 Bug Fixes**\r\n\r\n- Fixed flickering in avatar widget by implementing a user cache with LRU eviction strategy, allowing synchronous access to recently resolved user data","2025-03-16T22:35:21",{"id":237,"version":238,"summary_zh":239,"released_at":240},180458,"2.0.0-dev.6","**⚠️ Breaking changes ⚠️**\r\n\r\n- Require Flutter 3.29 and Dart 3.7\r\n\r\n**🐛 Bug Fixes**\r\n\r\n- Temporarily disabled blur effect for chat input due to a crash in Flutter 3.29 (will be re-enabled once fix is available in stable)\r\n- Fixed a warning that occurred when removing all messages simultaneously","2025-02-18T22:58:16",{"id":242,"version":243,"summary_zh":244,"released_at":245},180459,"2.0.0-dev.5","**⚠️ Breaking changes ⚠️**\r\n\r\n- Changed signature of `chatMessageBuilder` to include `isRemoved` and `groupStatus` parameters.\r\n- Changed `imageUrl` to `imageSource` for the `User` model. Change is necessary to show that not only remote URLs are supported but also local assets.\r\n- `messageGroupingTimeoutInSeconds` is now set via `chatAnimatedListBuilder`.\r\n\r\n**⚠️ New features ⚠️**\r\n\r\n- Add `hintText` to the `ChatInput` widget.\r\n- Added avatar support. Check local example for details.\r\n- `chatMessageBuilder` now returns `isRemoved` and `groupStatus` parameters. Group status returns information about message's position in the group. `isRemoved` is `true` if message is removed.\r\n- Added `leadingWidget` and `trailingWidget` to the `ChatMessage` widget.","2025-02-16T21:13:26"]