#flutter
#flutter
Вопрос:
Как установить новое состояние при изменении размера окна? Я пробовал это. Мне действительно нужно изменить состояние.
@override
Widget build(BuildContext context) {
return LayoutBuilder(
builder: (context, constraint) {
setState(() {
if (constraint.width > 500) {
_calendarType = CalendarType.WEEK_MODE;
} else {
_calendarType = CalendarType.DAY_MODE;
}
});
return Container(
color: Colors.white,
child: ...;
},
);
}
Ответ №1:
Как насчет того, чтобы сделать это
...
if (constraint.width > 500) {
_calendarType = CalendarType.WEEK_MODE;
} else {
_calendarType = CalendarType.DAY_MODE;
}
...
Комментарии:
1. Я вызываю setState в методе сборки. Есть ли какие-либо побочные эффекты?
2. Только что обновил код, вызов setState в методе сборки имеет побочные эффекты. просто убедитесь, что вы используете statefullwidget
3. Вы также можете достичь вышеуказанного, используя виджет без состояния вместе с блоком, который обновляет состояние при изменении размера Windows
4. Виджет находится в состоянии. Если метод сборки запускается при вызове setState, не будет ли это бесконечным циклом?
5. Вызов setState в методе сборки попытается перестроить дерево виджетов до сборки виджетов, поэтому вам нужно стараться не использовать setState там. Вы пробовали это, как в моем примере выше?