Я пытаюсь добавить несколько данных в Sqflite во флаттере, но это не работает.
Например, я хочу добавить список класса Todo.
Пожалуйста, если есть какая-либо помощь, я буду признателен.
Я попытался написать необработанный SQL, чтобы добавить список данных, но это не сработало. Все, что я получил, это куча ошибок.


на самом деле вы не можете вставить все данные одной функцией, но вы можете сделать это с помощью циклов. вы можете зациклить тигр, пока длина списка и сделать вставку, пока это правда! это слишком просто
List<Todo>todos=[Todo('example'),Todo('example'),Todo('example'),Todo('example')];
//here should be the db provide class
for(Todo iteam in todos){
// do the insert functionality
// here try the way you insert single todo in db
db.insert(iteam.toJson())
}
Чтобы добавить список объектов класса Todo в Sqflite во Flutter, вы можете выполнить следующие действия:
DatabaseProvider из пакета sqflite. Вы можете использовать этот класс для определения методов создания, открытия и обновления базы данных.import 'package:sqflite/sqflite.dart';
import 'package:path/path.dart';
class DatabaseHelper {
static final DatabaseHelper instance = DatabaseHelper._instance();
static Database? _db;
DatabaseHelper._instance();
Future<Database> get db async {
if (_db == null) {
_db = await _initDb();
}
return _db!;
}
Future<Database> _initDb() async {
final String dbPath = await getDatabasesPath();
final String path = join(dbPath, 'todo_db.db');
final todoDb = await openDatabase(path, version: 1, onCreate: _createDb);
return todoDb;
}
void _createDb(Database db, int version) async {
await db.execute(
'CREATE TABLE todos(id INTEGER PRIMARY KEY AUTOINCREMENT, title TEXT, description TEXT, isDone INTEGER)');
}
Future<List<Map<String, dynamic>>> getTodosMapList() async {
final Database db = await instance.db;
final List<Map<String, dynamic>> result = await db.query('todos');
return result;
}
Future<int> insertTodoList(List<Todo> todoList) async {
final Database db = await instance.db;
final Batch batch = db.batch();
for (Todo todo in todoList) {
batch.insert('todos', todo.toMap());
}
final List<dynamic> result = await batch.commit();
final int affectedRows = result.reduce((sum, element) => sum + element);
return affectedRows;
}
}
Todo, содержащий данные, которые вы хотите сохранить в базе данных. В этом примере класс Todo имеет четыре свойства: id, title, description и isDone.class Todo {
int? id;
String? title;
String? description;
bool? isDone;
Todo({
this.id,
this.title,
this.description,
this.isDone = false,
});
Map<String, dynamic> toMap() {
return {
'id': id,
'title': title,
'description': description,
'isDone': isDone ? 1 : 0,
};
}
static Todo fromMap(Map<String, dynamic> map) {
return Todo(
id: map['id'],
title: map['title'],
description: map['description'],
isDone: map['isDone'] == 1,
);
}
}
insertTodoList класса DatabaseHelper создайте пакетный объект и используйте метод insert для вставки каждого объекта Todo в базу данных. Наконец, используйте метод commit для выполнения пакета.Future<int> insertTodoList(List<Todo> todoList) async {
final Database db = await instance.db;
final Batch batch = db.batch();
for (Todo todo in todoList) {
batch.insert('todos', todo.toMap());
}
final List<dynamic> result = await batch.commit();
final int affectedRows = result.reduce((sum, element) => sum + element);
return affectedRows;
}
insertTodoList для вставки списка `Todo
Спасибо за ваш ответ, вы спасли день. Он работает из коробки, я очень благодарен.