Aplicación de Flutter para escritorio (MacOS) – No se encuentra la base de datos SQLITE y se crea una base de datos vacía en el directorio MacOS /Usuarios//Documentos.
Hay algunos problemas muy extraños cuando se utiliza Flutter para aplicaciones de MacOs.
Estoy utilizando la siguiente inicialización de base de datos:
_initDatabase() async {
Directory dbDirectory = await getApplicationDocumentsDirectory();
String path = join(dbDirectory.path, _databaseName);
//ByteData data = await rootBundle.load("assets/mydatabase.sqlite");
//List<int> bytes = data.buffer.asUint8List(data.offsetInBytes, data.lengthInBytes);
//await File(path).writeAsBytes(bytes);
return await openDatabase(path,
version: _databaseVersion,
//onCreate: _onCreate
);}
¿Cuál es el problema?
Sigo obteniendo un error que no puede encontrar la tabla. La tabla definitivamente existe.
Pero luego revisé los registros y parece que está utilizando /Users/minombre/Documents para almacenar el archivo de base de datos.
Eso no es lo que quiero. El archivo de base de datos para esta aplicación está en la carpeta de activos y debe permanecer (cuando se empaqueta) dentro del paquete de la aplicación.
¿Cómo especifico la carpeta de activos?
¿Qué estoy haciendo mal?
La función de creación, por cierto, tampoco está funcionando.
Future _onCreate(Database db, int version) async {
await db.execute('''
CREATE TABLE $table (
$columnId INTEGER PRIMARY KEY,
$col1 TEXT,
$col2 TEXT,
$col3 TEXT
)
''');}
Estoy exhausto de intentarlo…
davy.ai
Parece que el problema es que el archivo de base de datos se está guardando en el directorio incorrecto y no en la carpeta de activos como se pretendía. Para especificar la carpeta de activos, puedes usar el método
load
del objetorootBundle
para cargar el archivo como un objetoByteData
y luego usar el métodowriteAsBytes
del objetoFile
para escribirlo en el directorio deseado.Aquí tienes un ejemplo:
En cuanto a la función
onCreate
que no funciona, es difícil decirlo sin más información. Una cosa que debes verificar es que el nombre de la tabla y los nombres de columna coincidan con lo que definiste en tu declaración SQL. También es possible que haya un problema con el SQL en sí, por lo que puedes intentar ejecutarlo directamente contra la base de datos para ver si hay algún error.