Сохранять позицию в списке при удалении и снова добавлять элементы в список - PullRequest
1 голос
/ 15 апреля 2020

Например, у меня в списке отображается 4 items, скажем, (A, B, C, D) => с позицией (0,1,2,3)

Затем я удалил 3 items, запросив choices.removeWhere ((item) => item.title == data.type); это для (A, B, C) а затем в списке означает только отображение 1 item, а именно A.

Затем я добавляю элементы обратно с запросом choices.add (Choice (title:" A ")); до C.

Теперь результаты в список при добавлении: (D, A, B, C).

Вопрос: Как вы думаете, мы сможем сохранить позицию, даже если мы выполним команды add и remove, чтобы моча оставалась неподвижной (A, B, C, D)?

Это моя модель и список:

class Choice {
  const Choice({this.title, this.index});
  final String title;
  final int index;
}

List<Choice> choices = <Choice>[
  Choice(
    title: A,
    index: 0,
  ),
  Choice(
    title: B,
    index: 1,
  ),
  Choice(
    title: C,
    index: 2,
  ),
  Choice(
    title: D,
    index: 3,
  ),
];

1 Ответ

2 голосов
/ 15 апреля 2020

Да, вы можете удалить некоторые элементы из списка, а затем снова добавить свои элементы.

Используйте поле index для повторной сортировки списка.

Попробуйте этот код, Важной частью является сортировка :

  List<Choice> choices = <Choice>[
    Choice(title: "Cat", index: 0),
    Choice(title: "Dog", index: 1),
    Choice(title: "Bird", index: 2),
  ];

  // removing 
  choices.removeWhere ((item) => item.title == "Cat");
  choices.removeWhere ((item) => item.title == "Dog");

  // adding
  choices.add (Choice (title:"Cat", index: 0));
  choices.add (Choice (title:"Dog", index: 1));

  // sorting by the "index"
  choices.sort((a, b) => a.index.compareTo(b.index));

  // print the list
  choices.forEach((n) => print(n.title));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...