#list #flutter #dart #crud
Вопрос:
Я использую карточки для салфеток tinder. Он обладает следующим свойством:
swipeCompleteCallback:
(CardSwipeOrientation orientation, int index) {
updateStack(index);
},
),
Функция обновления стека:
class _TinderCardsState extends State<TinderCards>
with TickerProviderStateMixin {
List lstUsers = [];
int lstUsersLength = 0;
@override
void initState() {
super.initState();
setState(() {
lstUsers = users;
lstUsersLength = users.length;
});
}
void updateStack(int index) {
setState(() {
lstUsersLength = lstUsersLength - 1;
lstUsers.removeAt(index);
});
}
Так что в основном просто пытаюсь удалить верхнюю карту из стопки. Я получаю вышеуказанную ошибку, даже если это виджет с отслеживанием состояния.
Почему я получаю эту ошибку?
Данные (просто файл дротиков со списком, без класса или чего-либо еще):
const List users = [
{
"id": "p1",
"name": "John Doe",
"age": "44",
"imageUrl":
"assets/images/anastasia-vityukova-unsplash-blackandwhiteimage.png",
"profession": "Financial Consultant"
},
....
]
Комментарии:
1. можете ли вы показать нам, какую именно ошибку вы получаете?
2. Возможно, это не связано с проблемой, но :
lstUsers.remove(index)' will try to remove the item ìndex
из списка. Вы должны использоватьlstUsers.removeAt(index)
. ТакжеlstUsers.removeWhere((item) => index == index);
будут удалены все элементы вашего списка, потому(index == index)
что всегда будет верно. Может быть, вы получили ошибку с этой частью без комментариев?3. Каково определение списка пользователей? Вы назначаете пользователей LSTUSER пользователям Пользователи LSTUSER = пользователи; Можно ли изменить список пользователей?
Ответ №1:
Удалите const раньше List users = [...]
.
Вы объявляете пользователей константой времени компиляции. Вот что делает его неизменяемым.
В dart объекты передаются по ссылке. Когда вы пишете lstUsers = users;
, пользователи LST становятся «представлением» пользователей, а затем также становятся неизменяемыми.
Еще один способ избежать этого : lstUsers = users.toList()
. Затем он предоставляет пользователям LST значение нового списка, созданного из пользователей.
Комментарии:
1. Не могу поверить, что я этого не видел.
2. Я отредактировал, чтобы включить другой способ, позволяющий пользователям оставаться постоянными.