Получить размер виджета с ошибкой для перестройки

#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);
    },
  );
};