当前位置: 首页 > article >正文

Flutter 跨端实战教程:鸿蒙开发者入门 + 三方库集成实践案例

Flutter 跨端实战教程鸿蒙开发者入门 三方库集成实践案例前言本文面向鸿蒙开发者新手从零开始学习Flutter 跨端开发。内容包含Flutter 基础使用、常用三方库集成、鸿蒙设备运行三大核心知识点。通过一个完整可运行的 TODO 清单案例一步一步带你搭建项目、编写代码、调试运行。一、项目概述1.1 项目名称Flutter 跨端 TODO 清单应用兼容鸿蒙 HarmonyOS1.2 实现功能添加待办任务标记任务完成/未完成删除任务本地数据持久化重启不丢失轻提示 Toast 反馈1.3 技术栈Flutter Dart三方库shared_preferences本地存储fluttertoast消息提示运行平台Android / iOS /鸿蒙 HarmonyOS二、环境准备2.1 必需工具Flutter SDK建议 3.13VS Code 或 Android Studio安装 Flutter Dart 插件鸿蒙设备一台或模拟器开启开发者模式与 USB 调试2.2 检查环境执行命令flutter doctor确保无关键报错能识别到连接设备即可。三、创建 Flutter 项目打开终端执行flutter create flutter_harmony_todocdflutter_harmony_todo项目结构简要说明lib/main.dart应用入口pubspec.yaml依赖配置类似鸿蒙的依赖管理文件assets/资源文件android/ios/各平台相关配置四、集成三方库打开pubspec.yaml在dependencies下添加dependencies:flutter:sdk:flutter# 本地持久化三方库shared_preferences:^2.2.3# 轻提示三方库fluttertoast:^8.2.8保存后执行安装flutter pub get五、编写代码带详细注释5.1 新建数据模型todo_model.dart在lib/下新建todo_model.dart/// 待办任务数据模型classTodoModel{Stringcontent;// 任务内容bool isDone;// 是否完成// 构造函数TodoModel({requiredthis.content,this.isDonefalse,});// 将对象转 Map用于本地存储MapString,dynamictoJson(){return{content:content,isDone:isDone,};}// 从 Map 恢复对象staticTodoModelfromJson(MapString,dynamicjson){returnTodoModel(content:json[content],isDone:json[isDone]??false,);}}5.2 主入口main.dart替换lib/main.dart全部内容importpackage:flutter/material.dart;// 本地存储三方库importpackage:shared_preferences/shared_preferences.dart;// Toast提示三方库importpackage:fluttertoast/fluttertoast.dart;// 导入模型importtodo_model.dart;// Flutter 应用入口voidmain(){runApp(constMyApp());}classMyAppextendsStatelessWidget{constMyApp({super.key});overrideWidgetbuild(BuildContextcontext){returnMaterialApp(title:Flutter 鸿蒙 TODO,theme:ThemeData(primarySwatch:Colors.blue),home:constTodoPage(),debugShowCheckedModeBanner:false,);}}// 主页面有状态组件classTodoPageextendsStatefulWidget{constTodoPage({super.key});overrideStateTodoPagecreateState()_TodoPageState();}class_TodoPageStateextendsStateTodoPage{// 输入框控制器finalTextEditingController_contentControllerTextEditingController();// 任务列表finalListTodoModel_todoList[];// 本地存储实例lateSharedPreferences_prefs;overridevoidinitState(){super.initState();// 初始化本地存储_initLocalStorage();}/// 初始化 shared_preferences 并加载本地数据Futurevoid_initLocalStorage()async{_prefsawaitSharedPreferences.getInstance();_loadTodoList();}/// 从本地存储加载任务列表Futurevoid_loadTodoList()async{ListString?jsonList_prefs.getStringList(todo_list);if(jsonList!null){setState((){_todoList.addAll(jsonList.map((item)TodoModel.fromJson(item)),);});}}/// 保存任务列表到本地Futurevoid_saveTodoList()async{ListStringjsonList_todoList.map((e)e.toJson().toString()).toList();await_prefs.setStringList(todo_list,jsonList);}/// 添加任务Futurevoid_addTodo()async{Stringcontent_contentController.text.trim();if(content.isEmpty){Fluttertoast.showToast(msg:请输入任务内容);return;}setState((){_todoList.add(TodoModel(content:content));});_contentController.clear();_saveTodoList();Fluttertoast.showToast(msg:添加成功);}/// 切换完成状态Futurevoid_toggleDone(int index)async{setState((){_todoList[index].isDone!_todoList[index].isDone;});_saveTodoList();}/// 删除任务Futurevoid_deleteTodo(int index)async{setState((){_todoList.removeAt(index);});_saveTodoList();Fluttertoast.showToast(msg:删除成功);}overrideWidgetbuild(BuildContextcontext){returnScaffold(appBar:AppBar(title:constText(Flutter × 鸿蒙 TODO 清单),),body:Padding(padding:constEdgeInsets.all(16),child:Column(children:[// 输入框 添加按钮Row(children:[Expanded(child:TextField(controller:_contentController,decoration:constInputDecoration(hintText:请输入待办事项,border:OutlineInputBorder(),),onSubmitted:(_)_addTodo(),),),constSizedBox(width:10),ElevatedButton(onPressed:_addTodo,child:constText(添加),),],),constSizedBox(height:20),// 任务列表Expanded(child:_todoList.isEmpty?constCenter(child:Text(暂无任务快去添加吧~)):ListView.builder(itemCount:_todoList.length,itemBuilder:(context,index){finaltodo_todoList[index];returnListTile(leading:Checkbox(value:todo.isDone,onChanged:(_)_toggleDone(index),),title:Text(todo.content,style:TextStyle(decoration:todo.isDone?TextDecoration.lineThrough:null,color:todo.isDone?Colors.grey:null,),),trailing:IconButton(icon:constIcon(Icons.delete_outline,color:Colors.red),onPressed:()_deleteTodo(index),),);},),),],),),);}}六、运行到鸿蒙设备6.1 连接设备鸿蒙手机开启开发者模式、USB 调试电脑连接手机6.2 查看设备flutter devices6.3 运行项目flutter run稍等编译完成后App 会直接安装并打开在鸿蒙设备上。七、功能测试输入任务 → 点击添加勾选 CheckBox 标记完成点击删除图标移除任务退出 App 重新打开数据依然存在shared_preferences生效操作均有 Toast 提示fluttertoast生效八、核心知识点总结Flutter 三方库 鸿蒙Flutter跨平台 UI 框架一套代码多端运行采用 Dart 语言组件化开发三方库shared_preferences轻量本地存储类似鸿蒙偏好存储fluttertoast统一多端提示样式鸿蒙兼容Flutter 可直接编译运行在鸿蒙系统绝大多数 Flutter 三方库在鸿蒙上无需额外改造鸿蒙开发者可平滑过渡到跨端开发九、扩展方向集成网络库dio对接鸿蒙后端接口使用provider/riverpod做状态管理增加主题切换、暗黑模式打包发布为鸿蒙支持的 APK 格式如果你想要更正式的教程风格带目录、一级二级标题、适合发布掘金/知乎/CSDN我可以再给你生成一版更规范的排版。

