flutter3.32+deepseek搭建windows版ai流式输出对话模板

本文涉及的产品
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
应用实时监控服务-可观测链路OpenTelemetry版,每月50GB免费额度
函数计算FC,每月15万CU 3个月
简介: flutter3-winseek:原创flutter3.32+deepseek+dio电脑版Ai流式输出exe系统。支持侧边栏收缩、stream流输出、代码高亮/复制、对话本地存储等功能。

前段时间有分享一篇flutter3+deepseek搭建手机端ai对话模板。

flutter3.27接入deepseek-v3跨平台ai流式聊天问答系统


今天再分享一款最新研发的flutter3.32接入deepseek电脑端ai对话系统Flutter3-Winseek


未标题-2.png


使用技术

  • 开发工具:vscode
  • 技术框架:flutter3.32.0+dart3.8.0
  • 对话大模型:deepseek-v3
  • 流请求:dio^5.8.0+1
  • 窗口管理:window_manager^0.5.0
  • 托盘管理:system_tray^2.0.3
  • 路由/状态管理:get^4.7.2
  • 存储服务:get_storage^2.1.1
  • markdown解析:flutter_markdown^0.7.7
  • 高亮组件:flutter_highlight^0.7.0
  • 环境变量配置:flutter_dotenv^5.2.1


p2.gif

p4-1.gif

项目特性


  1. 支持侧边栏收缩/展开
  2. 支持上下文多轮对话、代码高亮、本地存储会话
  3. 支持代码块横向滚动、复制代码功能
  4. 支持图片100%宽度渲染、在线图片预览
  5. 支持网络链接跳转、表格功能
  6. 采用自定义无边框窗口、托盘图标


未标题-4.png

项目结构目录

360截图20250605063348665.png

001360截图20250603213936240.png 002360截图20250603214956485.png 002360截图20250603220847862.png 002360截图20250603220951877.png 004360截图20250603221816765.png 004360截图20250603221848422.png

2fd4944b4053b8a62b7a7fd3e594d147_1289798-20250605103549516-150050982.png

通过 flutter create flutter_winseek 命令即可快速创建一个flutter空项目模板。

通过 flutter run -d windows 命令即可运行到windows桌面。


flutter自定义环境变量.env

b310d02077a18988971629e8445cfe66_1289798-20250605104151148-834204953.png

# 项目名称
APP_NAME = 'Flutter3-WinSeek'

# DeepSeek API配置
DEEPSEEK_API_KEY = apikey
DEEPSEEK_BASE_URL = https://api.deepseek.com

通过如下方式获取:

// 获取.env环境变量baseUrl和apiKey
String baseURL = dotenv.get('DEEPSEEK_BASE_URL');
String apiKEY = dotenv.get('DEEPSEEK_API_KEY');

002360截图20250603220910049.png 005360截图20250603223838280.png 005360截图20250603223912329.png 005360截图20250603223959063.png 005360截图20250603224125575.png 005360截图20250603224350726.png

项目通用布局

feb8691fabedab56acb5a30a5e9dd463_1289798-20250605105858927-1189439389.png

return Scaffold(
  backgroundColor: Colors.grey[50],
  body: DragToResizeArea(
    child: Row(
      children: [
        // 侧边栏
        AnimatedSize(
          duration: const Duration(milliseconds: 300),
          curve: Curves.easeInOut,
          child: Container(
            width: collapsed ? 0 : 260,
            decoration: BoxDecoration(
              border: Border(right: BorderSide(color: Colors.grey.withAlpha(50)))
            ),
            child: Material(
              color: Color(0xFFF3F3F3),
              child: Sidebar(),
            ),
          ),
        ),
        // 主体容器
        Expanded(
          child: Column(
            children: [
              // 自定义导航栏
              SizedBox(
                height: 30.0,
                child: Row(
                  children: [
                    IconButton(
                      onPressed: () {
                        setState(() {
                          collapsed = !collapsed;
                        });
                      },
                      icon: Icon(collapsed ? Icons.format_indent_increase : Icons.format_indent_decrease, size: 16.0,),
                      tooltip: collapsed ? '展开' : '收缩',
                    ),
                    Expanded(
                      child: DragToMoveArea(
                        child: SizedBox(
                          height: double.infinity,
                        ),
                      ),
                    ),
                    // 右上角操作按钮
                    WinBtns(
                      leading: Row(
                        children: [
                          ...
                        ],
                      ),
                    ),
                  ],
                ),
              ),
              // 右侧主面板
              Expanded(
                child: Container(
                  child: widget.child,
                ),
              ),
            ],
          ),
        ),
      ],
    ),
  ),
);

image.png

侧边栏支持展开/收缩,历史记录支持右键菜单,超过高度有滚动条。

