Как установить новое состояние при изменении размера окна?

#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 там. Вы пробовали это, как в моем примере выше?