要获取屏幕上小部件的大小/位置,我可以使用GlobalKey获取其BuildContext,然后找到RenderBox。
但是对于ErrorWidget(Red Screen)发生build()错误时,我想计算错误区域的大小,然后决定是销毁页面还是替换为其他小部件,例如Container()。
我已经使用ErrorWidget.builder创建自定义ErrorWidget,但是需要更加精确,对ErrorWidget的不同大小进行区别对待。如何获取ErrorWidget大小进行重建?
答案 0 :(得分:0)
ErrorWidget
不要回避小部件规则。
小部件不能依赖于其他任何东西的大小。
但是,您可以使用LayoutBuilder
来计算可用大小。
答案 1 :(得分:0)
LayoutBuilder
窗口小部件可以帮助我们在最终构建子窗口小部件之前了解多少可用空间。它的构建器函数具有参数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);
},
);
};