欢迎加入开源鸿蒙跨平台社区: 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配置

  1. 打开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」保存配置。

  2. 配置鸿蒙定制版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+鸿蒙跨端项目

  1. 打开终端,进入想要创建项目的文件夹(如: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`再次验证)。

  1. 打开创建的项目,修改「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包名需自定义,避免与其他应用重复。

  1. 安装三方库:配置完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层)

创建备忘录数据模型,用于规范备忘录的数据格式,方便后续存储和展示。

  1. 在lib目录下,新建model文件夹,在文件夹中创建memo_model.dart文件;

  2. 编写代码(带详细注释,新手可直接复制):
    `// 备忘录数据模型
    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后数据不丢失)。

  1. 在lib目录下,新建provider文件夹,在文件夹中创建memo_provider.dart文件;

  2. 编写代码(带详细注释,新手可直接复制):
    `// 导入依赖包
    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);
}
}`

  1. 添加uuid依赖:打开pubspec.yaml,在dependencies中添加 uuid: ^4.0.0,然后点击「Pub get」安装依赖(用于生成备忘录唯一ID)。

  2. 代码说明:① ChangeNotifier是provider的核心,用于监听数据变化,当数据修改时,调用notifyListeners()通知页面刷新;② initMemo()方法在APP启动时执行,从本地读取数据,实现数据持久化;③ addMemo()和deleteMemo()方法分别实现添加和删除功能,操作后同步到本地存储;④ 私有方法_saveMemoToLocal()用于统一处理数据持久化,避免代码冗余。

3.3 开发首页(page层:展示备忘录列表)

首页用于展示所有备忘录,包含“添加备忘录”按钮、备忘录列表(显示标题和创建时间)、左滑删除功能,点击备忘录可进入编辑页面。

  1. 在lib目录下,新建page文件夹,在文件夹中创建home_page.dart文件;

  2. 编写代码(带详细注释,新手可直接复制):
    `// 导入依赖包
    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显示删除反馈;⑤ 浮动按钮用于跳转到添加备忘录页面,列表项点击跳转到编辑页面。

  1. 在page文件夹中,创建add_memo_page.dart文件;

  2. 编写代码(带详细注释,新手可直接复制):
    `// 导入依赖包
    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()方法用于校验输入、保存数据,区分添加和编辑模式,保存后弹窗提示并返回首页;④ 输入框设置了基本样式,提升用户体验,标题单行输入,内容多行输入。

  1. 打开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。

  1. 打开DevEco Studio,点击顶部菜单栏「Tools」→「Device Manager」,打开设备管理器;

  2. 创建鸿蒙模拟器:点击「New Device」,选择鸿蒙6.0以上版本(如HarmonyOS 6.2.0),选择设备型号(如Phone),点击「Next」→「Finish」,等待模拟器启动;

  3. 若使用真机测试:将鸿蒙手机连接电脑,开启开发者模式,在DevEco Studio中识别设备(确保手机已安装鸿蒙6.0以上系统)。

4.2 运行项目

  1. 在VS Code(或DevEco Studio)中,选择已启动的鸿蒙模拟器/真机作为运行设备;
    请添加图片描述

  2. 点击顶部的「Run」按钮(或终端执行flutter run),等待项目编译运行;

  3. 编译成功后,模拟器/真机上会显示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+鸿蒙跨端开发能力。

Logo

一站式 AI 云服务平台

更多推荐