Flutter SDK更新后Web应用白屏,报didCreateEngineInitializerResolve错误
_didCreateEngineInitializerResolve错误 这个问题是Flutter Web初始化流程变更导致的——新版本Flutter要求通过flutter.js的loadEntrypoint方法启动应用,而非直接加载main.dart.js触发初始化,否则会出现引擎初始化回调未正确绑定的错误。
解决方案步骤:
修改index.html的初始化逻辑
移除原有的<script src="main.dart.js" type="application/javascript"></script>,替换为通过flutter.js启动应用的脚本:
在<body>标签末尾添加以下代码:<script> window.addEventListener('load', function() { _flutter.loadEntrypoint({ serviceWorker: { serviceWorkerVersion: serviceWorkerVersion, } }); }); </script>确保
flutter.js的引入保留(原代码中<script src="flutter.js" defer></script>无需修改)。检查Web入口文件(web_entrypoint.dart)
确保web/web_entrypoint.dart是标准初始化逻辑,无自定义破坏:import 'package:flutter_web_plugins/flutter_web_plugins.dart'; import 'package:space_shuttle_web_application/main.dart' as app; void main() { setUrlStrategy(PathUrlStrategy()); app.main(); }彻底清理并重新构建
执行以下命令清除旧构建产物并重新编译:flutter clean flutter pub get flutter build web --release
问题原因说明:
更新后的Flutter Web将引擎初始化逻辑封装到了flutter.js中,loadEntrypoint方法会负责创建引擎初始化的Promise回调(即_didCreateEngineInitializerResolve),如果直接加载main.dart.js触发初始化,这个回调未被绑定,就会抛出TypeError: this._didCreateEngineInitializerResolve is not a function错误,同时触发警告Do not call didCreateEngineInitializer by hand. Start with loadEntrypoint instead.。
内容的提问来源于stack exchange,提问作者Danish Ajaib

