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

Flutter 鸿蒙跨端开发实战:集成三方库实现鸿蒙设备 TODO 清单应用

欢迎加入开源鸿蒙跨平台社区: https://openharmonycrossplatform.csdn.net

本文专为鸿蒙入门开发者打造,以可直接运行的 TODO 清单项目为实战案例,手把手教你用 Flutter 跨端框架开发鸿蒙应用,全程包含Flutter 核心配置、三方库集成、鸿蒙真机 / 模拟器调试,零基础也能跟着实现完整功能。

一、项目核心说明

技术栈:Flutter(跨端框架)+ 鸿蒙 OpenHarmony(目标平台)+ 实用三方库

项目功能:待办事项添加、标记完成、删除、本地持久化存储

必用三方库:

  • shared_preferences:本地数据持久化(保存 TODO 数据,重启不丢失)

  • fluttertoast:轻量级提示弹窗(操作反馈)

适配目标:鸿蒙手机 / 平板 / 模拟器全兼容

二、前置环境准备(新手必看)

1. 基础环境安装

  • 安装 Flutter SDK(≥3.19.0,推荐稳定版)

  • 安装 DevEco Studio(鸿蒙官方 IDE,用于运行模拟器 / 真机)

  • 配置 Flutter 鸿蒙编译环境:
    终端执行:flutter config --enable-openharmony

2. 验证环境

终端输入:flutter devices,若显示鸿蒙设备 / 模拟器,说明环境配置成功。

三、创建 Flutter 鸿蒙项目

步骤 1:新建 Flutter 项目

终端执行命令,创建项目:

flutter create flutter_harmony_todocdflutter_harmony_todo

步骤 2:启用鸿蒙平台支持

项目根目录执行:

flutter create--platforms=openharmony.

执行后,项目会自动生成openharmony适配目录,完成鸿蒙基础配置。

四、集成三方库(核心步骤)

步骤 1:修改pubspec.yaml配置

打开项目根目录的pubspec.yaml文件,在dependencies节点下添加三方库:

dependencies:flutter:sdk:flutter# 本地持久化三方库(保存TODO数据)shared_preferences:^2.5.2# 提示弹窗三方库(操作反馈)fluttertoast:^8.2.12

步骤 2:安装三方库

终端执行命令,拉取依赖:

flutter pub get

等待依赖下载完成,无报错即集成成功。

五、完整项目代码实现(带详细注释)

替换项目lib/main.dart文件的全部代码,以下是可直接运行的完整代码:

import'package:flutter/material.dart';// 导入本地持久化三方库import'package:shared_preferences/shared_preferences.dart';// 导入提示弹窗三方库import'package:fluttertoast/fluttertoast.dart';voidmain(){runApp(constMyApp());}classMyAppextendsStatelessWidget{constMyApp({super.key});@overrideWidgetbuild(BuildContextcontext){returnMaterialApp(title:'Flutter鸿蒙TODO清单',// 关闭调试标签debugShowCheckedModeBanner:false,theme:ThemeData(primarySwatch:Colors.blue),home:constTodoPage(),);}}// TODO主页面classTodoPageextendsStatefulWidget{constTodoPage({super.key});@overrideState<TodoPage>createState()=>_TodoPageState();}class_TodoPageStateextendsState<TodoPage>{// 输入框控制器:获取输入的待办内容finalTextEditingController_todoController=TextEditingController();// 待办数据列表:存储所有TODO项List<String>_todoList=[];// 已完成项标记列表:记录哪些TODO被勾选List<bool>_isCompletedList=[];@overridevoidinitState(){super.initState();// 页面初始化时,加载本地存储的TODO数据_loadTodoData();}// ------------------- 核心方法:本地数据操作(三方库使用) -------------------// 1. 从本地加载TODO数据(shared_preferences三方库)Future<void>_loadTodoData()async{// 获取本地存储实例finalprefs=awaitSharedPreferences.getInstance();// 读取本地存储的待办列表,无数据则返回空数组setState((){_todoList=prefs.getStringList('todoList')??[];_isCompletedList=prefs.getStringList('isCompletedList')?.map((e)=>e=='true').toList()??List.generate(_todoList.length,(index)=>false);});}// 2. 保存TODO数据到本地(shared_preferences三方库)Future<void>_saveTodoData()async{finalprefs=awaitSharedPreferences.getInstance();// 存储待办内容列表awaitprefs.setStringList('todoList',_todoList);// 存储完成状态列表awaitprefs.setStringList('isCompletedList',_isCompletedList.map((e)=>e.toString()).toList(),);}// ------------------- 业务功能方法 -------------------// 添加待办事项void_addTodo(){StringtodoContent=_todoController.text.trim();// 校验输入内容不能为空if(todoContent.isEmpty){Fluttertoast.showToast(msg:"请输入待办内容");return;}setState((){_todoList.add(todoContent);_isCompletedList.add(false);// 清空输入框_todoController.clear();});// 保存到本地_saveTodoData();Fluttertoast.showToast(msg:"添加成功");}// 切换待办完成状态void_toggleComplete(int index){setState((){_isCompletedList[index]=!_isCompletedList[index];});_saveTodoData();}// 删除待办事项void_deleteTodo(int index){setState((){_todoList.removeAt(index);_isCompletedList.removeAt(index);});_saveTodoData();Fluttertoast.showToast(msg:"删除成功");}// ------------------- UI页面布局 -------------------@overrideWidgetbuild(BuildContextcontext){returnScaffold(appBar:AppBar(title:constText("Flutter鸿蒙TODO清单"),),body:Padding(padding:constEdgeInsets.all(16.0),child:Column(children:[// 输入框 + 添加按钮Row(children:[Expanded(child:TextField(controller:_todoController,decoration:constInputDecoration(hintText:"请输入待办事项",border:OutlineInputBorder(),),),),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){returnCard(margin:constEdgeInsets.only(bottom:8),child:ListTile(// 勾选框:标记完成状态leading:Checkbox(value:_isCompletedList[index],onChanged:(value)=>_toggleComplete(index),),// 待办内容:已完成则添加删除线title:Text(_todoList[index],style:TextStyle(decoration:_isCompletedList[index]?TextDecoration.lineThrough:TextDecoration.none,color:_isCompletedList[index]?Colors.grey:Colors.black,),),// 删除按钮trailing:IconButton(icon:constIcon(Icons.delete,color:Colors.red),onPressed:()=>_deleteTodo(index),),),);},),),],),),);}}

