В руководстве Открытие базы данных активов объясняются шаги, которые необходимо выполнить для объединения и открытия ранее существующей базы данных SQLite в приложении Flutter:.
Во-первых, вы должны отредактировать конфигурацию pubspec.yaml
так, чтобы она ссылалась на уже существующий файл базы данных SQLite, чтобы он был включен в ваше приложение при его создании. В следующем примере мы будем предполагать, что файл существует в assets/demo.db
в каталоге вашего приложения Flutter:
# The following section is specific to Flutter.
flutter:
# The following line ensures that the Material Icons font is
# included with your application, so that you can use the icons in
# the material Icons class.
uses-material-design: true
# To add assets to your application, add an assets section, like this:
assets:
- assets/demo.db
Далее при инициализации приложения вам нужно будет скопировать данные связанного файла в удобное для использования место, поскольку сам связанный ресурс не может быть непосредственно открыт в виде файла на Android.
Функция sqflite.getDatabasesPath()
вернет каталог, который будет использоваться для этого. Обычно это будет что-то вроде /data/data/org.example.myapp/databases/
на Android. Имея это в виду, вы можете загрузить байтовые данные из вашего комплектного ресурса и создать файл базы данных приложения с возможностью записи, который здесь называется app.db
:
// Construct the path to the app's writable database file:
var dbDir = await getDatabasesPath();
var dbPath = join(dbDir, "app.db");
// Delete any existing database:
await deleteDatabase(dbPath);
// Create the writable database file from the bundled demo database file:
ByteData data = await rootBundle.load("assets/demo.db");
List<int> bytes = data.buffer.asUint8List(data.offsetInBytes, data.lengthInBytes);
await File(dbPath).writeAsBytes(bytes);
Наконец, вы можете открыть созданный файл базы данных при запуске приложения:
var db = await openDatabase(dbPath);