Я создаю систему сетки, и у меня возникли проблемы с обновлением состояния каждого виджета подряд. Их размеры должны динамически изменяться. didUpdateWidget() вызывается в определенных случаях, но состояние каждого виджета не всегда обновляется.
В принципе, как я могу перебрать список StatefulWidgets внутри функции Bloc и заставить каждый виджет обновлять свое состояние, чтобы изменить ширину?
Все руководства, которые я нахожу, посвящены внутреннему, а не внешнему обновлению Stateful Widget.
class ResponsiveGridItem extends StatefulWidget {
double itemWidth;
double height;
Color color;
String content;
int row;
int column;
bool empty;
ResponsiveGridItem(
this.itemWidth ,
this.height ,
this.color,
this.content,
this.row,
this.column,
this.empty,);
@override
ResponsiveGridItemState createState() => ResponsiveGridItemState();
}
class ResponsiveGridItemState extends State<ResponsiveGridItem> {
double itemWidth = 37;
double height = 100;
Color color = Colors.blue;
String content = "";
int row;
int column;
bool empty = true;
@override
initState() {
super.initState();
itemWidth = widget.itemWidth;
// print("init itemWdith is " + itemWidth.toString());
height = widget.height;
color = widget.color;
content = widget.content;
row = widget.row;
column = widget.column;
empty = widget.empty;
}
@override
void didUpdateWidget(ResponsiveGridItem oldWidget) {
itemWidth = widget.itemWidth;
color = widget.color;
row = widget.row;
column = widget.column;
content = widget.content;
empty = widget.empty;
super.didUpdateWidget(oldWidget);
}
@override
Widget build(BuildContext context) {
return Container(
height: 100,
width: itemWidth,
alignment: Alignment(0, 0),
color: color,
child: DragTargetWidget(
row,
column,
empty,
cardItem: CardItem(content: content, width: itemWidth),
),
);
}
}
Просто добавлю, что это будет цикл for, который я использую. Я удалил все попытки написать updateItemWidth из своего виджета для этого вопроса.
for (int i = 0; i < gridData[row].length; i++) {
gridData[row][i].updateItemWidth(newGridItemsSize);
}