Solución:
Como lo menciona @chunhunghan, puede usar lotes para insertar datos masivos.
Aquí está la guía paso a paso:
- Prepare su archivo json, por ejemplo
cities.json
(cree un archivo csv de datos y use un convertidor de csv a json como este) - Agregar
cities.json
archivar en tuassets
directorio -
Definirlo en
pubspec.yaml
como esto:assets: - assets/cities.json
-
Pega este código dentro
onCreate
método de su clase de base de datos (asegúrese de que sea después de la consulta de creación de la tabla)Batch batch = db.batch(); String citiesJson = await rootBundle.loadString('assets/json/cities.json'); List citiesList = json.decode(citiesJson); citiesList.forEach((val) { //assuming you have 'Cities' class defined Cities city = Cities.fromMap(val); batch.insert(tblCities, city.toMap()); }); batch.commit();
¡Eso es todo! 🙂
Hay soporte por lotes
Para evitar el ping-pong entre dardos y código nativo, puede usar Batch:
batch = db.batch();
batch.insert('Test', {'name': 'item'});
batch.update('Test', {'name': 'new_item'}, where: 'name = ?', whereArgs: ['item']);
batch.delete('Test', where: 'name = ?', whereArgs: ['item']);
results = await batch.commit();
ejemplo oficial https://github.com/tekartik/sqflite/blob/master/sqflite/example/lib/batch_test_page.dart
En su caso, para la lista de bucles con el comando batch.insert, es más fácil de mantener
para simplificar la sintaxis, use toMap, ejemplo
batch.insert("cities", city.toMap());
detalle https://www.techiediaries.com/flutter-sqlite-crud-tutorial/
Si prefiere rawInsert, consulte Insertar varios registros en Sqflite