当前位置: 首页 > news >正文

Flutter-OH 鸿蒙工具类应用实战 Day2:Note 记事本数据持久化与本地存储实现

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

一、本篇核心任务

  • 引入shared_preferences第三方库,实现笔记数据本地持久化
  • 实现笔记的新增、存储与读取功能
  • 优化首页 UI,展示已保存的笔记列表
  • 完成新增笔记页面的跳转与数据回传
  • 验证应用重启后数据不丢失,确保持久化功能稳定

二、开发步骤

步骤 1:添加依赖

在项目根目录的pubspec.yaml中,添加shared_preferences依赖:

dependencies: flutter: sdk: flutter shared_preferences: ^2.2.2

保存后执行flutter pub get安装依赖

打开 CMD,进入你的项目根目录(E:\note_app

输入命令:

flutter pub get

执行成功后,会提示类似Process finished with exit code 0,说明依赖安装完成了

步骤 2:创建笔记数据模型与存储工具

新建lib/utils/note_storage.dart,封装本地存储逻辑:

在当前的lib文件夹里,新建一个文件夹,命名为utils

进入utils文件夹,新建一个文本文档,把名字改成note_storage.dart

在note_storage.dart中添加代码

import 'dart:convert'; import 'package:shared_preferences/shared_preferences.dart'; class NoteStorage { static const String _key = 'note_list'; // 保存笔记列表 static Future<void> saveNotes(List<String> notes) async { final prefs = await SharedPreferences.getInstance(); await prefs.setStringList(_key, notes); } // 读取笔记列表 static Future<List<String>> loadNotes() async { final prefs = await SharedPreferences.getInstance(); return prefs.getStringList(_key) ?? []; } }

步骤 3:创建新增笔记页面

新建lib/pages/add_note_page.dart

在当前的lib文件夹里,新建一个文件夹,命名为pages

进入utils文件夹,新建一个文本文档,把名字改成add_note_page.dart

add_note_page.dart中添加代码

import 'package:flutter/material.dart'; class AddNotePage extends StatelessWidget { AddNotePage({super.key}); final TextEditingController _controller = TextEditingController(); @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar(title: const Text("新增 Note")), body: Padding( padding: const EdgeInsets.all(16.0), child: Column( children: [ TextField( controller: _controller, decoration: const InputDecoration(hintText: "输入笔记内容..."), maxLines: null, ), const SizedBox(height: 20), ElevatedButton( onPressed: () { if (_controller.text.isNotEmpty) { Navigator.pop(context, _controller.text); } }, child: const Text("保存"), ), ], ), ), ); } }

步骤 4:修改main.dart,整合存储与页面跳转

import 'package:flutter/material.dart'; import 'utils/note_storage.dart'; import 'pages/add_note_page.dart'; void main() { runApp(const NoteApp()); } class NoteApp extends StatelessWidget { const NoteApp({super.key}); @override Widget build(BuildContext context) { return MaterialApp( title: 'Note App', debugShowCheckedModeBanner: false, theme: ThemeData(primarySwatch: Colors.blue), home: const HomePage(), ); } } class HomePage extends StatefulWidget { const HomePage({super.key}); @override State<HomePage> createState() => _HomePageState(); } class _HomePageState extends State<HomePage> { List<String> _notes = []; @override void initState() { super.initState(); _loadNotes(); } Future<void> _loadNotes() async { final notes = await NoteStorage.loadNotes(); setState(() => _notes = notes); } Future<void> _addNote(String content) async { setState(() => _notes.add(content)); await NoteStorage.saveNotes(_notes); } @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar(title: const Text("鸿蒙 Note 记事本")), body: _notes.isEmpty ? const Center(child: Text("暂无笔记,请点击新增\n创建你的第一条 Note", textAlign: TextAlign.center, style: TextStyle(color: Colors.grey))) : ListView.builder( itemCount: _notes.length, itemBuilder: (context, index) => ListTile(title: Text(_notes[index])), ), floatingActionButton: FloatingActionButton( onPressed: () async { final newNote = await Navigator.push( context, MaterialPageRoute(builder: (context) => AddNotePage()), ); if (newNote != null) { _addNote(newNote); } }, child: const Icon(Icons.add), ), ); } }

