Flutter+三方库+鸿蒙实战:进阶版本地存储列表应用开发案例

欢迎加入开源鸿蒙跨平台社区:https://openharmonycrossplatform.csdn.net

本文先简要梳理Flutter、三方库与鸿蒙应用开发的核心关联,再聚焦「进阶但不复杂」的实战场景——避开基础的单一功能,新增列表展示、下拉刷新、数据删除等实用功能,选用鸿蒙适配版三方库,全程拆解每一步操作,兼顾进阶性与新手适配性,无需复杂底层知识,新手可跟着一步一步操作,快速掌握三者集成的进阶技巧,实现可直接运行的鸿蒙应用。

一、Flutter、三方库与鸿蒙的核心关系(精简适配进阶场景)

Flutter作为高性能跨平台UI框架,可通过一套代码适配鸿蒙等多端设备,大幅降低多端开发成本;三方库是开发者封装的可复用模块,既能简化基础功能开发,也能快速实现进阶功能(如下拉刷新、列表优化),避免重复造轮子;鸿蒙(HarmonyOS NEXT)支持Flutter跨平台开发,通过官方适配的三方库,可让Flutter进阶功能无缝运行在鸿蒙设备上,兼顾跨平台一致性与鸿蒙原生体验。

核心逻辑:Flutter提供进阶UI与交互框架,三方库提供进阶功能支撑,鸿蒙提供运行载体,三者结合可高效实现“基础功能+进阶体验”的鸿蒙应用,适合新手从基础过渡到进阶开发。

核心说明:本案例为「新手友好型进阶案例」,避开复杂底层适配和源码修改,选用OpenHarmony官方适配的三方库(与基础案例完全不重复),新增列表展示、下拉刷新、本地存储数据删除等进阶功能,难度适中,所有操作基于DevEco Studio 6.0、鸿蒙SDK 20、Flutter SDK 3.16.0(稳定版),新手可轻松跟上。

案例目标:开发一个鸿蒙应用,通过Flutter搭建页面,集成鸿蒙适配版的shared_preferences(本地存储,进阶用法)、pull_to_refresh(下拉刷新)、flutter_slidable(侧滑删除)三个三方库,实现“输入内容存储至本地→列表展示所有存储内容→下拉刷新同步最新数据→侧滑删除指定内容”的完整进阶功能,最终在鸿蒙NEXT模拟器/真机上正常运行。

二、前置准备(必做,一步都不能少)

开发前需完成环境搭建和工具准备,所有工具均选用稳定版本,避免版本兼容问题,新手严格按照以下步骤操作,可大幅减少踩坑(沿用适配版本,无需额外更换)。

2.1 工具与版本要求(新手必看,避免兼容坑)

  • Flutter SDK:3.16.0(稳定版,对鸿蒙适配更成熟,不建议用最新版,避免兼容性问题)

  • DevEco Studio:6.0最新版(鸿蒙官方IDE,内置鸿蒙SDK管理工具,支持SDK 20,必备)

  • 鸿蒙SDK:API 20(HarmonyOS NEXT,适配最新机型,新手优先选择稳定适配版)

  • 运行设备:鸿蒙NEXT模拟器(推荐,无需真机,调试更便捷)或支持鸿蒙NEXT的真机

  • 终端工具:Windows用CMD/PowerShell,Mac用Terminal(用于执行Flutter命令)

  • 网络环境:需联网(用于下载SDK、三方库依赖)

2.2 环境搭建步骤(Windows系统为例,Mac步骤类似)

步骤1:安装Flutter SDK并配置鸿蒙支持
  1. 下载Flutter SDK:访问Flutter官网,选择3.16.0稳定版,下载后解压至非中文、无空格目录(如D:\flutter,避免后续报错)。官网支持稳定版下载,可通过“SDK archive”找到3.16.0版本,确保下载的是适配Windows系统的安装包。

  2. 配置Flutter环境变量:

  • 右键“此电脑”→“属性”→“高级系统设置”→“环境变量”;

  • 在“系统变量”中点击“新建”,变量名填FLUTTER_HOME,变量值填Flutter解压路径(如D:\flutter);

  • 找到“系统变量”中的Path,点击“编辑”,新增两个路径:%FLUTTER_HOME%\bin 和 %FLUTTER_HOME%\bin\cache\dart-sdk\bin;

  • 点击“确定”保存配置,关闭所有已打开的终端(环境变量生效需重启终端)。

  1. 验证Flutter安装:打开新的CMD,输入命令 flutter --version,若显示Flutter 3.16.0和对应的Dart版本,说明安装成功。若出现“flutter不是内部或外部命令”,需重新检查环境变量配置。

  2. 开启Flutter对鸿蒙的支持:在CMD中输入命令 flutter config --enable-harmony,等待执行完成(无需额外操作,仅开启适配开关)。