return ScrollConfiguration(
  behavior: CustomScrollBehavior(),
  child: Column(
    children: [
      Container(
        padding: EdgeInsets.all(10.0),
        child: Column(
          spacing: 10.0,
          children: [
            ...
          ],
        ),
      ),
      Container(
        margin: EdgeInsets.only(bottom: 10.0),
        padding: EdgeInsets.symmetric(horizontal: 20.0),
        child: Row(
          spacing: 5.0,
          children: [
            Icon(Icons.history, size: 18.0,),
            Text('历史对话'),
            Spacer(),
            SizedBox(
              height: 25.0, width: 25.0,
              child: Transform.translate(
                offset: Offset(3.0, 0),
                child: IconButton(
                  onPressed: () => handleClear(),
                  tooltip: '清空会话',
                  icon: Icon(Icons.delete_sweep_outlined, size: 14.0),
                  padding: EdgeInsets.zero,
                  style: ButtonStyle(backgroundColor: WidgetStateProperty.all(Colors.grey[50])),
                ),
              )
            )
          ],
        ),
      ),
      Expanded(
        child: Obx(() {
          if(chatStore.sessions.isEmpty) {
            return Column(
              spacing: 5.0,
              children: [
                SizedBox(height: 20.0,),
                Image.asset('assets/images/empty.png', height: 40.0, width: 40.0,),
                Text('暂无对话', style: TextStyle(color: Colors.black38), overflow: TextOverflow.ellipsis,),
              ],
            );
          }
          return ListView.separated(
            padding: EdgeInsets.symmetric(horizontal: 10.0),
            separatorBuilder: (context, index) => SizedBox(height: 2.0),
            itemCount: chatStore.sessions.length,
            itemBuilder: (context, index) {
              // ...
            },
          );
        }),
      ),
      Container(
        margin: EdgeInsets.symmetric(vertical: 10.0),
        padding: EdgeInsets.symmetric(horizontal: 10.0),
        child: InkWell(
          borderRadius: BorderRadius.circular(10.0),
          child: Container(
            padding: EdgeInsets.symmetric(horizontal: 10.0, vertical: 5.0),
            child: Row(
              spacing: 5.0,
              children: [
                Image.asset('assets/images/avatar.png',height: 30.0,width: 30.0,fit: BoxFit.cover),
                Text('Andy'),
                Spacer(),
                Icon(Icons.arrow_forward_ios_rounded, color: Colors.grey, size: 10.0,)
              ],
            ),
          ),
          onTap: () {
            Get.toNamed('/setting');
          },
        ),
      ),
    ],
  ),
);

p4-2.gif

006360截图20250603224456943.png 007360截图20250603224601258.png 007360截图20250603224807505.png 007360截图20250603224819032.png 008360截图20250603224856559.png

flutter3+dio请求流式输出

通过dio调用deepseek api接口,实现流式输出对话。

p4-4.gif


final response = await dio.post(
  '$baseURL/v1/chat/completions',
  options: Options(
    // 响应超时
    receiveTimeout: const Duration(seconds: 60),
    headers: {
      "Content-Type": "application/json",
      "Authorization": "Bearer $apiKEY",
    },
    // 设置响应类型为流式响应
    responseType: ResponseType.stream,
  ),
  data: {
    // 多轮会话
    'messages': widget.multiConversation ? chatStore.historySession : [{'role': 'user', 'content': editorValue}],
    'model': 'deepseek-chat', // deepseek-chat对话模型 deepseek-reasoner推理模型
    'stream': true, // 流式输出
    'max_tokens': 8192, // 限制一次请求中模型生成 completion 的最大 token 数(默认使用 4096)
    'temperature': 0.4, // 严谨采样 越低越严谨(默认1)
  }
);

好了,以上就是flutter3.32调用deepseek搭建客户端ai对话的一些知识分享,希望对大家有点帮助!


