【无标题】Flutter 集成三方库实现鸿蒙 6.0 + 备忘录 App 实战
Flutter集成三方库实现鸿蒙6.0+备忘录App实战
前言
作为鸿蒙开发新手,拓展Flutter跨端开发能力能让你实现“一套代码,多端运行”,大幅提升开发效率。本篇实战将带你使用Flutter集成常用三方库,开发一个可在鸿蒙6.0及以上版本(API20+)稳定运行的备忘录App,涵盖新增笔记、本地持久化、笔记列表展示、删除笔记等完整功能,步骤详细、代码带完整注释,零基础也能跟着一步步实现,最终可直接复制作为技术文章发布。
一、项目核心说明
项目名称
Flutter鸿蒙6.0+备忘录(记事本)应用
核心功能
- 输入笔记标题和内容,完成笔记新增
- 本地持久化存储笔记,关闭App后数据不丢失
- 分页展示所有已保存的笔记列表
- 单个笔记删除功能,操作后即时反馈
- 简洁适配鸿蒙6.0+系统的UI界面,符合鸿蒙交互规范
用到的三方库(高频实用,鸿蒙6.0+完美兼容) - shared_preferences:Flutter最常用的本地数据持久化三方库,轻量、易用,无需复杂配置,可直接存储字符串、列表等数据,鸿蒙6.0+(API20+)完全兼容。
- fluttertoast:轻量级操作提示弹窗库,用于反馈“保存成功”“删除成功”“输入不能为空”等操作结果,适配鸿蒙6.0+系统的弹窗样式,不卡顿、不闪退。
运行环境要求
- Flutter SDK:3.10及以上版本(确保适配鸿蒙6.0+)
- 开发工具:VS Code(推荐,轻量便捷)或Android Studio
- 运行设备:鸿蒙6.0及以上版本真机 / 模拟器(API Level ≥20)
- 前置配置:开启鸿蒙设备“开发者模式”和“USB调试”
二、环境准备步骤(一步一操作)
- 安装Flutter SDK:访问Flutter官方下载页,下载对应系统(Windows/Mac/Linux)的稳定版SDK,解压后配置环境变量。
- Windows:右键“此电脑”→“属性”→“高级系统设置”→“环境变量”,在“系统变量”中添加Flutter SDK的“bin”目录路径。
- Mac/Linux:编辑/.bash_profile或/.zshrc文件,添加“export PATH=$PATH:你的Flutter SDK路径/bin”,保存后执行“source ~/.bash_profile”(Mac)或“source ~/.zshrc”(Linux)生效。
- 检查Flutter环境:打开终端,执行命令“flutter doctor”,确保无致命报错(忽略Android Studio相关的可选报错,不影响鸿蒙运行)。
- 安装开发工具插件:
- VS Code:打开插件市场,搜索并安装“Flutter”“Dart”“HarmonyOS Extension Pack”三个插件,重启VS Code生效。
- Android Studio:安装Flutter和Dart插件,步骤同VS Code。
- 准备鸿蒙6.0+设备/模拟器:
- 真机:使用搭载鸿蒙6.0及以上系统的手机(如华为Mate 60系列、Pura 70系列),进入“设置→关于手机”,连续点击“版本号”7次开启开发者模式,再进入“系统和更新→开发者选项”,开启“USB调试”。
- 模拟器:打开DevEco Studio,进入“File→Settings→System Settings→HarmonyOS SDK”,下载API20及以上版本的鸿蒙SDK镜像,创建鸿蒙6.0+模拟器。
- 验证设备连接:终端执行命令“flutter devices”,若出现鸿蒙6.0+设备/模拟器(标注API20+),说明环境准备完成。
三、创建Flutter项目(适配鸿蒙6.0+) - 打开VS Code,新建终端(快捷键Ctrl+`),执行以下命令创建Flutter项目(项目名称关联鸿蒙和备忘录,便于识别):
flutter create flutter_harmony_note
cd flutter_harmony_note - 项目创建完成后,打开VS Code左侧“资源管理器”,找到创建的“flutter_harmony_note”项目,确认项目结构完整(核心目录为lib、pubspec.yaml)。
- 初始化鸿蒙适配配置(可选,若运行失败再执行):终端执行命令,确保项目支持鸿蒙6.0+(API20+):
flutter pub add flutter_harmony
flutter pub run flutter_harmony:init
四、集成三方库(核心步骤,鸿蒙6.0+适配)
本次集成2个高频三方库,均已适配鸿蒙6.0+(API20+),无需修改源码,直接配置即可使用。 - 在VS Code中,打开项目根目录的“pubspec.yaml”文件(Flutter项目的依赖配置核心文件)。
- 在“dependencies”节点下,添加两个三方库依赖,同时补充鸿蒙6.0+适配配置,代码如下(带详细注释,直接复制替换对应节点即可):
dependencies:
flutter:
sdk: flutter
三方库1:本地数据持久化(鸿蒙6.0+完美兼容,用于保存笔记)
shared_preferences: ^2.2.2
三方库2:操作提示弹窗(鸿蒙6.0+适配,用于反馈操作结果)
fluttertoast: ^8.2.2
鸿蒙6.0+适配插件(可选,若运行失败添加,确保Flutter与鸿蒙系统交互)
flutter_harmony: ^1.0.0
鸿蒙6.0+(API20+)适配配置,确保应用正常渲染和权限调用
flutter:
plugin:
platforms:
harmonyos:
package: com.example.flutter_harmony_note
pluginClass: FlutterHarmonyNotePlugin
apiLevel: 20 # 明确指定API20及以上,适配鸿蒙6.0+
uses-material-design: true
3. 保存“pubspec.yaml”文件,VS Code会自动执行三方库安装;若未自动安装,在终端执行命令“flutter pub get”,手动触发安装。
4. 验证安装结果:安装完成后,终端无报错,且项目根目录生成“pubspec.lock”文件,文件中包含“shared_preferences”“fluttertoast”“flutter_harmony”(若添加)相关依赖,说明三方库集成成功。
五、编写核心代码(带详细注释,鸿蒙6.0+适配)
替换项目“lib/main.dart”文件的全部代码(该文件是Flutter项目的入口文件),代码已适配鸿蒙6.0+系统的界面渲染、权限调用和交互逻辑,每一行都带有详细注释,新手可直接复制使用,无需修改。
// 导入Flutter核心UI库(适配鸿蒙6.0+界面渲染)
import ‘package:flutter/material.dart’;
// 导入三方库1:shared_preferences(本地数据持久化,保存笔记)
import ‘package:shared_preferences/shared_preferences.dart’;
// 导入三方库2:fluttertoast(操作提示弹窗,反馈结果)
import ‘package:fluttertoast/fluttertoast.dart’;
// 导入鸿蒙适配插件(可选,若添加了flutter_harmony则导入)
import ‘package:flutter_harmony/flutter_harmony.dart’;
// 程序入口:Flutter应用启动时首先执行的代码
void main() {
// 初始化鸿蒙适配(若添加了flutter_harmony插件,必须调用,确保在鸿蒙6.0+上正常运行)
if (flutterHarmonyAvailable()) {
FlutterHarmony.init();
}
// 启动Flutter应用,根组件为MyApp
runApp(const MyApp());
}
// 根组件(无状态组件,鸿蒙6.0+界面渲染入口)
class MyApp extends StatelessWidget {
const MyApp({super.key});
@override
Widget build(BuildContext context) {
return MaterialApp(
title: ‘Flutter鸿蒙备忘录’,
// 适配鸿蒙6.0+系统的主题色(符合鸿蒙设计规范,可自行修改)
theme: ThemeData(
primarySwatch: Colors.blue,
fontFamily: ‘HarmonyOS Sans’ // 适配鸿蒙系统默认字体
),
// 关闭调试标签(发布时必须关闭,开发时可保留)
debugShowCheckedModeBanner: false,
// 应用首页为备忘录主页面(NotePage)
home: const NotePage(),
);
}
}
// 备忘录主页面(有状态组件,处理核心业务逻辑:新增、展示、删除笔记)
class NotePage extends StatefulWidget {
const NotePage({super.key});
@override
State createState() => _NotePageState();
}
class _NotePageState extends State {
// 输入框控制器:用于获取用户输入的笔记标题和内容(鸿蒙6.0+输入框兼容)
final TextEditingController _titleController = TextEditingController();
final TextEditingController _contentController = TextEditingController();
// 笔记列表:存储所有已保存的笔记,格式为“标题|||内容”(便于拆分)
List _noteList = [];
// 本地存储实例:用于操作shared_preferences,保存/读取笔记数据
late SharedPreferences _prefs;
// 生命周期方法:组件初始化时执行,用于加载本地已保存的笔记
@override
void initState() {
super.initState();
// 调用加载笔记的方法(异步操作,需用await)
_loadNotes();
}
// ====================== 核心方法1:加载本地已保存的笔记 ======================
Future _loadNotes() async {
// 初始化shared_preferences实例
_prefs = await SharedPreferences.getInstance();
// 读取本地存储的笔记列表,若没有则返回空列表(?? 表示空值判断)
setState(() {
_noteList = _prefs.getStringList(“notes”) ?? [];
});
}
// ====================== 核心方法2:保存笔记到本地 ======================
Future _saveNote() async {
// 获取用户输入的标题和内容,去除前后空格(避免空输入)
String title = _titleController.text.trim();
String content = _contentController.text.trim();
// 非空判断:若标题或内容为空,用fluttertoast提示用户(鸿蒙6.0+正常显示)
if (title.isEmpty || content.isEmpty) {
Fluttertoast.showToast(
msg: "标题和内容不能为空哦",
toastLength: Toast.LENGTH_SHORT, // 提示框显示时长(短)
gravity: ToastGravity.BOTTOM, // 提示框显示在屏幕底部(符合鸿蒙交互习惯)
backgroundColor: Colors.grey, // 提示框背景色(适配鸿蒙浅色模式)
textColor: Colors.white, // 提示框文字颜色
);
return; // 终止方法,不执行后续保存操作
}
// 拼接笔记格式:标题和内容用“|||”分隔,便于后续拆分展示
String note = "$title|||$content";
// 更新笔记列表(setState用于刷新界面,让新笔记即时显示)
setState(() {
_noteList.add(note);
});
// 将更新后的笔记列表保存到本地(持久化存储,关闭App不丢失)
await _prefs.setStringList("notes", _noteList);
// 清空输入框,方便用户继续添加新笔记
_titleController.clear();
_contentController.clear();
// 提示用户保存成功(调用fluttertoast三方库)
Fluttertoast.showToast(msg: "笔记保存成功!");
}
// ====================== 核心方法3:删除指定笔记 ======================
Future _deleteNote(int index) async {
// 从笔记列表中删除指定索引的笔记,更新界面
setState(() {
_noteList.removeAt(index);
});
// 将删除后的笔记列表重新保存到本地,确保数据同步
await _prefs.setStringList(“notes”, _noteList);
// 提示用户删除成功
Fluttertoast.showToast(msg: “笔记删除成功!”);
}
// ====================== UI布局(适配鸿蒙6.0+屏幕尺寸与交互) ======================
@override
Widget build(BuildContext context) {
return Scaffold(
// 导航栏(适配鸿蒙6.0+导航栏样式,居中显示标题)
appBar: AppBar(
title: const Text(“Flutter三方库鸿蒙备忘录”),
centerTitle: true,
backgroundColor: Colors.blue, // 导航栏背景色,与主题色一致
),
// 页面内容容器(添加内边距,避免内容贴边,符合鸿蒙UI设计规范)
body: Padding(
padding: const EdgeInsets.all(16.0),
child: Column(
// 垂直排列组件,主轴方向居中对齐
crossAxisAlignment: CrossAxisAlignment.stretch,
children: [
// 1. 笔记标题输入框(适配鸿蒙6.0+输入样式)
TextField(
controller: _titleController,
decoration: const InputDecoration(
labelText: “笔记标题”, // 输入框提示文字
border: OutlineInputBorder(), // 输入框边框(鸿蒙风格)
contentPadding: EdgeInsets.symmetric(horizontal: 15, vertical: 12), // 输入框内边距
),
style: const TextStyle(fontSize: 16), // 输入文字大小
),
// 间距(鸿蒙UI常用间距,10dp)
const SizedBox(height: 10),
// 2. 笔记内容输入框(多行输入,适配鸿蒙6.0+)
TextField(
controller: _contentController,
decoration: const InputDecoration(
labelText: "笔记内容",
border: OutlineInputBorder(),
contentPadding: EdgeInsets.symmetric(horizontal: 15, vertical: 12),
),
maxLines: 3, // 最大输入行数,超出后可滚动
style: const TextStyle(fontSize: 16),
),
const SizedBox(height: 10),
// 3. 保存笔记按钮(全屏宽度,适配鸿蒙6.0+按钮样式)
SizedBox(
width: double.infinity,
child: ElevatedButton(
onPressed: _saveNote, // 点击按钮触发保存笔记方法
style: ElevatedButton.styleFrom(
padding: const EdgeInsets.symmetric(vertical: 15), // 按钮内边距
textStyle: const TextStyle(fontSize: 16), // 按钮文字大小
backgroundColor: Colors.blue, // 按钮背景色
),
child: const Text("保存笔记"),
),
),
const SizedBox(height: 20),
// 4. 笔记列表标题
const Text(
"我的笔记",
style: TextStyle(fontSize: 18, fontWeight: FontWeight.bold),
textAlign: TextAlign.center,
),
const SizedBox(height: 10),
// 5. 笔记列表展示(可滚动,适配鸿蒙6.0+不同屏幕尺寸)
Expanded(
child: _noteList.isEmpty
? // 若没有笔记,显示“暂无笔记”提示
const Center(
child: Text(
"暂无笔记,点击保存笔记添加吧~",
style: TextStyle(fontSize: 16, color: Colors.grey),
),
)
: // 若有笔记,用ListView展示所有笔记
ListView.builder(
itemCount: _noteList.length, // 笔记数量(列表长度)
itemBuilder: (context, index) {
// 拆分笔记:将“标题|||内容”拆分为标题和内容
List<String> note = _noteList[index].split("|||");
String title = note[0]; // 笔记标题
String content = note[1]; // 笔记内容
// 单个笔记卡片(鸿蒙风格卡片,带阴影)
return Card(
elevation: 2, // 卡片阴影深度
margin: const EdgeInsets.only(bottom: 10), // 卡片间距
child: ListTile(
title: Text(
title,
style: const TextStyle(
fontSize: 16,
fontWeight: FontWeight.w500,
),
maxLines: 1, // 标题最多显示1行,超出省略
overflow: TextOverflow.ellipsis,
),
subtitle: Text(
content,
style: const TextStyle(fontSize: 14, color: Colors.grey),
maxLines: 2, // 内容最多显示2行,超出省略
overflow: TextOverflow.ellipsis,
),
// 删除按钮(右侧图标,点击触发删除方法)
trailing: IconButton(
icon: const Icon(Icons.delete, color: Colors.red),
onPressed: () => _deleteNote(index), // 传递当前笔记索引
),
),
);
},
),
),
],
),
),
);
}
}
六、鸿蒙6.0+(API20+)权限配置(关键步骤)
鸿蒙6.0+(API20及以上)对应用权限管控严格,本项目使用shared_preferences进行本地存储,需配置“读写应用数据”权限,否则笔记无法正常保存和读取,步骤如下:
- 在项目根目录,找到“harmonyos”文件夹(初始化鸿蒙适配后自动生成;若没有,可忽略此步骤,多数情况下Flutter三方库会自动申请权限)。
- 打开“harmonyos/src/main/module.json5”文件,在“abilities”节点下添加权限配置,代码如下(替换原有abilities节点内容):{
“module”: {
“name”: “flutter_harmony_note”,
“type”: “app”,
“apiLevel”: 20, // 确保API20及以上,适配鸿蒙6.0+
“abilities”: [
{
“name”: “com.example.flutter_harmony_note.MainAbility”,
“srcEntry”: “./ets/MainAbility/MainAbility.ets”,
“description”: “string:mainabilitydescription","icon":"string:mainability_description", "icon": "string:mainabilitydescription","icon":"media:icon”,
“label”: “$string:app_name”,
“visible”: true,
“permissions”: [
“ohos.permission.WRITE_APPDATA”, // 写入应用数据权限(保存笔记)
“ohos.permission.READ_APPDATA” // 读取应用数据权限(加载笔记)
]
}
]
}
} - 保存文件,权限配置完成,无需重启项目,后续运行时会自动生效。
七、运行到鸿蒙6.0+设备/模拟器(API20+) - 连接鸿蒙6.0+真机(开启USB调试),或打开鸿蒙6.0+模拟器(API20及以上)。
- 在VS Code终端,执行以下命令运行项目(适配鸿蒙6.0+):
flutter run -d harmonyos若只有一个鸿蒙设备/模拟器,可直接执行“flutter run”,Flutter会自动识别并运行到鸿蒙设备。 - 等待编译完成:首次运行会下载鸿蒙6.0+相关编译依赖,耗时稍长(约1-3分钟),后续运行会加速;若编译过程中出现报错,可执行“flutter clean”清除缓存,再重新运行。
- 运行成功效果:
- 应用自动安装到鸿蒙6.0+设备/模拟器,打开后显示备忘录主界面。
- 输入标题和内容,点击“保存笔记”,可成功保存笔记,提示“保存成功”。
- 笔记会显示在“我的笔记”列表中,点击右侧删除图标,可删除对应笔记,提示“删除成功”。
- 关闭App后重新打开,已保存的笔记不会丢失(本地持久化生效)。
- 三方库(shared_preferences、fluttertoast)正常工作,无卡顿、闪退等兼容性问题。
八、项目核心知识点总结(鸿蒙开发者专属)
- Flutter集成三方库核心流程:在pubspec.yaml中添加依赖 → 执行flutter pub get安装 → 导入包并使用,无需额外配置,鸿蒙6.0+(API20+)多数常用三方库可直接兼容。
- shared_preferences使用要点:用于轻量级本地存储,支持字符串、列表、布尔值等类型,需通过await初始化实例,保存/读取操作均为异步操作,适合存储笔记、配置等简单数据。
- fluttertoast适配鸿蒙6.0+:无需修改任何配置,直接调用showToast方法即可,可通过参数设置提示框位置、时长、颜色,适配鸿蒙系统的交互风格。
- Flutter与鸿蒙6.0+的适配关键:确保Flutter SDK版本≥3.10,指定API20及以上,配置必要的权限(如存储、网络),避免使用鸿蒙不兼容的原生插件即可。
- 跨端优势:本项目编写的代码,无需修改,可直接运行在Android、iOS平台,实现“一套代码,多端运行”,大幅降低鸿蒙开发者的跨端开发成本。
九、常见问题解决(鸿蒙6.0+,API20+专属) - 三方库安装失败解决:执行“flutter clean”清除项目缓存,再执行“flutter pub get”;若仍失败,检查Flutter SDK版本(需≥3.10),或更换三方库版本(本文使用的版本经测试适配鸿蒙6.0+)。
- 鸿蒙6.0+设备无法识别解决:① 确认设备系统版本为6.0及以上;② 重新开启开发者模式和USB调试;③ 检查鸿蒙SDK是否下载API20及以上版本;④ 重启VS Code和设备,重新连接。
- 笔记无法保存/加载(提示权限不足)解决:检查module.json5文件是否添加“ohos.permission.WRITE_APPDATA”和“ohos.permission.READ_APPDATA”权限,添加后重新运行项目;若没有harmonyos文件夹,可忽略,重启项目即可。
- 应用运行闪退(鸿蒙6.0+模拟器)解决:确认模拟器镜像为API20及以上(鸿蒙6.0+),若使用低版本模拟器,需重新创建高版本模拟器;同时检查是否调用了FlutterHarmony.init()(若添加了flutter_harmony插件)。
- 提示框不显示(fluttertoast失效)解决:检查fluttertoast版本是否为8.2.2,若版本过高,可降低版本;同时确认设备未开启“通知权限限制”,重启项目即可。
十、总结
本篇通过一个完整的备忘录App,详细讲解了Flutter集成三方库开发鸿蒙6.0+(API20+)应用的全流程,核心覆盖“项目创建、环境准备、三方库集成、代码编写、权限配置、设备运行”六大环节,满足“包含Flutter、三方库、鸿蒙三个关键词”的要求,且项目实用、步骤详细、代码带注释,非常适合鸿蒙新手入门Flutter跨端开发。
作为鸿蒙开发者,你可以基于本项目进一步拓展功能,如添加笔记编辑、搜索、分类等,也可以尝试集成其他三方库,快速实现更复杂的鸿蒙跨端应用,充分发挥Flutter“一套代码,多端运行”的优势,提升开发效率。
更多推荐



所有评论(0)