Flutter: StatelessWidget.build вызывается несколько раз

Я всегда помещал код в свои вопросы здесь, но на этот раз это невозможно, так как ошибка может быть где-то в тысяче строк кода. Тем не мение:

Я заметил, что метод сборки моего основного экрана (StatelessWidget), который является потомком MaterialApp (свойство home), вызов get как обычно вызывается один раз в режиме отладки, но три раза в режиме выпуска.

При каких обстоятельствах такое могло произойти? Я уже пытался воспроизвести несколько раз, но не получилось.

РЕДАКТИРОВАТЬ:

Проблема заключается в том, что я сохраняю размер экрана, полученный из медиазапроса, как глобальную переменную, чтобы я мог получить к нему доступ из любого места. Теперь мне нужно получить доступ к этой переменной внутри метода init виджета с отслеживанием состояния вниз по дереву. Кажется, нет проблем в режиме отладки, но в режиме выпуска метод сборки виджета, который делает медиа-запрос (должен быть внутри сборки), вызывается странным образом один раз, в результате медиа-запрос имеет размер (0.0, 0.0) Затем вызывается метод init виджета, находящийся ниже по дереву, и затем метод сборки с медиазапросом вызывается еще два раза (на этот раз с правильным размером экрана). В результате у меня нет правильного размера экрана внутри метода init.

0 ответов

https://docs.flutter.io/flutter/widgets/FutureBuilder-class.html

Будущее должно быть получено ранее, например, во время State.initState, State.didUpdateConfig или State.didChangeDependencies. Его нельзя создавать во время вызова метода State.build или StatelessWidget.build при создании FutureBuilder. Если будущее создается одновременно с FutureBuilder, то каждый раз, когда родитель FutureBuilder перестраивается, асинхронная задача перезапускается.

Общее правило состоит в том, чтобы предположить, что каждый метод сборки может вызываться в каждом кадре, и рассматривать пропущенные вызовы как оптимизацию.

(взято с https://github.com/flutter/flutter/issues/27847)

Другие вопросы по тегам