3分钟搞定Flutter本地存储:SQLite实战指南
你还在为Flutter应用数据持久化烦恼?从临时变量丢失到复杂数据库配置,这些问题是否让你头疼?本文将通过**save_data_locally_with_sqlite**示例,带你3步实现稳定可靠的本地数据存储,无需复杂配置,看完就能上手。读完本文你将获得:- 零门槛SQLite数据库集成方案- 完整CRUD操作实现模板- 数据持久化最佳实践指南## 为什么选择SQLite?S
3分钟搞定Flutter本地存储:SQLite实战指南
你还在为Flutter应用数据持久化烦恼?从临时变量丢失到复杂数据库配置,这些问题是否让你头疼?本文将通过save_data_locally_with_sqlite示例,带你3步实现稳定可靠的本地数据存储,无需复杂配置,看完就能上手。
读完本文你将获得:
- 零门槛SQLite数据库集成方案
- 完整CRUD操作实现模板
- 数据持久化最佳实践指南
为什么选择SQLite?
SQLite是移动端开发的首选本地数据库方案,具备以下优势:
- 轻量级:无需单独安装服务,嵌入应用体积仅增加几百KB
- 跨平台:完美支持Android/iOS双端
- 高性能:单文件设计,读写速度媲美原生数据库
- 全功能:支持标准SQL语法及事务处理
本示例项目save_data_locally_with_sqlite/展示了如何在Flutter中集成SQLite,实现笔记的本地存储功能。
实现步骤
1. 添加依赖与基础配置
首先需要在pubspec.yaml中添加SQLite依赖:
dependencies:
sqflite: ^2.3.0 # 数据库核心依赖
path_provider: ^2.1.0 # 文件路径管理
项目中已预配置完成,可直接查看save_data_locally_with_sqlite/pubspec.yaml获取完整依赖信息。
2. 数据库核心封装
核心封装类LocalDatabase实现了单例模式,确保全局只有一个数据库连接:
class LocalDatabase {
static final _databaseName = "database.db";
static final _databaseVersion = 1;
static Database? _database;
static final LocalDatabase instance = LocalDatabase._privateConstructor();
Future<Database?> get database async {
if (_database != null) return _database;
_database = await _initDatabase();
return _database;
}
_initDatabase() async {
Directory documentsDirectory = await getApplicationDocumentsDirectory();
String path = join(documentsDirectory.path, '$_databaseName');
return await openDatabase(path, version: _databaseVersion,
onCreate: (db, int) async {
await db.execute('''
CREATE TABLE data (
datetime TEXT,
note TEXT,
timestamp TIMESTAMP
)
''');
});
}
}
关键代码解析:
- 单例模式通过
_privateConstructor确保唯一实例 getApplicationDocumentsDirectory()获取应用私有存储路径onCreate回调在数据库首次创建时执行表结构初始化
3. 实现CRUD操作
数据操作封装在database_queries.dart中,提供完整的增删改查接口:
插入数据
Future<int> insertData(String datetime, String note) async {
Database? db = await LocalDatabase.instance.database;
return await db!.insert('data', {
'datetime': datetime,
'note': note,
'timestamp': DateTime.now().millisecondsSinceEpoch
});
}
查询数据
Future<List<Map<String, dynamic>>> getAllData() async {
Database? db = await LocalDatabase.instance.database;
return await db!.query('data', orderBy: 'timestamp DESC');
}
删除数据
Future<int> deleteData(String datetime) async {
Database? db = await LocalDatabase.instance.database;
return await db!.delete('data', where: 'datetime = ?', whereArgs: [datetime]);
}
实际效果展示
应用界面简洁直观,支持添加和删除笔记功能:
使用流程:
- 在文本框输入内容,点击"Add"按钮保存
- 笔记会立即显示在下方列表
- 长按笔记项可删除该条记录
数据会永久保存在设备中,即使关闭应用也不会丢失。
最佳实践总结
-
数据库设计
- 表结构设计遵循第三范式
- 合理设置索引提升查询效率
- 使用版本控制管理表结构变更
-
性能优化
- 批量操作使用事务
- 避免主线程执行耗时查询
- 大结果集采用分页查询
-
错误处理
- 所有数据库操作需try-catch包裹
- 实现数据库备份与恢复机制
- 关键操作添加日志记录
扩展学习资源
- 官方文档:sqflite | Dart Package
- 进阶示例:save_data_locally_with_sqlite/lib/
- 项目完整代码:save_data_locally_with_sqlite/
点赞收藏本文,关注获取更多Flutter实战技巧!下期预告:"Flutter数据加密存储方案"。
更多推荐


所有评论(0)