#flutter #state #statefulwidget
#flutter #состояние #statefulwidget
Вопрос:
Итак, я пытаюсь разместить три ImageSliders на одной странице / карточке. Они очень похожи, поэтому я создал один класс и просто хотел передать изменяющиеся значения.
На самом деле это сработало не так, как предполагалось: теперь есть только три раза последний вызванный слайдер.
Я решил, что это, вероятно, то же самое состояние, которое перезаписывается, и попытался передать уникальный ключ.
Однако ничего не изменилось.
Ползунок:
List<String> _imgList;
List<String> _nameList;
String _description;
class ShopListSlider extends StatefulWidget {
ShopListSlider(
{Key key,
String description,
@required List<String> imgList,
@required List<String> nameList})
: super(key: key) {
_imgList = imgList;
_nameList = nameList;
_description = description;
}
@override
_ShopListSliderState createState() => _ShopListSliderState();
}
class _ShopListSliderState extends State<ShopListSlider> {
@override
void initState() {
super.initState();
}
@override
Widget build(BuildContext context) {
return Container(...);
}
}
Содержимое виджета, вызывающего слайдер (ы):
child: Column(children: [
SizedBox(height: 50),
ShopListSlider(
key: UniqueKey(),
description: "Restaurants in Deiner Nähe",
imgList: imgListNear,
nameList: nameListNear),
SizedBox(height: 50),
ShopListSlider(
key: UniqueKey(),
description: "Beliebte Restaurants",
imgList: imgListBest,
nameList: nameListBest),
SizedBox(height: 50),
ShopListSlider(
key: UniqueKey(),
description: "Deine Favoriten",
imgList: imgListFavorites,
nameList: nameListFavorites),
]),
Ответ №1:
Это будет работать нормально без каких-либо ключей.
Проблема в том, что переменные вашего класса не находятся внутри класса, они находятся на уровне пакета, что в основном означает, что все виджеты не имеют состояния, разделяя некоторое глобальное состояние.
Просто переместите их в состояние и удалите эти ключи:
class _ShopListSliderState extends State<ShopListSlider> {
List<String> _imgList;
List<String> _nameList;
String _description;
Fwiw, подобное использование uniqueKey() приведет к перестройке виджета everysingle build(), независимо от того, изменено оно или нет, что на самом деле не то, что вы хотите.
Комментарии:
1. Спасибо! Это сработало отлично. Я даже узнал о доступе к данным из состояния через widget.data. Спасибо, чувак! 🙂