步骤2:安装DevEco Studio并配置鸿蒙SDK
  1. 下载DevEco Studio:访问鸿蒙开发者官网,下载6.0最新版本,双击安装(安装前需确认电脑满足系统要求:Windows 10/11 64位、内存8GB及以上、硬盘100GB及以上,Mac需满足对应系统要求;官网提供不同系统的安装包,需选择对应版本下载)。

  2. 安装鸿蒙SDK:

  • 安装过程中会提示“下载HarmonyOS SDK”,勾选“API 20”版本(鸿蒙NEXT对应版本),默认路径即可(无需修改,后续可在IDE中补充);

  • 若安装时未提示下载,打开DevEco Studio后,点击顶部“File→Settings→Appearance & Behavior→System Settings→HarmonyOS SDK”,勾选API 20,点击“Apply”下载安装(下载过程需联网,耐心等待)。

  1. 安装Flutter插件(关键步骤):
  • 打开DevEco Studio,点击顶部“File→Settings→Plugins”;

  • 在搜索框中输入“Flutter”,找到对应插件(官方版本),点击“Install”安装;

  • 安装完成后,点击“Restart IDE”重启DevEco Studio,插件生效。DevEco Studio支持插件自动更新,若提示插件更新,可直接更新至最新版,确保与Flutter SDK、鸿蒙SDK兼容。

步骤3:配置鸿蒙模拟器(新手优先,无需真机)
  1. 打开DevEco Studio,点击顶部“Tools→Device Manager”(设备管理器);

  2. 点击“New Device”,选择“Phone”分类,挑选鸿蒙NEXT机型(如Mate 70 Pro),点击“Create”(创建过程需联网,下载机型镜像,适配API 20版本);DevEco Studio支持多端模拟器,新手无需创建其他类型设备,专注手机模拟器即可。

  3. 创建完成后,点击模拟器右侧“Start”启动模拟器,等待启动完成(首次启动较慢,耐心等待,启动后可最小化,后续调试直接使用)。若模拟器启动失败,可检查电脑内存是否充足,关闭其他占用内存的软件后重新启动。

三、进阶实践案例:Flutter集成三方库开发鸿蒙列表应用(新手友好,不重复)

本案例基于前置准备好的环境,从创建Flutter鸿蒙项目开始,逐步集成3个鸿蒙适配版三方库(含进阶功能库),编写核心代码,实现“本地存储+列表展示+下拉刷新+侧滑删除”的完整功能,全程一步一操作,新手可直接跟着做,所有功能与基础案例无重复,难度适中,兼顾进阶性与可操作性。

3.1 步骤1:创建Flutter鸿蒙项目(关键步骤,避免创建普通Flutter项目)

  1. 打开DevEco Studio 6.0,点击顶部“File→New→New Project”,在弹出的窗口中,选择“Flutter”分类,点击“Flutter HarmonyOS Project”(注意:不要选普通的Flutter Project,否则无法适配鸿蒙,DevEco Studio专门提供了Flutter鸿蒙项目模板,确保项目可正常运行在鸿蒙设备上);

  2. 填写项目基本信息,按照以下要求填写(避免报错):

  • Project name:flutter_harmony_advanced_demo(项目名称,小写英文+下划线,禁止中文和空格,与基础案例区分);

  • Package name:com.example.flutterharmonyadvanceddemo(包名,默认即可,也可自定义,需符合包名规范,格式为“com.xxx.xxx”);

  • Save location:选择非中文、无空格目录(如D:\FlutterProjects\flutter_harmony_advanced_demo);

  • Flutter SDK path:选择之前安装的Flutter SDK路径(如D:\flutter),IDE会自动识别,若未识别,手动选择;

  • HarmonyOS SDK path:选择之前安装的鸿蒙SDK API 20路径(默认路径即可,IDE自动识别);

  1. 填写完成后,点击“Finish”,IDE会自动创建Flutter鸿蒙项目,等待项目构建完成(首次构建需联网下载依赖,时间较长,耐心等待,构建成功后,左侧会显示项目目录结构;若构建失败,可检查SDK路径是否配置正确,或重启IDE重试)。