相关文章:

Flutter 跨端实战教程:鸿蒙开发者入门 + 三方库集成实践案例

Flutter 跨端实战教程:鸿蒙开发者入门 三方库集成实践案例 前言 本文面向鸿蒙开发者新手,从零开始学习 Flutter 跨端开发。 内容包含:Flutter 基础使用、常用三方库集成、鸿蒙设备运行三大核心知识点。 通过一个完整可运行的 TODO 清单案例&…...

Windows系统下FFmpeg的安装与环境配置指南

前言 FFmpeg作为开源多媒体处理领域的标杆工具,其安装配置是音视频开发的基础环节。 一、安装流程详解 1、下载预编译版本 通过FFmpeg官方下载页面获取Windows版本,推荐选择: Gyan/BtbN构建版本:包含完整编解码器支持 static…...

G-Helper:华硕笔记本的轻量级控制中心,5分钟告别臃肿官方软件

G-Helper:华硕笔记本的轻量级控制中心,5分钟告别臃肿官方软件 【免费下载链接】g-helper Lightweight, open-source control tool for ASUS laptops and ROG Ally. Manage performance modes, fans, GPU, battery, and RGB lighting across Zephyrus, Fl…...

Dify与Ollama容器化部署实战:从“max retries exceeded”报错到网络连通性深度解析

1. 容器化部署中的经典报错:为什么你的Dify连不上Ollama? 最近在帮朋友调试Dify和Ollama的集成环境时,遇到了一个特别典型的错误。当时控制台不断刷出这样的报错信息: httpconnectionpool(host127.0.0.1, port11434): max retries…...

稀缺资源!农业农村部试点项目PHP可视化配置规范白皮书(内部解密版·仅限本期订阅用户获取)

第一章:农业农村部试点项目PHP可视化配置规范白皮书概述 本白皮书面向农业农村部“数字乡村基础设施能力提升”试点项目,聚焦PHP后端服务在农业物联网平台、基层农情填报系统及涉农数据中台等场景中的可视化配置实践。其核心目标是统一配置管理范式&…...

如何让 CSS Grid 自适应容器尺寸并保持固定宽高

本文介绍如何通过 CSS 变量与 auto-fit 配合 calc() 动态计算行列尺寸,使 Grid 布局始终严格贴合预设容器大小(如 400400px),无论行列数如何变化,单元格自动等比缩放,杜绝溢出或留白。 本文介绍如何通…...