步骤 5:运行验证

启动模拟器,新增笔记后关闭应用再重新打开,笔记数据依然存在,即功能实现成功。

三、Flutter-OH 鸿蒙工具类应用实战 Day2:Note 记事本数据持久化与本地存储实现

数据持久化是工具类应用的核心能力,能够保障用户数据在应用重启、设备重启后不丢失,显著提升用户体验。本篇基于 Flutter-OH 框架,为记事本应用引入shared_preferences库,实现笔记数据的本地持久化存储,完成了从数据新增、读取到保存的完整流程。

开发过程中,首先在项目中引入shared_preferences依赖,封装了笔记数据的存储与读取工具类,实现了笔记列表的序列化与持久化。随后新增了笔记编辑页面,通过页面跳转与数据回传,实现了笔记内容的新增功能。首页 UI 也同步优化,支持展示已保存的笔记列表,替代了初始的空状态提示。

最终通过模拟器验证,新增的笔记数据在应用重启后依然能够正常读取,持久化功能稳定可靠。本篇为记事本应用补充了核心数据能力,为后续的笔记编辑、删除与搜索功能开发奠定了数据层基础,也进一步加深了对 Flutter 跨平台开发中数据持久化方案的理解。

http://www.jsqmd.com/news/767099/

相关文章:

  • Taotoken API Key的权限管理与子账户创建教程
  • 如何让经典DualShock 3在Windows 11上完美工作?
  • Spring Boot 2.5 + Activiti 7.1 实战:手把手教你从零搭建一个请假审批流程(附完整源码)
  • 2026年杭州GEO优化服务商综合排名TOP10:方案比较与优势深度解析 - 博客湾
  • FPGA与PC高速通信:基于FT245同步FIFO模式的实战指南
  • 废掉一个人最快的方式,是让他觉得“这辈子就这样了”
  • 3步搞定视频转PPT难题:如何用智能算法自动提取每一页幻灯片
  • iGRPO:大语言模型推理优化的自反馈机制
  • ESP32-S2低功耗PIR运动传感开发板解析与应用
  • 轻量级Web框架CopaWF:模块化设计与RESTful API实践指南
  • VSCode 2026多智能体协同编程避坑清单,第7条99%开发者忽略:本地LLM缓存污染导致的Agent角色错位问题(实测复现+热修复补丁)
  • CoolRunner-II CPLD硬件安全特性与加密算法实现
  • 3分钟破解百度网盘提取码:开源工具的终极使用指南
  • 如何用正则具名捕获组 (-) 提升复杂数据的提取效率
  • 告别原生Socket API:用sockpp 0.8.1在C++中快速构建TCP客户端/服务器(附完整代码)
  • 5分钟终极指南:用AI图像分层工具layerdivider轻松生成多层PSD文件
  • Python快速学习——第11章:模块
  • 工业机器人闭环控制系统的轨迹优化与采样权重分配
  • 【PI_浪涌电流】快速掌握电源浪涌电流(Inrush current)测试方法
  • 别再手动圈地物了!用Python+深度学习5步搞定遥感影像自动分类(附代码)
  • 宏智树AI如何让你的期刊论文从“卡壳“到“丝滑“?
  • 单目视觉乒乓球轨迹与旋转分析系统开发
  • DeepSORT实战:在YOLOv8检测器上集成多目标跟踪,提升安防监控效率
  • 数据库2表设计
  • 电压监控器原理与Microchip选型指南
  • 在 Ubuntu 上对接 Claude Code 编程助手并配置 Taotoken 作为后端
  • 基于MCP协议构建跨平台广告AI管理中枢:策略感知与自动化实战
  • 视频生成模型提升机器人操作泛化能力
  • 掌控散热:7个步骤彻底解决Windows风扇噪音与温度平衡难题
  • 探路者转型数据压缩核心赛道,辅助存储打开全新成长空间