Я сохраняю список профилей в sqflite и пытаюсь сделать мой список переставляемым. В моем классе Helper у меня есть следующие методы:
static Future insertProfile(Map<String, dynamic> profile) async {
await db.insert('Profiles', profile);
}
static Future deleteProfile(int id) async {
await db.delete('Profiles', where: 'id = ?', whereArgs: [id]);
}
static Future updateProfile(Map<String, dynamic> profile) async {
await db.update('Profiles', profile,
where: 'id = ?', whereArgs: [profile['id']]);
}
Список моих профилей выглядит следующим образом:
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(title: Text('Profiles')),
body: FutureBuilder(
future: ProfileProvider.getProfileList(),
builder: (context, snapshot) {
if (snapshot.connectionState == ConnectionState.done) {
var profiles = snapshot.data;
return snapshot.data == null
? Container()
: ReorderableListView(
children: List.generate(
profiles.length,
(index) {
return Dismissible(
key: ValueKey("value$index"),
background: slideBackground(),
onDismissed: (direction) {
ProfileProvider.deleteProfile(
profiles[index]['id']);
showSnackBar(
context, profiles[index]['title'], [index]);
},
Я пытаюсь повторить этот тип функции, но с Sqlite:
void _onReorder(int oldIndex, int newIndex) {
setState(
() {
if (newIndex > oldIndex) {
newIndex -= 1;
}
final String item = profiles.removeAt(oldIndex);
profiles.insert(newIndex, item);
},
);
}
До сих пор мне удалось успешно удалить:
onReorder: (int oldIndex, int newIndex) {
if (newIndex > oldIndex) {
newIndex -= 1;
}
setState(
() {
ProfileProvider.deleteProfile(profiles[oldIndex]['id']);
},
);
},
Проблема в том, что я не могу найти, как повторно вставить тот же профиль в новый индекс.
Я перепробовал много вещей, но последняя из них такова:
var item = profiles[oldId]['id'];
ProfileProvider.deleteProfile(profiles[oldId]['id']);
ProfileProvider.insertProfile(item);
Однако я получаю это сообщение об ошибке:
type 'int' is not a subtype of type 'Map<String, dynamic>'
Есть идеи?