一、增加第三方库
flutter pub add sqflite_common_ffi
二、在pubspec.yaml中配置assets
留神格局
assets: - assets/xxx.db
三、初始化数据库
我的项目初始化当前会从根目录下的.dart_tool/sqflite_common_ffi/databases/xxx.db读取数据库文件,如果没有则把assets目录下的拷贝到该目录下。
initialDatabase() async { sqfliteFfiInit(); var databaseFactory = databaseFactoryFfi; var databasesPath = await databaseFactory.getDatabasesPath(); var path = join(databasesPath, "express.db"); print(path); var exists = await databaseFactory.databaseExists(path); if (!exists) { // Should happen only the first time you launch your application print("Creating new copy from asset"); try { await Directory(dirname(path)).create(recursive: true); } catch (_) {} // Copy from asset ByteData data = await rootBundle.load('assets/express.db'); print(join('assets','express.db')); // ByteData data = await rootBundle.load(join('assets','express.db')); List<int> bytes = data.buffer.asUint8List(data.offsetInBytes, data.lengthInBytes); // Write and flush the bytes written await File(path).writeAsBytes(bytes, flush: true); } else { print("Opening existing database"); } // open the database this._db = await databaseFactory.openDatabase(path); print(databasesPath); }
四、查问数据
// 查问 Future<List<UnitPrice>> queryPrice() async { List<UnitPrice> priceList = []; var result = await _db.query(table_name, where: 'id = ?', whereArgs: [1]); return priceList; }