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

Flutter 文件存储详解

Flutter 文件存储详解

一、文件存储概述

Flutter 文件存储用于持久化数据到本地文件系统。常见的存储方式包括 SharedPreferences、Hive、SQFlite 和直接文件操作。

1.1 存储类型

  • 键值存储- SharedPreferences、Hive
  • 关系型数据库- SQFlite
  • 文件存储- 直接读写文件

二、SharedPreferences

2.1 安装依赖

dependencies: shared_preferences: ^2.2.0

2.2 使用示例

import 'package:shared_preferences/shared_preferences.dart'; class StorageService { static late SharedPreferences _prefs; static Future<void> init() async { _prefs = await SharedPreferences.getInstance(); } static String? getString(String key) { return _prefs.getString(key); } static Future<bool> setString(String key, String value) { return _prefs.setString(key, value); } static int? getInt(String key) { return _prefs.getInt(key); } static Future<bool> setInt(String key, int value) { return _prefs.setInt(key, value); } }

三、Hive

3.1 安装依赖

dependencies: hive: ^2.2.3 hive_flutter: ^1.1.0 dev_dependencies: hive_generator: ^1.1.5 build_runner: ^2.4.4

3.2 创建模型

import 'package:hive/hive.dart'; part 'user.g.dart'; @HiveType(typeId: 0) class User extends HiveObject { @HiveField(0) late String name; @HiveField(1) late int age; User({required this.name, required this.age}); }

3.3 生成代码

flutter pub run build_runner build

3.4 使用示例

class HiveService { static late Box<User> _userBox; static Future<void> init() async { await Hive.initFlutter(); Hive.registerAdapter(UserAdapter()); _userBox = await Hive.openBox<User>('users'); } static void addUser(User user) { _userBox.add(user); } static List<User> getUsers() { return _userBox.values.toList(); } }

四、SQFlite

4.1 安装依赖

dependencies: sqflite: ^2.3.0 path: ^1.8.3

4.2 创建数据库

import 'package:sqflite/sqflite.dart'; import 'package:path/path.dart'; class DatabaseHelper { static final DatabaseHelper _instance = DatabaseHelper._internal(); factory DatabaseHelper() => _instance; DatabaseHelper._internal(); static Database? _database; Future<Database> get database async { if (_database != null) return _database!; _database = await _initDatabase(); return _database!; } Future<Database> _initDatabase() async { final path = join(await getDatabasesPath(), 'my_database.db'); return await openDatabase( path, version: 1, onCreate: (db, version) async { await db.execute(''' CREATE TABLE users ( id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT NOT NULL, email TEXT NOT NULL UNIQUE ) '''); }, ); } }

五、文件操作

5.1 读取文件

import 'dart:io'; Future<String> readFile(String path) async { final file = File(path); return await file.readAsString(); }

5.2 写入文件

Future<void> writeFile(String path, String content) async { final file = File(path); await file.writeAsString(content); }

5.3 获取应用目录

import 'package:path_provider/path_provider.dart'; Future<String> getApplicationDocumentsDirectory() async { final directory = await getApplicationDocumentsDirectory(); return directory.path; }

六、实战案例

6.1 完整存储服务

class StorageService { static Future<void> saveUser(User user) async { // 使用 SharedPreferences 存储简单数据 final prefs = await SharedPreferences.getInstance(); await prefs.setString('user_name', user.name); // 使用 Hive 存储对象 final box = await Hive.openBox<User>('users'); await box.add(user); } }

七、总结

文件存储方案选择:

  1. 简单数据- SharedPreferences
  2. 复杂对象- Hive
  3. 关系型数据- SQFlite
  4. 文件- 直接文件操作

根据需求选择合适的存储方式。

http://www.rkmt.cn/news/1429928.html

相关文章:

  • Arduino智能交互宝箱:RFID序列解锁与多模块协同设计实战
  • 为什么选择LitCAD:免费开源二维CAD软件的5大核心优势
  • 2026年汕头龙湖区黄金回收:CCIC认证与光谱仪检测标准解析 - 小仙贝贝
  • 江门蓬江韵声汽车音响老店亲测2026.5月推荐 - 资讯纵览
  • 智能GitHub加速方案:Fetch GitHub Hosts技术赋能效率革命
  • 3大核心技术突破:OpCore-Simplify如何重塑OpenCore EFI自动化配置体验
  • 操作系统-day04-做个IMG
  • 无人机固件自由获取终极指南:5分钟掌握DankDroneDownloader完整使用方法
  • 2026年昆明奢侈品回收口碑排行榜,这几家最靠谱 - 资讯纵览
  • 八大网盘直链下载终极指南:LinkSwift 浏览器插件完全教程
  • 2026论文降AI率工具:11款工具实测谁配“靠谱”二字? - 降AI小能手
  • CSS 滚动条样式详解
  • 批量采购家具生产厂家 - 资讯纵览
  • EC11旋转编码器除了调音量还能干嘛?用STC单片机做个多功能旋钮控制器实战
  • 记忆主观观测
  • Vue-Vben-Admin 架构设计:现代中后台系统的可视化仪表盘技术实现
  • ACE-D1.2.1 About the ACE protocol
  • DTD水解反应活化能的计算
  • 批量采购家具哪个团队可靠 - 资讯纵览
  • 2026广州花都注册公司实操攻略:产业优势、避坑干货、本地靠谱代办汇总 - 资讯纵览
  • 全品类存储芯片汇总/DRAM/flash/HBM
  • 2026广州增城注册公司实操详解:创业优势、避坑要点与本地靠谱代办盘点 - 资讯纵览
  • 计算机汉字编码转换过程介绍
  • SQL Server解决代理作业脚本中调用链接服务器失败问题:NT SERVICE\SQLSERVERAGENT. Access to the remote server is denied
  • java复习笔记(3)
  • MapLibre GL JS第34课:使用addProtocol转换要素属性
  • GTA5 村长团队Blender Sollumz 人物制作+权重绘制全流程超详细教程
  • OpenAI GPT-5 Agent Mode 正式发布:最长24小时自主任务,AI编程智能体大战升级
  • TrafficMonitor插件完全指南:打造你的个性化桌面监控中心
  • 基于知识图谱与专家系统的散热材料智能推荐技术