C#怎么限制并发请求数_C#如何保护服务器接口【必备】

SemaphoreSlim 是 .NET 专为异步并发控制设计的轻量信号量,支持 await、不阻塞线程,需单例注册、配超时、在 try/finally 或 using 中确保 Release,避免许可证泄漏。用 SemaphoreSlim 控制并发请求数最直接不是靠加锁或队列模拟,S…...

WinClaw实战教程 01|安全版OpenClaw从零部署:5分钟上手+全功能实测+避坑大全

摘要:2026年AI Agent已然从极客小众工具进化为全民级效率神器,OpenClaw(小龙虾)凭借AI直控电脑的核心能力引爆开源社区,但恶意Skill泛滥、AI误删数据、配置门槛极高、资产暴露等安全与易用性问题频发——某互联网公司员工因使用OpenClaw第三方Skill导致核心项目文档泄露,…...

AI报告审核驱动降本增效:IACheck助力电子电气检测机构优化合规成本结构

在电子电气行业快速发展的背景下,产品更新周期不断缩短,检测认证需求持续增长。无论是消费电子、工业设备,还是智能终端产品,在进入市场之前都需要通过严格的检测与认证流程。而检测报告,作为这一过程的核心输出&#…...

Swoole Worker进程莫名退出?Linux信号处理、OOM Killer与systemd资源限制的终极对齐方案

第一章:Swoole Worker进程莫名退出?Linux信号处理、OOM Killer与systemd资源限制的终极对齐方案Swoole Worker进程在高并发场景下突然终止,却无明确错误日志,是生产环境高频痛点。根本原因常非代码缺陷,而是底层系统机…...

【高并发支付配置生死线】:单机QPS 3200+场景下,PHP-FPM与Redis连接池的11项关键参数调优清单

第一章:高并发支付场景下的系统瓶颈诊断在每秒数千笔订单涌入的支付高峰(如电商大促、抢券活动),系统常表现出响应延迟陡增、超时率飙升、数据库连接池耗尽等典型症状。这些表象背后,往往隐藏着多层耦合的性能瓶颈——…...

为什么你的PHP异步服务越写越慢?——深入内核级I/O多路复用原理、内存泄漏陷阱与CPU亲和性配置(生产环境血泪复盘)

第一章:为什么你的PHP异步服务越写越慢?——问题现象与根因定位全景图当 PHP 项目引入 ReactPHP、Amp 或 Swoole 实现异步 I/O 后,开发者常预期性能线性提升,但实际却遭遇响应延迟加剧、内存持续增长、协程堆积甚至进程僵死等反直…...

Langchain .. 学习 --- LCEL和Runnable俅

一、什么是 Q 饱和运算? 1. 核心痛点:普通运算的 “数值回绕” 普通算术运算(如 ADD/SUB)溢出时,数值会按补码规则 “回绕”,导致结果完全错误: 示例:int8_t 类型最大值 127 1 → 结…...

【技术解析】NeuPAN:如何用“白盒”端到端学习重塑机器人导航的精度与实时性

1. NeuPAN如何用"白盒"端到端学习颠覆传统导航 当你在商场里看到清洁机器人灵巧地绕过人群,或在仓库中目睹AGV小车以厘米级精度穿梭于货架之间时,背后很可能隐藏着一项突破性技术——NeuPAN框架。这个由"深度展开神经编码器(DUNE)"和…...

海外电网并网标准智能监测系统——设计与实现

海外电网并网标准智能监测系统——设计与实现 摘要 随着全球能源转型加速推进,各国电网并网标准持续快速演进。分布式能源(DER)、逆变器型资源(IBR)、储能系统的大规模接入正在推动并网技术规范的深刻变革。2025年至2026年间,美国NERC发布了多项针对IBR建模与验证的新标…...

Ryujinx开源Switch模拟器:跨平台游戏体验的技术实现与优化指南

Ryujinx开源Switch模拟器:跨平台游戏体验的技术实现与优化指南 【免费下载链接】Ryujinx 用 C# 编写的实验性 Nintendo Switch 模拟器 项目地址: https://gitcode.com/GitHub_Trending/ry/Ryujinx 在游戏硬件快速迭代的今天,玩家们常常面临一个困…...

【2026年最新600套毕设项目分享】微信小程序的订餐系统(30020)

有需要的同学,源代码和配套文档领取,加文章最下方的名片哦 一、项目演示 项目演示视频 二、资料介绍 完整源代码(前后端源代码SQL脚本)配套文档(LWPPT开题报告/任务书)远程调试控屏包运行一键启动项目&…...

【技术精讲】从理论到实践:手把手教你完成DFA最小化