3.2 步骤2:集成鸿蒙适配版三方库(核心环节,进阶库,不重复)

本案例选用3个常用且鸿蒙适配成熟的三方库(与基础案例完全不同),均来自OpenHarmony官方维护的flutter_packages仓库,无需修改源码,直接配置即可使用,其中2个为进阶功能库,专门实现列表相关的进阶操作。

3.2.1 配置三方库依赖
  1. 在DevEco Studio中,找到项目根目录下的pubspec.yaml文件(核心配置文件,用于管理三方库依赖),双击打开;该文件是Flutter项目管理依赖的核心,缩进格式严格,需格外注意。

  2. pubspec.yaml文件中,找到“dependencies”节点(用于配置生产环境依赖),添加以下3行依赖(注意缩进,需与其他依赖对齐,YAML格式对缩进要求严格,建议使用2个空格缩进,避免用Tab键):


dependencies:

flutter:

sdk: flutter

# 鸿蒙适配版本地存储三方库(进阶用法,存储列表数据)

shared_preferences: ^2.2.2 # 鸿蒙适配版,支持API 20,用于本地存储列表数据

# 鸿蒙适配版下拉刷新三方库(进阶功能,新手易上手)

pull_to_refresh: ^2.0.0 # 鸿蒙适配版,简化下拉刷新逻辑,无需手动写刷新状态

# 鸿蒙适配版侧滑删除三方库(进阶功能,交互更友好)

flutter_slidable: ^3.0.0 # 鸿蒙适配版,实现列表项侧滑删除功能,用法简单

  1. 添加完成后,点击pubspec.yaml文件右上角的“Pub get”按钮(或在终端输入命令 flutter pub get),下载三方库依赖;

  2. 等待下载完成,若控制台显示“Process finished with exit code 0”,说明依赖下载成功;若出现报错,大概率是缩进错误或版本不兼容,检查缩进是否正确,或更换上述指定的版本;若仍报错,可删除项目根目录下的“pubspec.lock”文件,重新执行“Pub get”。

3.3 步骤3:编写核心代码(实现进阶功能,新手可直接复制)

本步骤将创建一个主页面,实现“输入框输入内容→点击按钮存储→列表展示所有存储内容→下拉刷新同步数据→侧滑删除指定内容”的完整逻辑,代码有详细注释,新手可直接复制替换,无需理解复杂逻辑,同时标注关键进阶点,帮助新手理解。

3.3.1 编写主页面代码(main.dart)
  1. 在项目目录中,找到“lib”文件夹下的main.dart文件(Flutter项目入口文件),双击打开;

  2. 删除main.dart文件中的默认代码,复制以下代码粘贴(代码注释详细,标注进阶功能要点,新手可直接使用,无需修改):


import 'package:flutter/material.dart';

import 'package:shared_preferences/shared_preferences.dart'; // 导入本地存储三方库(进阶用法)

import 'package:pull_to_refresh/pull_to_refresh.dart'; // 导入下拉刷新三方库

import 'package:flutter_slidable/flutter_slidable.dart'; // 导入侧滑删除三方库



void main() {

runApp(const MyApp()); // 启动Flutter应用

}



class MyApp extends StatelessWidget {

const MyApp({super.key});





Widget build(BuildContext context) {

return MaterialApp(

title: 'Flutter+三方库+鸿蒙 进阶案例', // 应用标题

theme: ThemeData(

primarySwatch: Colors.blue, // 应用主题色,可自行修改

),

home: const HomePage(), // 应用主页面

);

}

}



// 主页面(核心,实现所有进阶功能)

class HomePage extends StatefulWidget {

const HomePage({super.key});





State<HomePage> createState() => _HomePageState();

}



