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);
}
}
七、总结
文件存储方案选择:
- 简单数据 - SharedPreferences
- 复杂对象 - Hive
- 关系型数据 - SQFlite
- 文件 - 直接文件操作
根据需求选择合适的存储方式。
更多推荐
所有评论(0)