news 2026/4/27 4:47:20

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

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
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 跨端技术后,可快速实现一套代码多端运行,大幅提升开发效率。后续可扩展更多三方库(如网络请求、图片加载),开发更复杂的鸿蒙跨端应用!

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/27 4:45:37

Weaviate向量数据库实战:从部署到多模态搜索与生产优化

1. 从零开始&#xff1a;理解Weaviate与向量数据库的核心价值 如果你正在机器学习和AI应用领域摸索&#xff0c;尤其是在处理文本、图像、音频这类非结构化数据时&#xff0c;一定绕不开一个核心问题&#xff1a;如何快速、准确地找到“相似”的内容&#xff1f;传统的基于关键…

作者头像 李华
网站建设 2026/4/27 4:45:23

AI 编程神器:MonkeyCode 使用心得 —— 重塑开发效率,

我使用 MonkeyCode 的心得分享 大家好&#xff01;作为一名热爱编程刚入门不久的新手&#xff0c;我想分享一下我最近使用 MonkeyCode 的心得。MonkeyCode 是一款基于人工智能的编程辅助工具&#xff0c;它彻底改变了我的编码体验。从安装到日常使用&#xff0c;整个过程流畅无…

作者头像 李华
网站建设 2026/4/27 4:34:58

SillyTavern本地AI聊天前端:从架构解析到高阶部署实战

1. 从零开始&#xff1a;SillyTavern 是什么&#xff0c;以及为什么你需要它 如果你对 AI 聊天机器人&#xff08;LLM&#xff09;的印象还停留在网页版 ChatGPT 那个一问一答的单调对话框&#xff0c;那么 SillyTavern 会彻底颠覆你的认知。简单来说&#xff0c;SillyTavern …

作者头像 李华
网站建设 2026/4/27 4:33:30

全新短剧影视云盘资源搜索引擎系统源码 亲测内含上万部短剧资源

内容目录一、详细介绍二、效果展示1.部分代码2.效果图展示三、学习资料下载一、详细介绍 全新短剧影视云盘资源搜索引擎系统源码 亲测可用 搭建说明 1、运行环境&#xff1a;NginxPHP7.2MySQL5.6&#xff08;注意必须得PHP7.2其他版本不兼容&#xff09; 2、上传源码到服务…

作者头像 李华
网站建设 2026/4/27 4:29:20

机器学习概率校准:原理与实践指南

1. 校准分类模型的核心价值 在机器学习分类任务中&#xff0c;我们常常遇到一个关键问题&#xff1a;模型输出的概率是否真实反映了样本属于某类的实际可能性&#xff1f;比如一个二分类模型预测某样本属于正类的概率为0.7&#xff0c;这个数值是否意味着该样本有70%的可能性确…

作者头像 李华
网站建设 2026/4/27 4:17:28

Proxmox VE Ceph 超融合集群落地实战

Proxmox VE Ceph 超融合集群落地实战 系列文章 #3 | 后 VMware 时代企业虚拟化实战 目录 为什么选 Ceph硬件选型与规划集群部署步骤存储池与 CephFS 配置性能调优故障处理与扩容监控与告警常见坑 一、为什么选 Ceph Proxmox 内置 Ceph,提供软件定义存储(SDS),对标 VMware vSA…

作者头像 李华