Как использовать Reorderable со списком Sqflite? - PullRequest
0 голосов
/ 11 апреля 2020

Я сохраняю список профилей в 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>'

Есть идеи?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...