insertAll method
Insere múltiplos registros com auto-incremento de ID
Implementation
Future<List<int>> insertAll(List<Map<String, dynamic>> dataList) async {
if (dataList.isEmpty) return [];
final rows = await getRawRows();
if (rows.isEmpty) throw Exception("Cabeçalhos não encontrados.");
final headers = List<String>.from(rows[0]);
int idColIndex = headers.indexOf("id");
if (idColIndex == -1) throw Exception("Coluna 'id' não encontrada.");
int maxId = 0;
for (var i = 1; i < rows.length; i++) {
if (rows[i].length > idColIndex) {
var currentIdValue = rows[i][idColIndex].toString();
if (currentIdValue.isNotEmpty) {
int? currentId = int.tryParse(currentIdValue);
if (currentId != null && currentId > maxId) {
maxId = currentId;
}
}
}
}
List<List<Object?>> newRows = [];
List<int> newIds = [];
int nextId = maxId + 1;
for (var data in dataList) {
final newRow = headers.map((h) {
if (h == "id") {
return nextId;
}
return data[h];
}).toList();
newRows.add(List.from(newRow));
newIds.add(nextId);
nextId++;
}
await api.spreadsheets.values.append(
sheets.ValueRange(values: newRows),
spreadsheetId,
'$sheetName!A1',
valueInputOption: "USER_ENTERED",
);
_cachedRawRows = null; // Invalida o cache
return newIds;
}