Flutter ReorderableListView с настраиваемым объектом

В настоящее время у меня возникают проблемы с ReorderableListView.

У меня есть список ToDoPrefabs, который я хочу вывести, потому что мой список состоит не из строк, а из чего-то еще, я получаю ошибки в индексе, для ключа и текста.

это ошибка:

"тип" To Prefab "не является подтипом типа" int ""

Подозреваю, что это ключ. Это также логично, поскольку todoprefab не является int. Есть ли у кого-нибудь идеи, как я могу получить еще один индекс типа int в моем ReorderableListView

Это мой ReorderableListView

return ReorderableListView(
      onReorder: _onReorder,
      scrollDirection: Axis.vertical,
      padding: const EdgeInsets.symmetric(vertical: 8.0),
      children: [
        for(final item in toDoManagerClass.todoBank)
        todocardprefab(item)
      ]
    );

todocardprefab (не список)

todocardprefab(var key){
  return Dismissible(
    key: ValueKey(key),
    background: Container(color: Colors.red, alignment: Alignment.centerLeft, child: Icon(Icons.delete),),
    secondaryBackground: Container(color: Colors.green, alignment: Alignment.centerRight, child: Icon(Icons.archive),),
    child: Card(
      child: ListTile(
        //leading: Icon(Icons.check_box_outline_blank),
        title: Text(toDoManagerClass.todoBank[key].toDoText),
        onTap: (){},
      ),
    ),
  );
}

и это простой список.

class ToDoManagerClass{
  List<ToDoPrefab> todoBank = [
    ToDoPrefab(text: 'Homework', f: false),
    ToDoPrefab(text: 'Homework1', f: false),
    ToDoPrefab(text: 'Homework12', f: false),
    ToDoPrefab(text: 'Homework123', f: false),
    ToDoPrefab(text: 'Homework1234', f: false),
    ToDoPrefab(text: 'Homework12345', f: false),
  ];
}

1 ответ

Решение

Этот метод должен работать:

Ваш доступный просмотр списка

return ReorderableListView(
      onReorder: _onReorder,
      scrollDirection: Axis.vertical,
      padding: const EdgeInsets.symmetric(vertical: 8.0),
      children: [
        for(final item in toDoManagerClass.todoBank)
        todocardprefab(item, index())
      ]
    );

и вот функция. При каждом вызове он возвращает большее число.

int index(){
    if(i < toDoManagerClass.todoBank.length){
      print(i);
      i++;
    }
    return i-1;
  }

теперь вам нужно использовать только индекс вместо элемента в вашей todocard

Другие вопросы по тегам