Flutter如何实现本地存储
我正在学习Flutter开发,需要实现本地数据存储功能,但不太清楚具体该怎么做。请问Flutter中有哪些常用的本地存储方案?shared_preferences、sqflite和Hive这些插件各有什么优缺点?对于存储简单的键值对和复杂结构化数据,分别推荐使用哪种方式?能否提供一个简单的代码示例说明如何实现基本的读写操作?谢谢!
2 回复
Flutter本地存储可通过以下几种方式实现:
- shared_preferences:用于存储少量键值对数据。
- sqflite:轻量级SQLite数据库,适合结构化数据存储。
- 文件存储:使用
dart:io或path_provider读写文件。 - Hive:高性能NoSQL数据库,适合大量数据。
根据数据量和需求选择合适方案。
更多关于Flutter如何实现本地存储的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
在Flutter中实现本地存储有多种方式,以下是常用的几种方法:
1. shared_preferences(适合简单数据)
用于存储键值对数据,适合保存用户设置、登录状态等。
import 'package:shared_preferences/shared_preferences.dart';
// 保存数据
Future<void> saveData() async {
final prefs = await SharedPreferences.getInstance();
await prefs.setString('username', 'John');
await prefs.setInt('age', 25);
await prefs.setBool('isLoggedIn', true);
}
// 读取数据
Future<void> readData() async {
final prefs = await SharedPreferences.getInstance();
String? username = prefs.getString('username');
int? age = prefs.getInt('age');
bool? isLoggedIn = prefs.getBool('isLoggedIn');
}
2. sqflite(适合复杂数据)
用于存储结构化数据,适合需要复杂查询的场景。
import 'package:sqflite/sqflite.dart';
class DatabaseHelper {
static final DatabaseHelper _instance = DatabaseHelper._internal();
factory DatabaseHelper() => _instance;
static Database? _database;
Future<Database> get database async {
_database ??= await _initDatabase();
return _database!;
}
Future<Database> _initDatabase() async {
return openDatabase(
'my_database.db',
version: 1,
onCreate: (db, version) async {
await db.execute('''
CREATE TABLE users(
id INTEGER PRIMARY KEY AUTOINCREMENT,
name TEXT,
email TEXT
)
''');
},
);
}
}
3. 文件存储(适合大文件)
用于存储图片、文档等大文件。
import 'dart:io';
import 'package:path_provider/path_provider.dart';
Future<File> writeToFile(String data) async {
final directory = await getApplicationDocumentsDirectory();
final file = File('${directory.path}/my_file.txt');
return file.writeAsString(data);
}
Future<String> readFromFile() async {
try {
final directory = await getApplicationDocumentsDirectory();
final file = File('${directory.path}/my_file.txt');
return await file.readAsString();
} catch (e) {
return '';
}
}
选择建议:
- shared_preferences:简单配置数据
- sqflite:复杂结构化数据
- 文件存储:大文件或自定义格式数据
根据具体需求选择合适的存储方式,记得在pubspec.yaml中添加相应的依赖包。

