#flutter
#flutter
Вопрос:
Чтобы получить размер / положение виджета на экране, я могу использовать GlobalKey для получения его BuildContext, а затем найти окно визуализации.
Но для ErrorWidget (красный экран) при возникновении ошибки build () я хочу вычислить размер области ошибок, а затем решить, уничтожать страницу или заменять другим виджетом, например, Container ().
Я уже использовал ErrorWidget.builder для создания пользовательского ErrorWidget, но нужно быть более точным, разные размеры ErrorWidget обрабатываются по-разному. Как получить размер ErrorWidget для перестройки?
Ответ №1:
ErrorWidget
не уклоняйтесь от правил виджетов. Виджет не может зависеть от размера чего-либо еще.
Однако вы можете использовать LayoutBuilder
для вычисления доступного размера.
Комментарии:
1. Это хорошая идея, используйте логику проверки ограничений LayoutBuilder.
Ответ №2:
LayoutBuilder
Виджет может помочь нам узнать, сколько места доступно для дочернего виджета, прежде чем окончательно его создавать. Эта функция builder имеет параметры, BuildContext
контекст, BoxConstraints
ограничения.
BoxConstraints
ограничения предоставляют нам возможность выполнять пользовательскую логику.
ErrorWidget.builder = (FlutterErrorDetails details) {
return LayoutBuilder(
builder: (BuildContext context, BoxConstraints constraints) {
Size screenSize = MediaQuery.of(context).size;
double screenRatio = (constraints.maxWidth * constraints.maxHeight) /
(screenSize.width * screenSize.height);
if (screenRatio < ACCEPTABLE_SCREEN_RATIO) {
return Container();
}
return ErrorWidget(details.exception);
},
);
};