【发布时间】:2021-10-17 16:20:55
【问题描述】:
我的应用程序根据一些用户定义的字符串生成代码。生成的代码可能无效,并且可能会生成一个 UI 树,该树会抛出,例如:
Widget parseUserInput();
parseUserInput('Flexible>Expanded')
=> Yields: Flexible(child: Expanded(child: Container())
这段代码在 Flutter 中抛出。异常被 Flutter 自己捕获。
======== Exception caught by widgets library =======================================================
The following assertion was thrown while applying parent data.:
Incorrect use of ParentDataWidget.
...
我无法用 try/catch 捕捉到这个异常,因为 Flutter 已经捕捉到它了。我也无法通过 MaterialApp 的 ErrorWidget.builder 捕捉到它,因为它似乎也没有被触发。
还有其他方法可以解决这个问题吗?在一个理想的世界里,我会这样做:
ErrorWidget(
onError: revertToLastValidUserInput,
child: WidgetBuilder(builder: (context) => parseUserInput(...)
)
)
【问题讨论】:
-
您不能为用户输入创建过滤器或警告吗?
-
过滤用户输入的所有可能错误不是很合理。另外,我不太确定所有错误会是什么。
-
我认为最好的方法是使用导致错误的模式,因为即使你可以编写一个小部件来捕获错误,对于这种总是会出现异常的情况,你会怎么做@ 987654326@。您需要将整个应用程序包装在一个错误小部件中,这将使调试变得困难