六、Flutter 应用运行到鸿蒙设备

步骤 1:启动鸿蒙模拟器 / 连接真机

  • 打开 DevEco Studio → 设备管理器 → 启动鸿蒙手机模拟器

  • 或用数据线连接鸿蒙真机,开启USB 调试

步骤 2:运行 Flutter 项目

终端执行命令,自动编译并安装到鸿蒙设备:

flutter run-dopenharmony

等待编译完成,鸿蒙设备上会自动打开 TODO 清单应用。

七、功能测试(验证效果)

  • 添加待办:输入内容点击添加,弹出「添加成功」提示

  • 标记完成:勾选复选框,文字自动添加灰色删除线

  • 删除待办:点击删除按钮,移除对应事项

  • 持久化验证:关闭应用重新打开,数据不会丢失(shared_preferences三方库生效)

  • 鸿蒙适配:界面完美适配鸿蒙系统风格,无卡顿、无兼容问题

八、核心知识点总结

  • Flutter 鸿蒙适配:通过flutter create \-\-platforms=openharmony快速启用鸿蒙平台支持

  • 三方库集成:在pubspec.yaml声明依赖,flutter pub get一键安装,鸿蒙平台完美兼容

  • 核心三方库作用:

    • shared_preferences:轻量级本地存储,无需数据库即可保存数据

    • fluttertoast:极简提示弹窗,提升用户体验

  • 跨端优势:一套 Flutter 代码,同时运行在 Android、iOS、鸿蒙设备,无需重复开发

九、常见问题解决

  • 三方库安装失败:检查网络,执行flutter clean后重新flutter pub get

  • 无法运行到鸿蒙设备:确认开启 USB 调试,执行flutter devices查看设备是否识别

  • 数据不持久化:检查\_saveTodoData方法是否在增删改后调用

结语

本案例是Flutter + 鸿蒙 + 三方库的入门级实战,覆盖了跨端开发、三方库集成、鸿蒙适配三大核心技能。作为鸿蒙开发者,掌握 Flutter 跨端技术后,可快速实现一套代码多端运行,大幅提升开发效率。后续可扩展更多三方库(如网络请求、图片加载),开发更复杂的鸿蒙跨端应用!

http://www.jsqmd.com/news/706801/

相关文章:

  • 小皮面板完全安装教程:2026年VPS新手从零到上线全攻略
  • HEIF Utility:Windows平台HEIF图片处理的终极解决方案
  • 嵌入式Linux学习笔记 | 数据结构(Day02)顺序表核心功能实现 + 快速排序 + 折半查找 + 作业实战
  • 智能工具生成引擎ToolGen:用自然语言自动生成可执行代码
  • 小红书专业号主体变更流程
  • DaVinci平台Linux视频驱动架构与优化实践
  • 深度学习中评估指标计算库TorchMetrics的使用
  • AI代码审查实战:让CodeRabbit当你的第二双眼睛
  • 物理信息神经网络驱动的阻变存储器参数反演:从时序电压响应中精准提取二氧化钛ReRAM物理参数(Python)
  • 电脑软件《图片转PDF转换器》 - 新手入门指南
  • Unsloth Sglang Vllm核心区别和使用场景
  • Dubbo线程池策略详解:Fixed、Cached、Limited与Eager对比
  • 2026正规免费量化交易软件推荐榜:ea量化交易软件/什么是量化交易/手机量化交易软件/散户如何做量化交易/期货量化交易系统/选择指南 - 优质品牌商家
  • 循环优化设计
  • 从零开始学C语言:环境搭建与首个代码
  • 梯度下降算法详解:原理、实现与优化技巧
  • 零基础秒落地!魔珐星云打造专属法务数字人
  • 成都地区、H型钢、350X350X12X19、Q235B、包钢、现货批发供应 - 四川盛世钢联营销中心
  • 用户上周说有两个孩子,这周说有三个孩子,Agent 如何处理记忆冲突?
  • Weaviate向量数据库实战:从部署到多模态搜索与生产优化
  • PyTorch训练管理:检查点与早停技术详解
  • 成都地区、H型钢、700X300X13X14、Q235B、包钢、现货批发供应 - 四川盛世钢联营销中心
  • 成都地区、低合金H型钢、500X200X10X16、Q355B、包钢、现货批发供应 - 四川盛世钢联营销中心
  • 记录一次Jenkins构建任务的坑
  • HTML总结
  • 成都地区、H型钢、588X300X12X20、Q235B、包钢、现货批发供应 - 四川盛世钢联营销中心
  • 205套思维工具(转)
  • caj2pdf:3个技巧让知网CAJ文献在Linux上重获新生
  • 2026川渝地区耐火砖技术分享:耐火材料供应厂家/耐火材料厂商/耐火材料厂家/耐火材料哪家好/耐火材料批发/耐火材料报价/选择指南 - 优质品牌商家
  • 为什么你的Dev Container正在悄悄上传源码?揭秘.gitignore之外的5类敏感数据泄漏路径(企业级隔离方案已落地)