class _HomePageState extends State<HomePage> {

// 1. 文本控制器,用于获取输入框内容

final TextEditingController _inputController = TextEditingController();

// 2. 本地存储实例

late SharedPreferences _prefs;

// 3. 列表数据,用于存储所有输入的内容(进阶点:用列表存储多条数据)

List<String> _contentList = [];

// 4. 下拉刷新控制器(进阶点:控制下拉刷新的状态)

final RefreshController _refreshController = RefreshController(initialRefresh: false);



// 初始化:获取本地存储的列表数据



void initState() {

super.initState();

_initSharedPreferences(); // 初始化本地存储

}



// 初始化本地存储,获取已存储的列表数据(进阶用法:读取列表数据)

Future<void> _initSharedPreferences() async {

_prefs = await SharedPreferences.getInstance();

// 读取本地存储的列表数据,若没有则返回空列表(避免报错)

List<String>? savedList = _prefs.getStringList('content_list');

if (savedList != null) {

setState(() {

_contentList = savedList; // 将读取到的数据赋值给列表

});

}

}



// 存储内容到本地(进阶用法:存储列表数据)

Future<void> _saveContent() async {

// 获取输入框内容,去除前后空格

String inputContent = _inputController.text.trim();

if (inputContent.isNotEmpty) {

setState(() {

_contentList.add(inputContent); // 将输入内容添加到列表

});

// 将更新后的列表存储到本地(覆盖原有数据)

await _prefs.setStringList('content_list', _contentList);

// 清空输入框

_inputController.clear();

// 提示用户存储成功

ScaffoldMessenger.of(context).showSnackBar(

const SnackBar(content: Text('存储成功!下拉刷新可查看最新列表')),

);

} else {

// 输入为空时,提示用户

ScaffoldMessenger.of(context).showSnackBar(

const SnackBar(content: Text('请输入要存储的内容')),

);

}

}



// 下拉刷新方法(进阶功能:同步最新本地数据)

Future<void> _onRefresh() async {

// 重新读取本地存储的列表数据,实现刷新效果

List<String>? savedList = _prefs.getStringList('content_list');

if (savedList != null) {

setState(() {

_contentList = savedList;

});

}

// 结束刷新状态(必须调用,否则刷新动画会一直显示)

_refreshController.refreshCompleted();

}



// 侧滑删除方法(进阶功能:删除指定位置的内容)

Future<void> _deleteContent(int index) async {

setState(() {

_contentList.removeAt(index); // 删除列表中指定位置的内容

});

// 更新本地存储的列表数据(删除后同步)

await _prefs.setStringList('content_list', _contentList);

// 提示用户删除成功

ScaffoldMessenger.of(context).showSnackBar(

const SnackBar(content: Text('删除成功!')),

);

}





Widget build(BuildContext context) {

return Scaffold(

appBar: AppBar(

title: const Text('进阶案例:列表存储与管理'), // 主页面标题栏

),

// 页面主体:输入框+按钮+下拉刷新列表

body: Column(

children: [

// 输入框和按钮区域(固定在顶部)

Padding(

padding: const EdgeInsets.all(20.0),

child: Row(

children: [

// 输入框(占满大部分宽度)

Expanded(

child: TextField(

controller: _inputController,

decoration: const InputDecoration(

hintText: '请输入要存储的内容(如笔记、待办)',

border: OutlineInputBorder(),

),

),

),

const SizedBox(width: 10), // 输入框和按钮之间的间距

// 存储按钮

ElevatedButton(

onPressed: _saveContent, // 绑定存储方法

child: const Text('存储'),

),

],

),

),

// 下拉刷新列表(占满剩余高度,进阶核心)

Expanded(

child: SmartRefresher(

controller: _refreshController, // 绑定下拉刷新控制器

onRefresh: _onRefresh, // 绑定下拉刷新方法

// 刷新头部样式(默认样式,新手无需修改)

header: const WaterDropHeader(),

// 列表内容:展示所有存储的内容

child: ListView.builder(

// 列表长度 = 存储的内容数量

itemCount: _contentList.length,

// 构建列表项(侧滑删除功能,进阶核心)

itemBuilder: (context, index) {

return Slidable(

// 侧滑方向:从右向左

direction: Axis.horizontal,

// 侧滑删除按钮(右侧)

endActionPane: ActionPane(

motion: const ScrollMotion(),

children: [

SlidableAction(

onPressed: (context) => _deleteContent(index), // 绑定删除方法

backgroundColor: Colors.red, // 按钮背景色

foregroundColor: Colors.white, // 按钮文字颜色

icon: Icons.delete, // 按钮图标

label: '删除', // 按钮文字

),

],

),

// 列表项内容(展示存储的文本)

child: ListTile(

title: Text(_contentList[index]), // 展示存储的内容

subtitle: Text('存储时间:${DateTime.now().toString().substring(0, 16)}'), // 显示存储时间(进阶点)

leading: const Icon(Icons.note_alt), // 列表项图标

),

);

},

),

),

),

],

),

);

}

}

  1. 粘贴完成后,保存main.dart文件,检查代码是否有报错(红色波浪线):
  • 若报错提示“找不到package”,大概率是三方库未下载成功,重新点击“Pub get”即可;

  • 若报错提示“符号错误”,检查代码是否完整粘贴(避免遗漏括号、分号),或重启DevEco Studio重试。

