Flutter+鸿蒙6.0+三方库实战:简易跨端备忘录APP(API20+)
本文介绍了一个面向鸿蒙新手开发者的Flutter跨端开发教程,基于鸿蒙6.0+和API20+SDK,通过集成provider、shared_preferences和fluttertoast三个常用三方库,从零搭建一个简易备忘录APP。教程包含详细的环境配置步骤(包括鸿蒙定制版Flutter SDK安装)、项目架构设计(分为model、provider和page三层)以及核心开发流程,提供了带详细注
欢迎加入开源鸿蒙跨平台社区: https://openharmonycrossplatform.csdn.net
本文面向鸿蒙新手开发者,基于鸿蒙6.0以上版本、API20以上SDK,使用Flutter进行跨端开发,集成3个常用三方库(状态管理、本地存储、弹窗提示),从零搭建一个可直接运行的简易备忘录APP,包含完整操作步骤、带详细注释的代码及问题排查,全程贴合新手入门场景,每一步都可直接对照操作,最终可生成MD格式文档用于学习归档。
核心技术栈:Flutter 3.16.0 + 鸿蒙6.2.0 + API23(兼容API20+,满足SDK版本要求)
用到的三方库(均适配鸿蒙6.0+,新手易上手):
-
provider:轻量级状态管理,简化页面与数据的通信(替代setState的繁琐操作,新手友好,无需复杂配置)
-
shared_preferences:轻量级本地存储,用于持久化保存备忘录数据(无需搭建复杂数据库,适配鸿蒙生态,适合轻量数据存储)
-
fluttertoast:轻量级弹窗提示,用于操作反馈(如“添加成功”“删除成功”“输入不能为空”,提升用户体验)
前置准备(新手必做):已安装DevEco Studio(用于鸿蒙开发)、Flutter环境(3.10以上版本);确保DevEco Studio中已配置鸿蒙6.0以上SDK(推荐6.2.0),且Minimum SDK Version设置为23(兼容API20+);安装鸿蒙定制版Flutter SDK(不可使用官方原生SDK),配置PATH环境变量(参考鸿蒙官方适配仓库)。
一、环境配置(关键步骤,新手必看,避免踩坑)
1.1 确认鸿蒙版本与SDK配置
-
打开DevEco Studio,点击顶部菜单栏「File」→「Project Structure」→「Project」,在弹出的窗口中:
-
「HarmonyOS SDK Version」选择6.2.0(或以上,满足鸿蒙6.0+要求);
-
「Minimum SDK Version」选择23(API23,兼容API20+,符合用户要求);
-
确认「Compile SDK Version」与鸿蒙SDK版本一致,点击「Apply」→「OK」保存配置。
-
-
配置鸿蒙定制版Flutter SDK(核心步骤,否则无法适配鸿蒙):
-
克隆鸿蒙官方Flutter适配仓库:终端执行命令
git clone https://gitcode.com/openharmony/flutter_ohos(仓库地址来自官方,确保适配性); -
解压克隆后的仓库文件,找到Flutter SDK所在路径(如:D:\flutter_ohos\flutter);
-
配置系统环境变量:右键「此电脑」→「属性」→「高级系统设置」→「环境变量」,在「系统变量」中找到「Path」,添加解压后的Flutter SDK路径(如:D:\flutter_ohos\flutter\bin);
-
验证配置:关闭所有终端,重新打开,输入命令
flutter --version,若输出包含「HarmonyOS」相关标识,说明配置成功。
-
1.2 创建Flutter+鸿蒙跨端项目
- 打开终端,进入想要创建项目的文件夹(如:D:\HarmonyProjects),执行以下命令创建项目(指定ohos平台,适配鸿蒙):
`# 初始化项目,指定平台为ohos(鸿蒙),项目名为flutter_harmony_memo
末尾的“.”表示在当前文件夹创建项目,可替换为具体路径(如:D:\HarmonyProjects\flutter_harmony_memo)
fvm flutter create --platforms=ohos --project-name flutter_harmony_memo .代码注释:① fvm是Flutter版本管理工具,若未安装fvm,可直接使用 flutter create --platforms=ohos --project-name flutter_harmony_memo .;② 必须指定--platforms=ohos,否则项目默认不支持鸿蒙平台;③ 确保执行命令时,使用的是鸿蒙定制版Flutter SDK(可通过flutter --version`再次验证)。
- 打开创建的项目,修改「pubspec.yaml」文件(核心配置文件,用于管理依赖和项目信息),确保与鸿蒙6.2.0兼容,完整配置如下(带详细注释):
`environment:
指定Dart SDK版本范围,与Flutter 3.16.0兼容
sdk: ‘>=3.1.0 <4.0.0’
依赖管理:添加三方库依赖(provider、shared_preferences、fluttertoast)
dependencies:
flutter:
sdk: flutter
状态管理三方库,版本选择稳定版,适配鸿蒙6.0+
provider: ^6.1.1
本地存储三方库,适配鸿蒙生态,用于保存备忘录数据
shared_preferences: ^2.2.2
弹窗提示三方库,轻量易用,适配鸿蒙
fluttertoast: ^8.2.2
开发环境依赖(可选,新手可默认)
dev_dependencies:
flutter_test:
sdk: flutter
flutter_lints: ^2.0.0
鸿蒙平台专属配置(关键,必须添加,否则无法在鸿蒙设备/模拟器运行)
flutter:
sdk: flutter
启用鸿蒙平台支持
ohos:
# 应用包名(自定义,格式为com.xxx.xxx,不可重复)
package: com.example.flutterharmonymemo
# 编译SDK版本,与DevEco Studio中配置的鸿蒙SDK版本一致(6.2.0)
compileSdkVersion: 6
# 最小SDK版本,设置为23(兼容API20+)
minSdkVersion: 23
# 目标SDK版本,与编译SDK版本一致
targetSdkVersion: 6
# 应用名称(显示在鸿蒙设备桌面)
label: Flutter鸿蒙备忘录
# 应用图标(新手可默认,后续可自行替换)
icon: mipmap/ic_launcher`配置说明:① 三方库版本选择稳定版,避免使用过高版本导致与鸿蒙6.0+不兼容;② ohos节点下的配置必须与DevEco Studio中的SDK配置一致,否则会出现编译错误;③ package包名需自定义,避免与其他应用重复。
- 安装三方库:配置完pubspec.yaml后,点击页面顶部的「Pub get」按钮(或终端执行
flutter pub get),等待依赖安装完成。安装成功后,终端会提示「Process finished with exit code 0」,若出现错误,可检查网络或三方库版本是否适配鸿蒙。
二、项目架构设计(新手易懂,简化复杂度)
为了方便新手理解和维护,采用简单的分层架构,不引入复杂概念,核心分为3个部分:
-
model层:定义备忘录数据模型(存储备忘录标题、内容、创建时间);
-
provider层:使用provider进行状态管理,统一管理备忘录数据(添加、删除、查询);
-
page层:页面开发(首页:展示所有备忘录;添加/编辑页面:新增或修改备忘录)。
项目目录结构(创建后如下,新手可直接对照创建):
flutter_harmony_memo/
├─ lib/
│ ├─ model/ # 数据模型层
│ │ └─ memo_model.dart # 备忘录数据模型
│ ├─ provider/ # 状态管理层
│ │ └─ memo_provider.dart # 备忘录状态管理
│ ├─ page/ # 页面层
│ │ ├─ home_page.dart # 首页(展示备忘录列表)
│ │ └─ add_memo_page.dart # 添加/编辑备忘录页面
│ └─ main.dart # 项目入口文件
├─ pubspec.yaml # 依赖配置文件
└─ ohos/ # 鸿蒙平台相关配置(自动生成,无需修改)
三、分步开发项目(核心步骤,带代码+注释)
3.1 开发数据模型(model层)
创建备忘录数据模型,用于规范备忘录的数据格式,方便后续存储和展示。
-
在lib目录下,新建model文件夹,在文件夹中创建memo_model.dart文件;
-
编写代码(带详细注释,新手可直接复制):
`// 备忘录数据模型
class MemoModel {
// 备忘录ID(唯一标识,用于删除、编辑时定位数据)
final String id;
// 备忘录标题
final String title;
// 备忘录内容
final String content;
// 备忘录创建时间(自动生成,无需手动输入)
final String createTime;
// 构造函数,初始化备忘录数据
// required表示必填参数(标题、内容),id和createTime自动生成
MemoModel({
required this.id,
required this.title,
required this.content,
required this.createTime,
});
// 序列化方法:将MemoModel对象转换为Map(用于shared_preferences本地存储)
// shared_preferences只能存储基本数据类型,因此需要将对象转为Map
Map<String, dynamic> toMap() {
return {
‘id’: id,
‘title’: title,
‘content’: content,
‘createTime’: createTime,
};
}
// 反序列化方法:将Map转换为MemoModel对象(用于从本地存储中读取数据)
static MemoModel fromMap(Map<String, dynamic> map) {
return MemoModel(
id: map[‘id’],
title: map[‘title’],
content: map[‘content’],
createTime: map[‘createTime’],
);
}
}`代码说明:① id使用UUID生成(后续在状态管理中实现),确保每个备忘录的ID唯一;② toMap()和fromMap()方法是为了适配shared_preferences本地存储,将对象与Map相互转换;③ 所有参数的作用都有明确注释,新手可快速理解。
3.2 开发状态管理(provider层)
使用provider管理备忘录数据,实现备忘录的添加、删除、查询功能,同时结合shared_preferences实现数据持久化(关闭APP后数据不丢失)。
-
在lib目录下,新建provider文件夹,在文件夹中创建memo_provider.dart文件;
-
编写代码(带详细注释,新手可直接复制):
`// 导入依赖包
import ‘package:flutter/foundation.dart’;
import ‘package:shared_preferences/shared_preferences.dart’;
import ‘…/model/memo_model.dart’;
import ‘package:uuid/uuid.dart’; // 用于生成唯一ID(需在pubspec.yaml中添加依赖)
// 1. 添加uuid依赖(用于生成备忘录唯一ID)
// 打开pubspec.yaml,在dependencies中添加:uuid: ^4.0.0,然后执行flutter pub get
// 备忘录状态管理类,继承ChangeNotifier(provider的核心类,用于通知页面数据变化)
class MemoProvider extends ChangeNotifier {
// 存储所有备忘录的列表
List _memoList = [];
// 对外提供只读的备忘录列表(避免外部直接修改数据,保证数据安全性)
List get memoList => _memoList;
// 初始化方法:页面启动时,从本地存储中读取备忘录数据
Future initMemo() async {
// 获取shared_preferences实例
SharedPreferences prefs = await SharedPreferences.getInstance();
// 从本地存储中读取数据(key为memo_list,默认值为空列表)
List memoStringList = prefs.getStringList(‘memo_list’) ?? [];
// 将读取到的字符串列表,转换为MemoModel列表
_memoList = memoStringList
.map((e) => MemoModel.fromMap(Map.fromJson(e))) // 反序列化
.toList();
// 通知所有监听的页面,数据已更新
notifyListeners();
}
// 添加备忘录方法
Future addMemo({required String title, required String content}) async {
// 生成唯一ID(使用uuid库)
String id = const Uuid().v4();
// 获取当前时间(格式:年-月-日 时:分:秒)
String createTime = DateTime.now().toString().split(‘.’).first;
// 创建新的备忘录对象
MemoModel newMemo = MemoModel(
id: id,
title: title,
content: content,
createTime: createTime,
);
// 将新备忘录添加到列表中
_memoList.add(newMemo);
// 同步到本地存储
await _saveMemoToLocal();
// 通知页面数据更新
notifyListeners();
}
// 删除备忘录方法(根据ID删除)
Future deleteMemo(String id) async {
// 从列表中移除指定ID的备忘录
_memoList.removeWhere((memo) => memo.id == id);
// 同步到本地存储
await _saveMemoToLocal();
// 通知页面数据更新
notifyListeners();
}
// 私有方法:将备忘录列表同步到本地存储
Future _saveMemoToLocal() async {
SharedPreferences prefs = await SharedPreferences.getInstance();
// 将MemoModel列表转换为字符串列表(序列化)
List memoStringList = _memoList
.map((memo) => json.encode(memo.toMap()))
.toList();
// 存储到本地(key为memo_list)
await prefs.setStringList(‘memo_list’, memoStringList);
}
}`
-
添加uuid依赖:打开pubspec.yaml,在dependencies中添加
uuid: ^4.0.0,然后点击「Pub get」安装依赖(用于生成备忘录唯一ID)。 -
代码说明:① ChangeNotifier是provider的核心,用于监听数据变化,当数据修改时,调用notifyListeners()通知页面刷新;② initMemo()方法在APP启动时执行,从本地读取数据,实现数据持久化;③ addMemo()和deleteMemo()方法分别实现添加和删除功能,操作后同步到本地存储;④ 私有方法_saveMemoToLocal()用于统一处理数据持久化,避免代码冗余。
3.3 开发首页(page层:展示备忘录列表)
首页用于展示所有备忘录,包含“添加备忘录”按钮、备忘录列表(显示标题和创建时间)、左滑删除功能,点击备忘录可进入编辑页面。
-
在lib目录下,新建page文件夹,在文件夹中创建home_page.dart文件;
-
编写代码(带详细注释,新手可直接复制):
`// 导入依赖包
import ‘package:flutter/material.dart’;
import ‘package:provider/provider.dart’;
import ‘package:fluttertoast/fluttertoast.dart’;
import ‘…/provider/memo_provider.dart’;
import ‘add_memo_page.dart’;
// 首页页面(无状态组件,数据由provider管理)
class HomePage extends StatelessWidget {
const HomePage({super.key});
@override
Widget build(BuildContext context) {
// 获取备忘录状态管理实例(监听数据变化)
final memoProvider = Provider.of(context);
// 页面初始化时,读取本地存储的备忘录数据
WidgetsBinding.instance.addPostFrameCallback((_) {
memoProvider.initMemo();
});
return Scaffold(
// 页面标题栏
appBar: AppBar(
title: const Text('Flutter鸿蒙备忘录'),
centerTitle: true, // 标题居中
backgroundColor: Colors.blueAccent, // 标题栏颜色
),
// 页面主体(备忘录列表)
body: memoProvider.memoList.isEmpty
? // 若备忘录列表为空,显示提示信息
const Center(
child: Text(
'暂无备忘录,点击右下角添加',
style: TextStyle(fontSize: 16, color: Colors.grey),
),
)
: // 若有备忘录,显示列表
ListView.builder(
// 列表长度 = 备忘录数量
itemCount: memoProvider.memoList.length,
// 构建列表项
itemBuilder: (context, index) {
// 获取当前索引的备忘录
final memo = memoProvider.memoList[index];
return Dismissible(
// 左滑删除的唯一标识(使用备忘录ID)
key: Key(memo.id),
// 左滑删除的背景(红色,显示“删除”文字)
background: Container(
color: Colors.red,
alignment: Alignment.centerRight,
padding: const EdgeInsets.only(right: 20),
child: const Text(
'删除',
style: TextStyle(color: Colors.white, fontSize: 16),
),
),
// 左滑确认删除的回调
onDismissed: (direction) {
// 调用provider的删除方法
memoProvider.deleteMemo(memo.id);
// 弹窗提示删除成功
Fluttertoast.showToast(
msg: '备忘录删除成功',
toastLength: Toast.LENGTH_SHORT, // 弹窗显示时间
gravity: ToastGravity.BOTTOM, // 弹窗位置(底部)
backgroundColor: Colors.grey, // 弹窗背景色
textColor: Colors.white, // 弹窗文字颜色
);
},
// 列表项内容(点击可进入编辑页面)
child: ListTile(
// 备忘录标题(加粗,超出部分省略)
title: Text(
memo.title,
style: const TextStyle(
fontSize: 18,
fontWeight: FontWeight.bold,
),
overflow: TextOverflow.ellipsis, // 超出部分显示“...”
),
// 备忘录创建时间(灰色小字)
subtitle: Text(
memo.createTime,
style: const TextStyle(fontSize: 14, color: Colors.grey),
),
// 点击列表项,进入编辑页面(传递当前备忘录数据)
onTap: () {
Navigator.push(
context,
MaterialPageRoute(
builder: (context) => AddMemoPage(
isEdit: true, // 标记为编辑模式
memo: memo, // 传递当前要编辑的备忘录
),
),
);
},
),
);
},
),
// 右下角添加按钮(浮动按钮)
floatingActionButton: FloatingActionButton(
onPressed: () {
// 点击按钮,进入添加备忘录页面
Navigator.push(
context,
MaterialPageRoute(
builder: (context) => const AddMemoPage(isEdit: false), // 标记为添加模式
),
);
},
backgroundColor: Colors.blueAccent,
child: const Icon(Icons.add, color: Colors.white),
),
);
}
}`代码说明:① 使用Provider.of获取状态管理实例,监听数据变化;② WidgetsBinding.instance.addPostFrameCallback用于页面渲染完成后,读取本地数据;③ 列表为空时显示提示信息,不为空时用ListView.builder构建列表;④ Dismissible组件实现左滑删除功能,配合fluttertoast显示删除反馈;⑤ 浮动按钮用于跳转到添加备忘录页面,列表项点击跳转到编辑页面。
-
在page文件夹中,创建add_memo_page.dart文件;
-
编写代码(带详细注释,新手可直接复制):
`// 导入依赖包
import ‘package:flutter/material.dart’;
import ‘package:provider/provider.dart’;
import ‘package:fluttertoast/fluttertoast.dart’;
import ‘…/provider/memo_provider.dart’;
import ‘…/model/memo_model.dart’;
// 添加/编辑备忘录页面(有状态组件,需要管理输入框内容)
class AddMemoPage extends StatefulWidget {
// 是否为编辑模式(true:编辑,false:添加)
final bool isEdit;
// 编辑模式下,传递的备忘录数据(可为null,添加模式下无需传递)
final MemoModel? memo;
// 构造函数,isEdit为必填参数,memo为可选参数
const AddMemoPage({
super.key,
required this.isEdit,
this.memo,
});
@override
State createState() => _AddMemoPageState();
}
class _AddMemoPageState extends State {
// 标题输入控制器(用于获取输入框内容)
final TextEditingController _titleController = TextEditingController();
// 内容输入控制器(用于获取输入框内容)
final TextEditingController _contentController = TextEditingController();
// 页面初始化:编辑模式下,将原有备忘录内容填充到输入框
@override
void initState() {
super.initState();
if (widget.isEdit && widget.memo != null) {
// 编辑模式,填充原有数据
_titleController.text = widget.memo!.title;
_contentController.text = widget.memo!.content;
}
}
// 释放资源(避免内存泄漏)
@override
void dispose() {
_titleController.dispose();
_contentController.dispose();
super.dispose();
}
// 保存备忘录方法
void _saveMemo() {
// 获取输入框内容(去除前后空格)
String title = _titleController.text.trim();
String content = _contentController.text.trim();
// 校验输入:标题和内容不能为空
if (title.isEmpty || content.isEmpty) {
Fluttertoast.showToast(
msg: '标题和内容不能为空',
toastLength: Toast.LENGTH_SHORT,
gravity: ToastGravity.BOTTOM,
backgroundColor: Colors.red,
textColor: Colors.white,
);
return;
}
// 获取状态管理实例
final memoProvider = Provider.of<MemoProvider>(context, listen: false);
if (widget.isEdit) {
// 编辑模式:删除原有备忘录,添加修改后的备忘录(简化实现,新手易理解)
memoProvider.deleteMemo(widget.memo!.id);
memoProvider.addMemo(title: title, content: content);
Fluttertoast.showToast(msg: '备忘录修改成功');
} else {
// 添加模式:调用添加方法
memoProvider.addMemo(title: title, content: content);
Fluttertoast.showToast(msg: '备忘录添加成功');
}
// 保存完成后,返回首页
Navigator.pop(context);
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
// 标题根据模式切换(添加/编辑)
title: Text(widget.isEdit ? ‘编辑备忘录’ : ‘添加备忘录’),
centerTitle: true,
backgroundColor: Colors.blueAccent,
// 返回按钮
leading: IconButton(
icon: const Icon(Icons.arrow_back, color: Colors.white),
onPressed: () {
// 点击返回,关闭当前页面
Navigator.pop(context);
},
),
// 保存按钮(右上角)
actions: [
TextButton(
onPressed: _saveMemo, // 点击保存,调用_saveMemo方法
child: const Text(
‘保存’,
style: TextStyle(color: Colors.white, fontSize: 16),
),
),
],
),
// 页面主体(输入框)
body: Padding(
padding: const EdgeInsets.all(16.0), // 内边距,避免输入框贴边
child: Column(
children: [
// 标题输入框
TextField(
controller: _titleController,
decoration: const InputDecoration(
labelText: ‘请输入备忘录标题’,
labelStyle: TextStyle(color: Colors.grey),
border: OutlineInputBorder(), // 输入框边框
),
style: const TextStyle(fontSize: 18),
maxLines: 1, // 标题只能输入一行
),
const SizedBox(height: 16), // 间距
// 内容输入框
TextField(
controller: _contentController,
decoration: const InputDecoration(
labelText: ‘请输入备忘录内容’,
labelStyle: TextStyle(color: Colors.grey),
border: OutlineInputBorder(),
alignLabelWithHint: true, // 标签与输入内容对齐
),
style: const TextStyle(fontSize: 16),
maxLines: null, // 内容可多行输入
minLines: 5, // 最小行数为5行
expands: false, // 不自动扩展
),
],
),
),
);
}
}`代码说明:① 使用StatefulWidget是因为需要管理输入框的内容(通过TextEditingController);② initState()方法在编辑模式下,将原有备忘录数据填充到输入框;③ _saveMemo()方法用于校验输入、保存数据,区分添加和编辑模式,保存后弹窗提示并返回首页;④ 输入框设置了基本样式,提升用户体验,标题单行输入,内容多行输入。
- 打开lib目录下的main.dart文件,替换原有代码(带详细注释):
`// 导入依赖包
import ‘package:flutter/material.dart’;
import ‘package:provider/provider.dart’;
import ‘provider/memo_provider.dart’;
import ‘page/home_page.dart’;
// 项目入口函数
void main() {
runApp(const MyApp());
}
class MyApp extends StatelessWidget {
const MyApp({super.key});
@override
Widget build(BuildContext context) {
// 使用ChangeNotifierProvider包裹整个APP,让所有页面都能访问MemoProvider
return ChangeNotifierProvider(
// 创建MemoProvider实例
create: (context) => MemoProvider(),
child: MaterialApp(
title: ‘Flutter鸿蒙备忘录’,
// 关闭调试模式(发布时必须关闭,新手可先保留)
debugShowCheckedModeBanner: false,
// APP主题(自定义,新手可默认)
theme: ThemeData(
primarySwatch: Colors.blue,
visualDensity: VisualDensity.adaptivePlatformDensity,
),
// 首页面为首页
home: const HomePage(),
),
);
}
}`代码说明:① ChangeNotifierProvider用于全局提供MemoProvider实例,所有子页面都能通过Provider.of获取;② debugShowCheckedModeBanner: false用于关闭调试模式的横幅;③ theme设置APP的主题色,可根据喜好修改;④ home设置首页面为HomePage。
-
打开DevEco Studio,点击顶部菜单栏「Tools」→「Device Manager」,打开设备管理器;
-
创建鸿蒙模拟器:点击「New Device」,选择鸿蒙6.0以上版本(如HarmonyOS 6.2.0),选择设备型号(如Phone),点击「Next」→「Finish」,等待模拟器启动;
-
若使用真机测试:将鸿蒙手机连接电脑,开启开发者模式,在DevEco Studio中识别设备(确保手机已安装鸿蒙6.0以上系统)。
4.2 运行项目
-
在VS Code(或DevEco Studio)中,选择已启动的鸿蒙模拟器/真机作为运行设备;

