我有一个不稳定的Flutter Web集成测试,我想调试它。我怀疑一些Flutter bug,但没有可重复的例子来报告它。以下是失败的运行:https://github.com/apache/beam/actions/runs/5241188101/jobs/9462953674?pr=27100#step:9:207
其中写道:
══╡ EXCEPTION CAUGHT BY FLUTTER TEST FRAMEWORK ╞═════════════════
The following TypeErrorImpl was thrown running a test:
Unexpected null value.
When the exception was thrown, this was the stack:
dart-sdk/lib/_internal/js_dev_runtime/private/ddc_runtime/errors.dart 288:49 throw_
dart-sdk/lib/_internal/js_dev_runtime/private/ddc_runtime/operations.dart 606:63 nullCheck
packages/playground_components/src/widgets/tabbed_snippet_editor.dart.js 7242:24 _runReal
dart-sdk/lib/_internal/js_dev_runtime/patch/async_patch.dart 45:50 <fn>
dart-sdk/lib/async/zone.dart 1407:47 _rootRunUnary
dart-sdk/lib/async/zone.dart 1308:19 runUnary
dart-sdk/lib/async/future_impl.dart 147:18 handleValue
dart-sdk/lib/async/future_impl.dart 784:44 handleValueCallback
dart-sdk/lib/async/future_impl.dart 813:13 _propagateToListeners
dart-sdk/lib/async/future_impl.dart 575:7 [_complete]
dart-sdk/lib/async/future.dart 424:15 <fn>
dart-sdk/lib/async/zone.dart 1391:47 _rootRun
dart-sdk/lib/async/zone.dart 1301:19 run
dart-sdk/lib/async/zone.dart 1209:7 runGuarded
dart-sdk/lib/async/zone.dart 1249:23 <fn>
dart-sdk/lib/async/zone.dart 1399:13 _rootRun
dart-sdk/lib/async/zone.dart 1301:19 run
dart-sdk/lib/async/zone.dart 1233:23 <fn>
dart-sdk/lib/_internal/js_dev_runtime/private/isolate_helper.dart 48:19 internalCallback
堆栈中唯一的文件是packages/playground_components/src/widgets/tabbed_snippet_editor.dart
。它也是唯一一个变成.js
的,所以我看不出到底是什么触发了这个错误。这是我从未见过的。根据我的经验,如果浏览器和调试器之间配置错误,Dart异常堆栈要么全部是.dart
,要么全部是.dart.js
。尽管行号有点偏,但未优化的.dart.js
堆栈一直在暗示这个问题,但这次我的85行.dart文件变成了7242行以上,这是另一个错误的迹象。更奇怪的是,我在那个文件中没有不安全的!
,所以这个异常可能来自一些更大的内联构造。
在这一点上,我的主要问题是:什么原因导致文件在异常堆栈上显示为.dart
或.dart.js
?有什么我可以做的,使它成为.dart
,并看到违规行吗?
子问题是如何从集成测试中看到.dart.js
源代码?Chrome没有显示。
我按照文档中为web规定的方式运行集成测试。
令人不快的文件,这很重要:https://github.com/apache/beam/blob/95668013cae00a18418f1bafa08015d7cee05c54/playground/frontend/playground_components/lib/src/widgets/tabbed_snippet_editor.dart
1条答案
按热度按时间eit6fx6z1#
在浏览器中部署Dart应用程序意味着在JavaScript引擎中运行它,因此Dart代码必须首先编译为JavaScript。这是通过dart 2 js工具完成的,该工具本身是用Dart编写的,位于dart-sdk的bin子文件夹中。该工具也很好地集成在 dart 编辑器中。
Official Doc
所以,如果你在web频道中编写一些原生js代码,那就是你拥有的
.js
文件,但是.dart
文件也会被编译为js。最后一个问题,我不知道如何看到编译后的代码,我也找过Kotlin编译代码,也没有找到。