3.4 步骤4:在鸿蒙模拟器上运行应用(最终验证,进阶功能测试)

完成代码编写后,将应用运行到之前配置好的鸿蒙NEXT模拟器上,验证所有进阶功能是否正常,步骤与基础案例类似,但需重点测试下拉刷新和侧滑删除功能,新手严格按照以下步骤操作:

  1. 确保鸿蒙NEXT模拟器已启动(若未启动,打开DevEco Studio,点击“Tools→Device Manager”,找到创建的模拟器,点击“Start”启动);

  2. 在DevEco Studio中,点击顶部工具栏的“运行”按钮(绿色三角形图标),或使用快捷键“Shift+F10”;

  3. 弹出运行配置窗口,默认选择当前项目“flutter_harmony_advanced_demo”,运行设备选择已启动的鸿蒙NEXT模拟器,点击“OK”;

  4. 开始编译运行,首次运行需编译鸿蒙应用包,时间较长(1-3分钟),控制台会显示编译进度,耐心等待;若编译失败,可检查以下几点:

  • 项目类型是否为“Flutter HarmonyOS Project”;

  • 鸿蒙SDK API 20是否安装成功;

  • 三方库依赖是否下载完成。

  1. 运行成功后,鸿蒙模拟器会自动打开应用,依次测试以下4个核心功能(确保全部正常):

① 输入功能:在输入框中输入任意内容(如“Flutter鸿蒙进阶测试”);

② 存储功能:点击“存储”按钮,提示“存储成功”,输入框清空,列表中新增一条数据(包含内容和存储时间);

③ 下拉刷新功能:在列表区域向下拉动,触发刷新动画,刷新完成后列表显示最新数据(若新增/删除数据,刷新后同步);

④ 侧滑删除功能:长按列表中的任意一条数据,从右向左滑动,出现“删除”按钮,点击删除,提示“删除成功”,列表中该数据消失,本地存储也同步删除。

3.5 进阶案例关键说明(新手必看)

本案例的“进阶性”主要体现在3点,新手无需深入理解底层逻辑,重点掌握用法即可:

  1. 本地存储进阶:从“存储单条数据”升级为“存储列表数据”,使用getStringListsetStringList方法,实现多条数据的存储与同步;

  2. 交互进阶:新增下拉刷新(pull_to_refresh)和侧滑删除(flutter_slidable),提升应用交互体验,两个三方库用法简单,无需手动编写复杂动画和逻辑;

  3. 布局进阶:采用“固定顶部输入区+自适应列表区”的布局,适配鸿蒙手机不同屏幕尺寸,符合鸿蒙应用开发规范。

3.6 常见问题排查(进阶案例专属,新手必看)

若运行失败或功能异常,除基础案例的排查方法外,重点排查以下进阶问题:

  1. 下拉刷新无反应:检查RefreshController是否初始化,onRefresh方法是否绑定正确,是否调用_refreshController.refreshCompleted()结束刷新;

  2. 侧滑删除无效:检查Slidable组件的endActionPane是否配置正确,onPressed方法是否传入index参数(删除指定位置数据);

  3. 列表数据不同步:检查本地存储的setStringList方法是否在列表更新后调用,确保列表数据与本地存储同步;

  4. 应用卡顿:若列表数据较多(超过50条),可暂时减少数据量,新手无需担心,本案例测试数据量完全适配鸿蒙模拟器。

四、案例总结(进阶提升,新手适配)

本案例为“新手友好型进阶案例”,在基础开发的基础上,新增了列表展示、下拉刷新、侧滑删除等实用进阶功能,全程避开复杂底层适配,选用鸿蒙适配版三方库,一步一操作,新手可轻松跟上,同时掌握Flutter与鸿蒙集成的进阶技巧。

通过本案例,可掌握以下核心要点:

  1. 鸿蒙适配版进阶三方库(下拉刷新、侧滑删除)的配置与使用;

  2. Flutter本地存储的进阶用法(列表数据的存储与同步);

  3. Flutter复杂布局(固定区域+自适应列表)的实现方法;

  4. 鸿蒙应用进阶功能的调试与问题排查技巧。

后续可在此基础上,尝试集成更多进阶三方库(如状态管理库、网络请求库),逐步提升Flutter与鸿蒙应用开发的熟练度,为后续复杂项目开发打下基础。

Logo

作为“人工智能6S店”的官方数字引擎,为AI开发者与企业提供一个覆盖软硬件全栈、一站式门户。

更多推荐