目录
相关文章
|
3月前
|
人工智能 数据可视化 安全
【保姆级教程】Dify+DeepSeek+MCP三件套:零门槛打造AI应用流水线,手把手实战教学!
本教程手把手教你用Dify+DeepSeek+MCP三件套零门槛搭建AI应用流水线:Dify提供可视化工作流编排,DeepSeek贡献128K长文本国产最强模型,MCP实现弹性部署。这套组合兼具低代码开发、高性能推理和灵活运维三大优势,助你快速落地企业级AI解决方案。
|
16天前
|
人工智能 IDE 开发工具
CodeGPT AI代码狂潮来袭!个人完全免费使用谷歌Gemini大模型 超越DeepSeek几乎是地表最强
CodeGPT是一款基于AI的编程辅助插件,支持代码生成、优化、错误分析和单元测试,兼容多种大模型如Gemini 2.0和Qwen2.5 Coder。免费开放,适配PyCharm等IDE,助力开发者提升效率,新手友好,老手提效利器。(238字)
126 1
CodeGPT AI代码狂潮来袭!个人完全免费使用谷歌Gemini大模型 超越DeepSeek几乎是地表最强
|
6月前
|
人工智能 Kubernetes API
Dify+DeepSeek实战教程!企业级 AI 文档库本地化部署,数据安全与智能检索我都要
接下来这篇文章,就打算用最接地气的方式,手把手带你从 0 到 1 搭建一套专属的本地知识库系统。无论你是想优化企业内部文档检索(不用担心敏感数据上传云端的风险),还是像我一样想为用户打造更智能的文档服务,都能跟着步骤一步步实现。咱们不卖关子,直接上干货
Dify+DeepSeek实战教程!企业级 AI 文档库本地化部署,数据安全与智能检索我都要
|
6月前
|
人工智能 自然语言处理 监控
基于DeepSeek R1改进的AI安全模型!MAI-DS-R1:微软开源AI安全卫士,敏感话题响应率高达99.3%
微软开源的MAI-DS-R1是基于DeepSeek R1改进的AI模型,通过后训练优化将敏感话题响应率提升至99.3%,同时将有害内容风险降低50%,保持原版推理能力并增强多语言支持。
538 3
基于DeepSeek R1改进的AI安全模型!MAI-DS-R1:微软开源AI安全卫士,敏感话题响应率高达99.3%
|
5月前
|
人工智能 搜索推荐 API
🚀 2小时极速开发!基于DeepSeek+智体OS的AI社交「头榜」震撼上线!
基于DeepSeek大模型与DTNS协议的革命性AI社交平台「头榜」震撼上线!仅需2小时极速开发,即可构建完整社交功能模块。平台具备智能社交网络、AI Agent生态、Prompt市场、AIGC创作等六大核心优势,支持低代码部署与个性化定制。开发者可快速接入DeepSeek API,体验去中心化架构与数据自主权。官网:[dtns.top](https://dtns.top),立即开启你的AI社交帝国!#AI社交 #DeepSeek #DTNS协议
153 4
|
6月前
|
人工智能 JavaScript 前端开发
领导给我3天时间汇总所有AI模块词条,结合DeepSeek,20分钟就搞定了。
本文分享了一次利用AI工具提升工作效率的实际案例。作者接到任务,需在3天内梳理公司AI模块的所有词条并以增量形式提供给项目组。为高效完成任务,作者借助DeepSeek编写了三个Node.js脚本:第一个脚本扫描所有/ai目录下的文件,提取符合“zxy.xxx”格式的词条;第二个脚本对比目标词条库与已提取的词条,生成过滤后的副本;第三个脚本将最终结果输出为Excel文档,满足领导需求。整个过程从十几分钟到二十分钟不等,大幅缩短了原本需要数天的工作量。此案例表明,在重复性工作中合理运用AI工具可显著提高效率。
268 12
|
2月前
|
人工智能 自然语言处理 Java
从青铜到王者,DeepSeek+Spring AI 搭建 RAG 知识库
本文介绍了基于RAG(检索增强生成)技术构建知识库的原理与实现方法。RAG通过结合检索与生成模型,提升大语言模型在问答任务中的准确性与相关性,有效缓解“幻觉”问题。文章还详细讲解了如何利用DeepSeek与SpringAI搭建高效RAG系统,并提供了完整的Java代码示例,帮助开发者快速实现文档处理、向量存储与智能问答功能。适用于智能客服、内容生成、辅助决策等多个场景。
450 2
|
5月前
|
人工智能 Java API
Spring AI 实战|Spring AI入门之DeepSeek调用
本文介绍了Spring AI框架如何帮助Java开发者轻松集成和使用大模型API。文章从Spring AI的初探开始,探讨了其核心能力及应用场景,包括手动与自动发起请求、流式响应实现打字机效果,以及兼容不同AI服务(如DeepSeek、通义千问)的方法。同时,还详细讲解了如何在生产环境中添加监控以优化性能和成本管理。通过Spring AI,开发者可以简化大模型调用流程,降低复杂度,为企业智能应用开发提供强大支持。最后,文章展望了Spring AI在未来AI时代的重要作用,鼓励开发者积极拥抱这一技术变革。
1782 71
Spring AI 实战|Spring AI入门之DeepSeek调用
|
19天前
|
人工智能 安全
用DeepSeek当工作伙伴:解决文案卡壳、问题拆解,让AI帮你省时间
本文介绍了如何利用DeepSeek提升工作效率。重点分享了5个高频工作场景的应用:1)快速处理文档提炼;2)突破创意卡壳;3)拆解复杂问题;4)快速学习专业知识;5)优化商务表达。同时提供了3个实用技巧:整理实际信息、优化提示词、学会追问补充。最后强调DeepSeek的核心价值在于解放精力,让用户专注于更具创造性和判断力的工作。通过合理使用,可显著提升工作效率和思维质量。
59 0
|
6月前
|
人工智能 自然语言处理 数据挖掘
DeepSeek:重构办公效率的AI新范式
DeepSeek作为新一代AI办公平台,通过语义理解、流程重构和决策支持三大引擎,重新定义办公效率。它以深度语义模型实现合同审核等任务的高效精准,用智能流程挖掘优化业务链条,并融合行业知识图谱辅助决策。数据显示,DeepSeek可大幅压缩时间成本、提升质量并带来显著ROI。其从“人找信息”到“信息找人”的范式转变,推动企业迈向认知联网与群体智能时代,开启办公效率的指数级跃迁。这不仅是工具革新,更是生产力模式的根本转型。
209 0