flutter如何使用sqlite3_flutter_libs插件

在Flutter项目中集成sqlite3_flutter_libs插件时遇到问题,按照文档添加依赖后运行报错。具体步骤是:在pubspec.yaml中添加了依赖项,同步后尝试调用数据库操作,但Android端提示找不到本地库文件,iOS端直接崩溃。请问正确的集成流程是什么?是否需要额外配置gradle或podfile?如何处理不同平台的兼容性问题?能否提供一个完整的初始化示例代码?

2 回复

在Flutter中使用sqlite3_flutter_libs插件:

  1. 添加依赖到pubspec.yaml
dependencies:
  sqlite3_flutter_libs: ^0.5.0
  1. 导入包:
import 'package:sqlite3_flutter_libs/sqlite3_flutter_libs.dart';
  1. 初始化数据库路径:
await applyWorkaroundToOpenSqlite3OnOldAndroidVersions();
  1. 创建数据库连接:
final db = sqlite3.open(path);

适用于Android和iOS平台,提供原生SQLite支持。

更多关于flutter如何使用sqlite3_flutter_libs插件的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


在 Flutter 中使用 sqlite3_flutter_libs 插件,主要目的是提供 SQLite 本地数据库支持。以下是基本步骤和示例代码:

1. 添加依赖

pubspec.yaml 文件中添加:

dependencies:
  sqlite3_flutter_libs: ^0.5.0
  sqlite3: ^2.0.0

2. 基本使用

import 'dart:io';
import 'package:sqlite3/sqlite3.dart';

void main() {
  // 获取数据库路径(需配合 path_provider 插件)
  final dbPath = '${Directory.current.path}/example.db';
  
  // 打开数据库
  final db = sqlite3.open(dbPath);

  // 创建表
  db.execute('''
    CREATE TABLE IF NOT EXISTS users (
      id INTEGER PRIMARY KEY AUTOINCREMENT,
      name TEXT NOT NULL,
      age INTEGER
    );
  ''');

  // 插入数据
  db.execute('INSERT INTO users (name, age) VALUES (?, ?)', ['Alice', 30]);

  // 查询数据
  final result = db.select('SELECT * FROM users');
  for (final row in result) {
    print('ID: ${row['id']}, Name: ${row['name']}, Age: ${row['age']}');
  }

  // 关闭数据库
  db.dispose();
}

3. 配合路径管理(推荐)

安装 path_provider 插件:

dependencies:
  path_provider: ^2.1.1

改进的路径获取方式:

import 'package:path_provider/path_provider.dart';

Future<String> getDbPath(String dbName) async {
  final documentsDir = await getApplicationDocumentsDirectory();
  return '${documentsDir.path}/$dbName';
}

4. 注意事项

  • 该插件仅提供 SQLite 原生库,数据库操作需通过 sqlite3 包完成
  • 建议在 initStatemain 中初始化数据库
  • 记得在操作完成后调用 db.dispose() 释放资源
  • 对于复杂应用,建议封装成单独的 DatabaseHelper 类

5. 完整示例

class DatabaseHelper {
  static Database? _db;

  static Future<Database> get database async {
    if (_db != null) return _db!;
    
    final path = await getDbPath('app.db');
    _db = sqlite3.open(path);
    _initDatabase(_db!);
    return _db!;
  }

  static void _initDatabase(Database db) {
    db.execute('''
      CREATE TABLE IF NOT EXISTS notes (
        id INTEGER PRIMARY KEY AUTOINCREMENT,
        title TEXT,
        content TEXT
      )
    ''');
  }
}

这样即可在 Flutter 应用中稳定使用 SQLite 数据库。

回到顶部