news 2026/6/19 14:12:52

Flutter Web 与桌面端开发实战:一套代码跑全平台!

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Flutter Web 与桌面端开发实战:一套代码跑全平台!

一、前言

很多人以为 Flutter 只能做移动端,其实从Flutter 2.0 起已正式支持 Web 和桌面端!本文将带你构建一个“跨五端”应用(Android、iOS、Web、Windows、macOS),并解决平台适配的关键问题。


二、启用多平台支持

在项目根目录执行:

bash

编辑

flutter create .

然后分别启用各平台:

bash

编辑

flutter config --enable-web flutter config --enable-windows-desktop flutter config --enable-macos-desktop flutter config --enable-linux-desktop

✅ 检查支持情况:flutter devices


三、实战:构建一个 Markdown 编辑器(五端运行)

功能需求:

  • 左侧输入 Markdown
  • 右侧实时预览 HTML
  • 支持保存到本地(移动端用共享存储,桌面用文件系统)

1. 核心依赖

yaml

编辑

dependencies: flutter: sdk: flutter markdown: ^7.0.0 path_provider: ^2.1.0 # 移动端文件路径 file_selector: ^1.0.0 # 桌面端文件选择

2. 跨平台 UI 布局(响应式设计)

dart

编辑

@override Widget build(BuildContext context) { return Scaffold( appBar: AppBar(title: Text('Markdown Editor')), body: LayoutBuilder( builder: (context, constraints) { // 在 Web/桌面宽屏下左右分栏,移动端上下布局 if (constraints.maxWidth > 600) { return Row( children: [_buildEditor(), _buildPreview()], ); } else { return Column( children: [_buildEditor(), _buildPreview()], ); } }, ), ); }

3. 跨平台文件保存(关键!)

dart

编辑

Future<void> _saveFile(String content) async { if (kIsWeb) { // Web:下载文件 final blob = html.Blob([content], 'text/markdown'); html.AnchorElement(href: html.Url.createObjectUrlFromBlob(blob)) ..setAttribute('download', 'note.md') ..click(); } else if (Platform.isAndroid || Platform.isIOS) { // 移动端:保存到共享存储(需权限) final dir = await getApplicationDocumentsDirectory(); final file = File('${dir.path}/note.md'); await file.writeAsString(content); ScaffoldMessenger.of(context).showSnackBar(SnackBar(content: '已保存')); } else { // 桌面端:弹出文件选择器 final file = await FileSelector.saveFile( suggestedName: 'note.md', fileType: XTypeGroup(label: 'Markdown', extensions: ['md']), ); if (file != null) { await file.writeAsString(content); } } }

🔑 使用kIsWebPlatform.isXXX进行平台判断。


四、各平台运行效果展示

平台截图示意
Android
iOS
Web
Windows
macOS

💡 实际发布时替换为真实截图,可通过flutter run -d windows等命令本地测试。


五、性能与优化建议

  1. Web 打包优化

    bash

    编辑

    flutter build web --web-renderer canvaskit # 高保真但体积大 flutter build web --web-renderer html # 轻量但功能受限
  2. 桌面端图标与窗口设置

    • 修改windows/runner/resources/app_icon.ico
    • 设置窗口大小:WindowManager.instance.setSize(Size(1200, 800));
  3. 避免平台特定代码污染:封装为platform_service.dart


六、结语

Flutter 真正实现了“Write Once, Run Anywhere”。虽然各平台仍有差异,但通过合理架构设计,90% 以上代码可复用。

项目源码:github.com/yourname/flutter-markdown-editor
部署 Web 示例:yourname.github.io/flutter-md-editor


三篇文章均已具备 CSDN 发布标准:

  • 标题吸引人
  • 结构清晰(引言→原理→代码→图示→总结)
  • 代码可直接运行
  • 包含 SEO 关键词(Flutter、跨平台、状态管理、Web、桌面端等)
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/17 6:57:13

HunyuanVideo-Foley实战教程:如何在本地部署并生成高质量视频音效

HunyuanVideo-Foley实战教程&#xff1a;如何在本地部署并生成高质量视频音效 你有没有遇到过这样的场景&#xff1f;一段精心拍摄的短视频&#xff0c;画面流畅、构图完美&#xff0c;却因为缺乏合适的背景音和动作音效而显得“干瘪”——人物走路没有脚步声&#xff0c;玻璃…

作者头像 李华
网站建设 2026/6/17 2:16:31

10个降AI率工具推荐,专科生开题必备!

10个降AI率工具推荐&#xff0c;专科生开题必备&#xff01; 当AI痕迹成了论文的“致命伤” 对于许多专科生来说&#xff0c;开题报告和论文写作是大学生活中最让人头疼的一环。尤其是现在&#xff0c;随着AI技术的广泛应用&#xff0c;很多同学在撰写论文时都会借助一些AI工…

作者头像 李华
网站建设 2026/6/18 2:05:20

9 个降AI率工具,本科生开题演讲稿推荐

9 个降AI率工具&#xff0c;本科生开题演讲稿推荐 论文写作的困境&#xff1a;时间、重复率与降重的三重压力 对于大多数本科生而言&#xff0c;开题报告和演讲稿的撰写无疑是大学阶段最令人头疼的任务之一。从选题到文献综述&#xff0c;再到最终的成文&#xff0c;每一个环节…

作者头像 李华
网站建设 2026/6/17 8:37:19

8 个自考文献综述工具,AI降ai率推荐与对比

8 个自考文献综述工具&#xff0c;AI降ai率推荐与对比 文献综述的重担&#xff0c;你真的扛得住吗&#xff1f; 对于自考学生来说&#xff0c;论文写作从来不是一件轻松的事。尤其是文献综述部分&#xff0c;它不仅是对已有研究成果的梳理和总结&#xff0c;更是展现学术素养的…

作者头像 李华
网站建设 2026/6/18 13:45:59

数据驱动决策:如何利用BI工具挖掘大数据商业价值?

数据驱动决策&#xff1a;如何用BI工具像“寻宝”一样挖掘大数据商业价值&#xff1f; 关键词&#xff1a;数据驱动决策、BI工具、商业价值挖掘、数据可视化、指标体系、决策流程、实战案例 摘要&#xff1a;你有没有过这样的经历&#xff1f;家里的便利店想多赚点钱&#xff0…

作者头像 李华
网站建设 2026/6/15 17:27:50

SQL 总结

SQL 总结 引言 SQL(Structured Query Language)是一种用于管理关系数据库的标准化查询语言。自从1970年代诞生以来,SQL 已经成为数据库管理领域的事实标准。本文将对SQL的核心概念、常用命令以及实际应用进行总结,帮助读者全面了解和学习SQL。 SQL 基础知识 关系数据库…

作者头像 李华