Flutter+三方库+鸿蒙6.0(API20+)实战:跨端TODO待办清单项目开发全解析。欢迎加入开源鸿蒙跨平台社区: https://openharmonycrossplatform.csdn.n

张开发
2026/4/16 11:46:19 15 分钟阅读

分享文章

Flutter+三方库+鸿蒙6.0(API20+)实战:跨端TODO待办清单项目开发全解析。欢迎加入开源鸿蒙跨平台社区: https://openharmonycrossplatform.csdn.n
本项目是专为鸿蒙6.0及以上版本API Level 20 打造的Flutter跨端实战项目面向鸿蒙原生开发者新手无需深厚跨端基础通过集成鸿蒙6.0专属适配的Flutter三方库实现一套代码运行在鸿蒙6.0设备上的TODO待办清单应用具备数据本地持久化、状态管理、轻量交互提示等核心功能全程贴合鸿蒙6.0API20最新开发规范可直接部署运行。一、开发环境适配鸿蒙6.0(API20)专属配置1.1 核心工具与SDK版本要求本次开发严格基于鸿蒙6.0正式版、API Level 20及以上版本需安装对应适配工具杜绝版本兼容问题DevEco Studio安装最新版DevEco Studio 5.0 Beta2及以上内置HarmonyOS 6.0API20 SDK必须在SDK Manager中勾选API20版本SDK、OHPM包管理器、模拟器镜像鸿蒙6.0手机/平板镜像。Flutter SDK选用适配鸿蒙6.0API20的Flutter官方稳定版版本≥3.28.0该版本已完成鸿蒙6.0全平台适配支持API20接口调用。环境依赖Git 2.45、Dart SDK 3.5.0同步配置系统环境变量确保终端可直接调用Flutter、HarmonyOS命令。1.2 环境校验API20专属打开终端执行以下命令校验鸿蒙6.0API20环境是否配置成功校验Flutter整体环境flutter doctor精准校验鸿蒙6.0(API20)环境适配flutter doctor --android-licensesflutter config --enable-ohos执行后若显示[✓] HarmonyOS 6.0 (API20)相关标识代表环境配置达标可进入项目创建环节。二、创建适配鸿蒙6.0(API20)的Flutter项目2.1 项目创建命令API20专属参数打开终端进入项目存储目录执行适配鸿蒙6.0API20的项目创建命令指定仅支持鸿蒙平台避免冗余端适配创建Flutter项目指定鸿蒙6.0(API20)为目标平台项目名flutter_harmony6_todoflutter create flutter_harmony6_todo --platformsohos --ohos-api-level20进入项目根目录cd flutter_harmony6_todo2.2 鸿蒙6.0项目核心配置修改进入项目ohos目录打开module.json5配置文件将SDK版本强制指定为API20适配鸿蒙6.0系统核心配置如下{“module”: {“name”: “entry”,“type”: “entry”,“srcEntry”: “./ets/entryability/EntryAbility.ets”,“description”: “Flutter鸿蒙6.0 TODO项目”,“mainElement”: “EntryAbility”,“deviceTypes”: [“phone”,“tablet”],“deliveryWithInstall”: true,“installationFree”: false,“pages”: “$profile:pages”,“abilities”: [{“name”: “EntryAbility”,“srcEntry”: “./ets/entryability/EntryAbility.ets”,“description”: “MainAbility”,“type”: “page”,“launchType”: “standard”,“orientation”: “unspecified”,“supportWindowMode”: [“windowed”, “fullscreen”],“priority”: 3,“labels”: [{“value”: “Flutter鸿蒙TODO”,“language”: “zh-CN”}]}]},“app”: {“apiVersion”: {“compatible”: 20,“target”: 20,“releaseType”: “Release”},“bundleName”: “com.example.flutterharmony6todo”,“vendor”: “example”,“versionCode”: 1,“versionName”: “1.0.0”}}关键说明compatible和target均设置为20确保项目仅兼容鸿蒙6.0及以上系统低版本鸿蒙设备无法安装保证运行稳定性。三、鸿蒙6.0(API20)适配三方库选型与集成针对鸿蒙6.0API20系统选用官方认证、API20专属适配的Flutter三方库无兼容问题直接集成即可调用本次项目核心三方库provider: ^6.2.0Flutter状态管理库适配鸿蒙6.0线程模型实现TODO数据跨组件同步shared_preferences_ohos: ^2.3.0鸿蒙6.0专属本地存储三方库基于API20数据存储接口开发替代通用版shared_preferences兼容性拉满fluttertoast_ohos: ^8.3.0鸿蒙6.0系统弹窗适配三方库遵循鸿蒙6.0 UI设计规范替代通用版fluttertoast避免弹窗样式错乱3.1 pubspec.yaml三方库配置打开项目根目录pubspec.yaml文件严格按照YAML语法添加鸿蒙6.0(API20)专属三方库依赖配置如下name: flutter_harmony6_tododescription: 适配鸿蒙6.0(API20)的Flutter跨端TODO待办清单项目version: 1.0.01适配API20的Dart与Flutter版本约束environment:sdk: ‘3.5.04.0.0’flutter: ‘3.28.0’dependencies:flutter:sdk: flutter鸿蒙6.0适配 状态管理三方库provider: ^6.2.0鸿蒙6.0(API20)专属 本地持久化三方库shared_preferences_ohos: ^2.3.0鸿蒙6.0(API20)专属 轻量提示三方库fluttertoast_ohos: ^8.3.0dev_dependencies:flutter_test:sdk: flutterflutter_lints: ^4.0.0启用Material3适配鸿蒙6.0扁平化UI风格flutter:uses-material-design: true3.2 三方库安装与OHPM同步终端执行命令完成Flutter三方库安装并同步鸿蒙6.0 OHPM包依赖确保API20接口调用正常安装Flutter三方库flutter pub get同步鸿蒙6.0 OHPM依赖API20专属步骤cd ohosohpm installcd …执行完成后三方库完成全量集成可直接在代码中调用鸿蒙6.0专属接口。四、核心代码实现鸿蒙6.0(API20)TODO项目4.1 数据状态管理类Provider鸿蒙本地存储在lib目录下创建todo_model.dart文件基于provider三方库实现状态管理调用shared_preferences_ohos三方库完成鸿蒙6.0本地数据持久化代码带详细注释适配API20规范import ‘package:flutter/foundation.dart’;// 导入鸿蒙6.0专属本地存储三方库import ‘package:shared_preferences_ohos/shared_preferences_ohos.dart’;// TODO数据状态管理类继承ChangeNotifier适配鸿蒙6.0线程机制class TodoModel extends ChangeNotifier {// 存储待办事项 _todoList [];// 对外提供待办列表的只读 get todoList _todoList;// 构造函数初始化时加载鸿蒙6.0本地存储的TODO数据TodoModel() {loadLocalTodoData();}/// 添加待办事项/// [todo]输入的待办内容void addTodoItem(String todo) {// 过滤空内容if (todo.trim().isEmpty) return;_todoList.add(todo.trim());// 保存到鸿蒙6.0本地存储saveTodoToLocal();// 通知UI刷新provider三方库核心机制notifyListeners();}/// 删除待办事项/// [index]待办事项在列表中的索引void deleteTodoItem(int index) {_todoList.removeAt(index);// 同步更新鸿蒙6.0本地存储saveTodoToLocal();// 通知UI刷新notifyListeners();}/// 保存TODO数据到鸿蒙6.0本地shared_preferences_ohos三方库调用saveTodoToLocal() async {// 获取鸿蒙6.0专属本地存储实例final SharedPreferencesOhos prefs await SharedPreferencesOhos.getInstance();// 以键值对形式存储列表数据键名harmony6_todo_listawait prefs.setStringList(‘harmony6_todo_list’, _todoList);}/// 从鸿蒙6.0本地加载TODO数据shared_preferences_ohos三方库调用 loadLocalTodoData() async {final SharedPreferencesOhos prefs await SharedPreferencesOhos.getInstance();// 读取本地数据无数据时返回空列表_todoList prefs.getStringList(‘harmony6_todo_list’) ?? [];// 加载完成后通知UI刷新notifyListeners();}/// 清空所有待办事项拓展功能void clearAllTodo() {_todoList.clear();saveTodoToLocal();notifyListeners();}}4.2 主页面UI与交互实现修改lib/main.dart文件编写适配鸿蒙6.0 UI风格的主页面集成三大三方库实现TODO添加、删除、提示功能代码适配API20交互规范import ‘package:flutter/material.dart’;import ‘package:provider/provider.dart’;// 导入鸿蒙6.0专属提示框三方库import ‘package:fluttertoast_ohos/fluttertoast_ohos.dart’;import ‘todo_model.dart’;void main() {runApp(// 绑定状态管理Provider全局共享TODO数据ChangeNotifierProvider(create: (context) TodoModel(),child: const FlutterHarmony6TodoApp(),),);}// 项目主应用组件class FlutterHarmony6TodoApp extends StatelessWidget {const FlutterHarmony6TodoApp({super.key});overrideWidget build(BuildContext context) {return MaterialApp(title: ‘Flutter鸿蒙6.0 TODO清单’,// 适配鸿蒙6.0系统主题跟随系统深色/浅色模式theme: ThemeData(colorScheme: ColorScheme.fromSeed(seedColor: Colors.blueAccent,brightness: Brightness.light,),useMaterial3: true,),darkTheme: ThemeData(colorScheme: ColorScheme.fromSeed(seedColor: Colors.blueAccent,brightness: Brightness.dark,),useMaterial3: true,),// 适配鸿蒙6.0系统主题模式themeMode: ThemeMode.system,home: const TodoMainPage(),debugShowCheckedModeBanner: false,);}}// TODO主页面class TodoMainPage extends StatefulWidget {const TodoMainPage({super.key});createState() _TodoMainPageState();}class _TodoMainPageState extends {// 输入框控制器获取待办事项输入内容final TextEditingController _todoInputController TextEditingController();// 鸿蒙6.0专属Toast实例final FToastOhos _fToast FToastOhos();overridevoid initState() {super.initState();// 初始化Toast绑定当前上下文适配鸿蒙6.0弹窗层级_fToast.init(context);}overrideWidget build(BuildContext context) {// 获取Provider状态管理实例final TodoModel todoModel Provider(context);return Scaffold( // 适配鸿蒙6.0顶部状态栏样式 appBar: AppBar( title: const Text(Flutter三方库鸿蒙6.0 TODO清单), centerTitle: true, elevation: 0, ), body: Padding( padding: const EdgeInsets.symmetric(horizontal: 18, vertical: 20), child: Column( children: [ // 待办事项输入区域 Row( crossAxisAlignment: CrossAxisAlignment.center, children: [ Expanded( child: TextField( controller: _todoInputController, decoration: InputDecoration( hintText: 请输入待办事项鸿蒙6.0专属, border: const OutlineInputBorder( borderRadius: BorderRadius.all(Radius.circular(12)), ), filled: true, fillColor: Colors.grey.shade50, ), style: const TextStyle(fontSize: 16), ), ), const SizedBox(width: 12), // 添加待办按钮 ElevatedButton( onPressed: () { String inputContent _todoInputController.text.trim(); if (inputContent.isEmpty) { // 空内容提示 showHarmonyToast(请输入有效待办内容); return; } // 调用添加方法 todoModel.addTodoItem(inputContent); // 添加成功提示 showHarmonyToast(待办事项添加成功); // 清空输入框 _todoInputController.clear(); }, style: ElevatedButton.styleFrom( padding: const EdgeInsets.symmetric(horizontal: 20, vertical: 16), shape: RoundedRectangleBorder( borderRadius: BorderRadius.circular(12), ), ), child: const Text(添加, style: TextStyle(fontSize: 16)), ), ], ), const SizedBox(height: 25), // 待办列表展示区域 Expanded( child: todoModel.todoList.isEmpty ? const Center( child: Text( 暂无待办事项快来添加吧, style: TextStyle(fontSize: 18, color: Colors.grey), ), ) : ListView.builder( itemCount: todoModel.todoList.length, itemBuilder: (context, index) { return Card( margin: const EdgeInsets.only(bottom: 10), shape: RoundedRectangleBorder( borderRadius: BorderRadius.circular(12), ), elevation: 2, child: ListTile( title: Text( todoModel.todoList[index], style: const TextStyle(fontSize: 17), ), trailing: IconButton( icon: const Icon(Icons.delete_outline, color: Colors.redAccent, size: 24), onPressed: () { // 调用删除方法 todoModel.deleteTodoItem(index); // 删除成功提示 showHarmonyToast(待办事项已删除); }, ), contentPadding: const EdgeInsets.symmetric(horizontal: 16, vertical: 8), ), ); }, ), ), ], ), ), );}/// 封装鸿蒙6.0专属Toast提示方法fluttertoast_ohos三方库/// [msg]提示文字内容void showHarmonyToast(String msg) {_fToast.showToast(child: Container(padding: const EdgeInsets.symmetric(horizontal: 24, vertical: 12),decoration: BoxDecoration(color: Colors.blueAccent.withOpacity(0.9),borderRadius: BorderRadius.circular(8),),child: Text(msg, style: const TextStyle(color: Colors.white, fontSize: 16)),),gravity: ToastGravityOhos.CENTER,toastDuration: const Duration(seconds: 1),);}overridevoid dispose() {// 释放输入框控制器资源_todoInputController.dispose();super.dispose();}}五、鸿蒙6.0(API20)设备运行与部署5.1 运行环境准备鸿蒙6.0模拟器打开DevEco Studio创建API20/鸿蒙6.0手机模拟器启动并保持运行状态。鸿蒙6.0真机将鸿蒙6.0及以上版本手机开启开发者模式、USB调试、允许安装未知来源应用通过USB连接电脑DevEco Studio可识别设备。5.2 项目运行命令API20专属终端执行以下命令直接将项目部署到鸿蒙6.0(API20)设备支持热重载运行项目到鸿蒙6.0设备指定API20flutter run -d ohos --ohos-api-level20首次运行会编译鸿蒙6.0相关资源等待2-3分钟项目成功启动后即可在设备上看到完整的TODO应用界面。5.3 功能验证鸿蒙6.0专属输入待办内容点击添加列表实时更新弹出鸿蒙6.0样式提示框删除待办事项数据同步移除本地存储持久化生效关闭应用重新打开待办数据不丢失验证shared_preferences_ohos三方库适配正常切换系统深色/浅色模式应用主题同步变化适配鸿蒙6.0系统规范。六、项目核心亮点与适配说明版本精准适配全程基于鸿蒙6.0API20开发SDK版本无降级贴合最新鸿蒙生态规范三方库专属优化摒弃通用版三方库采用鸿蒙6.0(API20)专属适配版解决跨端兼容痛点鸿蒙原生体验UI风格、弹窗样式、数据存储均遵循鸿蒙6.0设计规范无跨端违和感新手友好代码全注释步骤无省略鸿蒙原生开发者可零门槛上手Flutter跨端开发。七、常见问题排查鸿蒙6.0API20专属三方库报错确认使用shared_preferences_ohos和fluttertoast_ohos而非通用版重新执行flutter pub get ohpm install无法运行检查DevEco Studio是否配置API20 SDK项目module.json5中API版本是否为20热重载失效执行flutter clean清理缓存重新运行flutter run -d ohos --ohos-api-level20。

更多文章