1. 什么是DFA最小化?为什么需要它? 想象一下你正在整理一个杂乱无章的衣柜。有些衣服你从来不穿(死状态),有些衣服功能重复(等价状态)。DFA最小化就像给衣柜做断舍离,保留所有必要的…...

脚本管理工具怎么选?从3个维度重新认识ScriptCat与油猴

脚本管理工具怎么选?从3个维度重新认识ScriptCat与油猴 【免费下载链接】scriptcat ScriptCat, a browser extension that can execute userscript; 脚本猫,一个可以执行用户脚本的浏览器扩展 项目地址: https://gitcode.com/gh_mirrors/sc/scriptcat …...

2025届最火的降重复率助手解析与推荐

Ai论文网站排名(开题报告、文献综述、降aigc率、降重综合对比) TOP1. 千笔AI TOP2. aipasspaper TOP3. 清北论文 TOP4. 豆包 TOP5. kimi TOP6. deepseek 其核心在于模仿人类写作的自然特征,以此来降低AIGC检测率先,要调整词…...

突破格式壁垒:RePKG实现资源提取与格式转换的技术革命

突破格式壁垒:RePKG实现资源提取与格式转换的技术革命 【免费下载链接】repkg Wallpaper engine PKG extractor/TEX to image converter 项目地址: https://gitcode.com/gh_mirrors/re/repkg 在数字内容创作与游戏开发领域,资源处理往往面临着格式…...

Mysql的行级锁到底是怎么加的?匦

1. 架构背景与演进动力 1.1 从单体到碎片化:.NET 的开源征程 在.NET Framework 时代,构建系统主要围绕 Windows 操作系统紧密集成,采用传统的封闭式开发模式。然而,随着.NET Core 的推出,微软开启了彻底的开源与跨平台…...

JTAG接口原理与调试实战指南

1. JTAG接口基础解析与核心功能JTAG(Joint Test Action Group)作为现代数字系统开发中不可或缺的调试接口,其重要性往往被工程师们低估。这个诞生于1985年的IEEE 1149.1标准,最初是为了解决PCB板级互联测试难题,如今已…...

从TRCA到空间滤波器:解码稳态视觉诱发电位(SSVEP)的神经信号增强之道

1. 什么是SSVEP和TRCA? 想象一下,你正盯着一个以固定频率闪烁的LED灯。这时你的大脑视觉皮层会产生一种特殊的电信号,这种信号会神奇地跟随着灯的闪烁节奏,就像在跳踢踏舞一样。这就是稳态视觉诱发电位(SSVEP),它是脑机…...

ReadCat:重新定义数字阅读体验的现代开源阅读器

ReadCat:重新定义数字阅读体验的现代开源阅读器 【免费下载链接】read-cat 一款免费、开源、简洁、纯净、无广告的小说阅读器 项目地址: https://gitcode.com/gh_mirrors/re/read-cat 在信息过载的时代,我们需要的不仅是阅读工具,更是…...

从零构建ROS履带车:揭秘AI与无人驾驶核心技术(2)

1. 从零搭建ROS履带车的硬件基础 想要打造一台能跑能跳的智能履带车,第一步得把硬件架子搭结实。我当年第一次做履带车时,用的就是淘宝上200块钱的金属履带底盘套件,搭配Jetson Nano开发板作为大脑。这里有个实用建议:选择履带宽度…...

探索黑苹果实战:零基础打造你的专属 macOS 系统

探索黑苹果实战:零基础打造你的专属 macOS 系统 【免费下载链接】Hackintosh 国光的黑苹果安装教程:手把手教你配置 OpenCore 项目地址: https://gitcode.com/gh_mirrors/hac/Hackintosh 核心价值:为什么选择开源黑苹果项目 你是否曾…...

终极指南:如何免费让Figma界面全中文,设计师工作效率提升秘籍

终极指南:如何免费让Figma界面全中文,设计师工作效率提升秘籍 【免费下载链接】figmaCN 中文 Figma 插件,设计师人工翻译校验 项目地址: https://gitcode.com/gh_mirrors/fi/figmaCN FigmaCN是一款专为中文用户打造的免费本地化插件&a…...

网闸项目如何落地与验收?这份实战指南请收好!

网闸部署不仅是技术活,更是系统工程。从规划到验收,每个环节都关乎最终效果。以下是结合实战总结的实施方案与验收标准,助你高效推进项目!🚀📋 一、实施四步法​1️⃣ 需求分析与规划​✔ 业务梳理&#xf…...

亚马逊向忠实Kindle用户“致谢“:停止支持旧款设备

亚马逊正以停止支持旧款设备的方式"回馈"长期忠实的Kindle用户,但同时也试图以新设备八折优惠及电子书购书抵用金来"降低影响"。正如科技领域的规律——没有任何设备能永远获得支持。亚马逊在今日发送给用户的邮件中宣布,自2026年5月…...