3分钟搞定Flutter本地存储:SQLite实战指南

【免费下载链接】flutter-examples [Examples] Simple basic isolated apps, for budding flutter devs. 【免费下载链接】flutter-examples 项目地址: https://gitcode.com/gh_mirrors/fl/flutter-examples

你还在为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]);
}

实际效果展示

应用界面简洁直观,支持添加和删除笔记功能:

SQLite示例应用界面

使用流程:

  1. 在文本框输入内容,点击"Add"按钮保存
  2. 笔记会立即显示在下方列表
  3. 长按笔记项可删除该条记录

数据会永久保存在设备中,即使关闭应用也不会丢失。

最佳实践总结

  1. 数据库设计

    • 表结构设计遵循第三范式
    • 合理设置索引提升查询效率
    • 使用版本控制管理表结构变更
  2. 性能优化

    • 批量操作使用事务
    • 避免主线程执行耗时查询
    • 大结果集采用分页查询
  3. 错误处理

    • 所有数据库操作需try-catch包裹
    • 实现数据库备份与恢复机制
    • 关键操作添加日志记录

扩展学习资源

点赞收藏本文,关注获取更多Flutter实战技巧!下期预告:"Flutter数据加密存储方案"。

【免费下载链接】flutter-examples [Examples] Simple basic isolated apps, for budding flutter devs. 【免费下载链接】flutter-examples 项目地址: https://gitcode.com/gh_mirrors/fl/flutter-examples

Logo

开源鸿蒙跨平台开发社区汇聚开发者与厂商,共建“一次开发,多端部署”的开源生态,致力于降低跨端开发门槛,推动万物智联创新。

更多推荐