-
点击顶部的「Run」按钮(或终端执行
flutter run),等待项目编译运行; -
编译成功后,模拟器/真机上会显示APP,可进行以下测试:
-
点击右下角「+」按钮,输入标题和内容,点击「保存」,可看到备忘录添加成功,弹窗提示,首页显示新增的备忘录;
-
点击备忘录列表项,进入编辑页面,修改内容后点击「保存」,可看到备忘录更新成功;
-
左滑备忘录列表项,点击「删除」,可看到备忘录删除成功,弹窗提示;
-
关闭APP后重新打开,之前添加的备忘录仍存在(验证本地存储功能)。
-
4.3 常见问题排查(新手必看)
- 问题1:编译报错“Could not find the Flutter SDK”?
解决:检查鸿蒙定制版Flutter SDK的环境变量配置,重新打开终端验证,确保flutter --version能正常输出。
- 问题2:三方库安装失败?
解决:检查pubspec.yaml中三方库的版本是否兼容,确保网络正常,执行flutter pub get重新安装,若仍失败,可降低三方库版本。
- 问题3:APP无法在鸿蒙设备上运行?
解决:确认DevEco Studio中SDK配置为鸿蒙6.0以上,项目pubspec.yaml中ohos节点配置正确,模拟器/真机系统版本为鸿蒙6.0以上。
- 问题4:本地存储不生效?
解决:检查shared_preferences的使用方法,确保toMap()和fromMap()方法正确,保存数据后调用了notifyListeners()。
五、总结
本文基于鸿蒙6.0+、API20+ SDK,使用Flutter结合provider、shared_preferences、fluttertoast三个常用三方库,从零搭建了一个简易跨端备忘录APP,涵盖了环境配置、项目创建、分层开发、状态管理、本地存储、页面交互等核心知识点,每一步都附带详细步骤和带注释的代码,新手可直接对照操作。
通过本项目,可掌握Flutter与鸿蒙跨端开发的基础流程,熟悉三方库在鸿蒙生态中的使用方法,后续可在此基础上扩展功能(如修改备忘录颜色、添加搜索功能等),进一步提升Flutter+鸿蒙跨端开发能力。
更多推荐


所有评论(0)