我经常遇到这个问题,每次我运行 main.dart 并从我正在测试的手机上重新安装它时,带有数据表的数据库“chinook.db”就会传递到应用程序,但没有里面的内容。当我在 data/data/com.example.(appname) 中打开数据库时,它只显示“en_US”,仅显示“en_US”。我在任何地方都看不到任何解决这个问题的方法。我将附上 main.dart 和 pubspec.yaml。
main.dart
Future<void> _openDatabase() async {
try {
// Get the path to the databases directory
final databasesPath = await getDatabasesPath();
final path = join(databasesPath, 'chinook.db');
// Check if the database exists
final exists = await databaseExists(path);
if (!exists) {
// Copy the database from assets to the databases directory
ByteData data = await rootBundle.load('assets/chinook.db');
List<int> bytes = data.buffer.asUint8List(data.offsetInBytes, data.lengthInBytes);
await File(path).writeAsBytes(bytes);
}
// Open the database
_database = await openDatabase(path);
setState(() {
_isDatabaseConnected = true;
});
print('Connected to database');
} catch (e) {
print('Error opening database: $e');
}
}
pubspec.yaml
assets:
- assets/chinook.db
我希望数据库能够从资产文件夹正确传递到数据/数据应用程序文件夹。自从我一周前刚开始编写 flutter 代码以来,我正在尝试的就是手动替换 data/data 文件夹中的数据库,以便我可以测试我的应用程序。
我明白了,我只是没有在我的登录模块上执行数据库资产的复制。