Flutter使用AutoRoute路由包报WidgetsBinding空安全错误怎么办
报错原因
该问题由Flutter与AutoRoute的版本不兼容触发:
Flutter 3.10及以上版本调整了WidgetsBinding的空安全规则,WidgetsBinding.instance的返回值从非空类型变为可空类型,未做判空就直接用.访问属性会直接报编译错误;而你当前项目引入的AutoRoute版本未适配该版本变更,源码中直接访问WidgetsBinding.instance.window的写法不符合高版本Flutter的空安全校验要求,导致编译失败、应用无法启动。
解决方法
按优先级从高到低可选择以下方案:
- 升级AutoRoute相关依赖到适配高版本Flutter的稳定版本
在项目根目录执行以下命令升级依赖:
依赖升级完成后,重新执行路由代码生成命令,再启动项目即可:flutter pub upgrade auto_route auto_route_generator build_runnerflutter pub run build_runner build --delete-conflicting-outputs - 临时应急修复(不建议长期使用)
如果受项目其他依赖限制无法升级AutoRoute,可以手动修改报错对应的源码文件:找到auto_route_information_provider.dart中两处报错的WidgetsBinding.instance.window代码,修改为带空安全判空的写法:
注意:该手动修改会在下次执行依赖拉取/升级操作时被覆盖,仅作临时调试使用。// 原报错代码 location: WidgetsBinding.instance.window.defaultRouteName // 修改后 location: WidgetsBinding.instance?.window.defaultRouteName ?? '/' - 降级Flutter版本
可将本地Flutter版本降级到与当前安装AutoRoute版本匹配的3.7及以下版本,该方案会导致无法使用Flutter高版本新特性,优先级最低。
内容的提问来源于stack exchange,提问作者Behnam
相关产品推荐
相关产品推荐

