爆肝两周!基于flutter3.41.5+dart3.11+get+dio+window_manager集成deepseek api大模型纯手搓高颜值桌面客户端ai流式对话助手。
使用技术
- 开发工具:VScode
- 跨平台技术框架:flutter3.41.5+dart3.11.3
- 大模型框架:deepseek-v3.2
- 流式请求:dio^5.9.2
- 路由/状态管理:get^4.7.3
- 存储服务:get_storage^2.1.1
- markdown解析:flutter_markdown_plus^1.0.7
- latex公式:flutter_markdown_plus_latex^1.0.5
- 窗口管理:window_manager^0.5.1
- 托盘管理:system_tray^2.0.3
功能特性
- Flutter3.41接入DeepSeek-V3,对话更丝滑
- 支持深度思考✨
- 支持latex数学公式✨
- 支持mermaid图表渲染✨
- 支持代码块横向滚动、代码高亮/复制代码✨
- 支持图片预览、链接跳转、表格✨
- 支持多轮上下文会话、本地存储对话✨
项目结构目录
flutter3-deepseek-winai跨平台桌面ai系统已经同步到我的原创作品集。
flutter3.41+deepseek+dio客户端AI对话系统
flutter create flutter_xxx 快速构建一个flutter3初始化项目。
flutter run -d windows 命令快速运行到桌面端。
flutter3配置.env文件
通过flutter_dotenv插件配置环境变量。
需要自己申请deepseek apikey,替换项目根目录下.env文件里的key即可。
# 项目名称
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');
项目入口main.dart
import 'dart:io';
import 'package:flutter/material.dart';
import 'package:get/get.dart';
import 'package:get_storage/get_storage.dart';
import 'package:shirne_dialog/shirne_dialog.dart';
import 'package:flutter_dotenv/flutter_dotenv.dart';
import 'package:system_tray/system_tray.dart';
import 'package:window_manager/window_manager.dart';
import 'controller/app.dart';
import 'controller/chat.dart';
// 引入路由配置
import 'router/index.dart';
void main() async {
// 初始化存储服务
await GetStorage.init();
// 将.env文件内容加载到dotenv中
await dotenv.load(fileName: '.env');
// 注册GetxController
Get.put(AppStore());
Get.put(ChatStore());
// 初始化window_manager窗口
WidgetsFlutterBinding.ensureInitialized();
await windowManager.ensureInitialized();
WindowOptions windowOptions = WindowOptions(
size: Size(960, 640),
center: true,
backgroundColor: Colors.transparent,
skipTaskbar: false,
titleBarStyle: TitleBarStyle.hidden
);
windowManager.waitUntilReadyToShow(windowOptions, () async {
windowManager.setAsFrameless();
windowManager.setHasShadow(true);
await windowManager.show();
await windowManager.focus();
});
// 初始化托盘
initSystemTray();
runApp(const MyApp());
}
class MyApp extends StatelessWidget {
const MyApp({super.key});
@override
Widget build(BuildContext context) {
// 获取AppStore实例
final appStore = AppStore.to;
return GetMaterialApp(
title: 'FLUTTER3 WINSEEK',
debugShowCheckedModeBanner: false,
theme: ThemeData(
colorScheme: ColorScheme.fromSeed(seedColor: Color(0xFF7742F2)),
useMaterial3: true,
fontFamily: Platform.isWindows ? 'Microsoft YaHei' : null,
),
// 初始路由
initialRoute: appStore.isLogin ? '/' : '/login',
// 路由页面
getPages: routePages,
// 初始弹窗key
navigatorKey: MyDialog.navigatorKey,
localizationsDelegates: [
// Add your ShirneDialogLocalizations delegate here
ShirneDialogLocalizations.delegate,
],
);
}
}
初始化创建系统托盘。
Future<void> initSystemTray() async {
String trayIco = 'assets/images/tray.ico';
SystemTray systemTray = SystemTray();
// 初始化系统托盘
await systemTray.initSystemTray(
title: 'system-tray',
iconPath: trayIco,
);
// 右键菜单
final Menu menu = Menu();
await menu.buildFrom([
MenuItemLabel(label: '打开主界面', image: 'assets/images/tray.ico', onClicked: (menuItem) async => await windowManager.show()),
MenuItemLabel(label: '隐藏窗口', image: 'assets/images/tray.ico', onClicked: (menuItem) async => await windowManager.hide()),
MenuItemLabel(label: '设置中心', image: 'assets/images/tray.ico', onClicked: (menuItem) => Get.toNamed('/setting')),
MenuItemLabel(label: '锁屏', image: 'assets/images/tray.ico', onClicked: (menuItem) => {}),
MenuItemLabel(label: '关闭程序并退出', image: 'assets/images/tray.ico', onClicked: (menuItem) async => await windowManager.close()),
]);
await systemTray.setContextMenu(menu);
// 右键事件
systemTray.registerSystemTrayEventHandler((eventName) async {
debugPrint('eventName: $eventName');
if (eventName == kSystemTrayEventClick) {
Platform.isWindows ? await windowManager.show() : systemTray.popUpContextMenu();
} else if (eventName == kSystemTrayEventRightClick) {
Platform.isWindows ? systemTray.popUpContextMenu() : await windowManager.show();
}
});
}
项目布局模板
项目布局结构分为,侧边收缩栏+右侧顶部自定义导航栏+ai对话区。
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,
),
),
],
),
),
],
),
),
);
flutter3-ai-editor编辑器
return Container(
width: double.infinity,
padding: EdgeInsets.symmetric(vertical: 10.0),
child: Column(
spacing: 6.0,
children: [
// 技能栏
if (widget.skillbar)
ScrollConfiguration(
behavior: CustomScrollBehavior(),
child: SingleChildScrollView(
scrollDirection: Axis.horizontal,
padding: EdgeInsets.symmetric(horizontal: 15.0),
child: Row(
spacing: 4.0,
children: [
...
]
),
),
),
// 编辑框
Container(
margin: EdgeInsets.symmetric(horizontal: 15.0),
padding: EdgeInsets.all(10.0),
decoration: BoxDecoration(
color: Colors.white,
border: Border.all(color: Colors.grey.withAlpha(100), width: .5),
borderRadius: BorderRadius.circular(15.0),
boxShadow: [
BoxShadow(
color: Colors.black.withAlpha(20),
offset: Offset(0.0, 3.0),
blurRadius: 6.0,
spreadRadius: 0.0,
),
]
),
child: Column(
spacing: 10.0,
children: [
// 输入框
ConstrainedBox(
constraints: BoxConstraints(minHeight: 48.0, maxHeight: 150.0),
child: TextField(
...
),
),
// 操作栏
Row(
spacing: 10.0,
children: [
SizedBox(
height: 30.0,
child: TextButton(
onPressed: () {
// ...
},
style: ButtonStyle(
backgroundColor: WidgetStateProperty.all(isDeep ? Color(0xFF4F6BFE).withAlpha(30) : Colors.grey[200]),
padding: WidgetStateProperty.all(EdgeInsets.symmetric(horizontal: 10.0)),
),
child: Row(
spacing: 4.0,
children: [
Icon(Icons.stream, color: isDeep ? Color(0xFF4F6BFE) : Colors.black, size: 18.0,),
Text('深度思考(R1)', style: TextStyle(color: isDeep ? Color(0xFF4F6BFE) : Colors.black, fontSize: 13.0),),
],
),
),
),
SizedBox(
height: 30.0,
child: TextButton(
onPressed: () {
// ...
},
style: ButtonStyle(
backgroundColor: WidgetStateProperty.all(isNetwork ? Color(0xFF4F6BFE).withAlpha(30) : Colors.grey[200]),
padding: WidgetStateProperty.all(EdgeInsets.symmetric(horizontal: 10.0)),
),
child: Row(
spacing: 4.0,
children: [
Icon(Icons.travel_explore, color: isNetwork ? Color(0xFF4F6BFE) : Colors.black, size: 18.0,),
Text('联网', style: TextStyle(color: isNetwork ? Color(0xFF4F6BFE) : Colors.black, fontSize: 13.0),),
],
),
),
),
Spacer(),
SizedBox(
height: 30.0,
width: 30.0,
child: IconButton(
...
),
),
SizedBox(
height: 30.0,
width: 30.0,
child: IconButton(
...
),
)
],
),
],
),
),
],
)
);
flutter3+dio实现流式打字输出
// 调用deepseek接口
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}],
// deepseek-chat对话模型 deepseek-reasoner推理模型
'model': chatStore.getSetting('thinkingEnabled') ? 'deepseek-reasoner' : 'deepseek-chat',
'stream': true, // 流式输出
'max_tokens': 8192, // 限制一次请求中模型生成 completion 的最大 token 数(默认使用 4096)
'temperature': 0.4, // 严谨采样 越低越严谨(默认1)
}
);
以上就是flutter3.41+deepseek实战桌面版ai对话系统的一些项目分享,感谢大家的阅读与支持!
爆肝flutter3.41+dart3.11+getx+dio仿写deepseek智能ai应用app
vite8.0-webai网页版AI模板|vue3+vite8+deepseek专属web版流式ai回答助手
2026实战uniapp+vue3+mphtml调用deepseek【小程序+安卓+H5】流式输出ai
Electron41 + Vite8 + Vue3.5实战打造你的专属AI回答助手
2026最新款Tauri2.10+Vite7.3+DeepSeek桌面版AI系统Exe
2026最新款Vite7+Vue3+DeepSeek-V3.2+Markdown移动端流式输出AI会话
基于electron38+vite7+vue3 setup+elementPlus电脑端仿微信/QQ聊天软件
electron38.2-vue3os系统|Vite7+Electron38+Pinia3+ArcoDesign桌面版OS后台管理
2025最新款Electron38+Vite7+Vue3+ElementPlus电脑端后台系统Exe
自研2025版flutter3.38实战抖音app短视频+聊天+直播商城系统
基于flutter3.32+window_manager仿macOS/Wins风格桌面os系统
flutter3.27+bitsdojo_window电脑端仿微信Exe应用
自研tauri2.0+vite6.x+vue3+rust+arco-design桌面版os管理系统Tauri2-ViteOS