Flutter 2.5迁移时TransitionBuilder类型不匹配报错如何解决
问题原因
- Flutter 2.5 对
TransitionBuilder类型做了空安全适配,函数签名从旧版本的(BuildContext, Widget) => Widget调整为(BuildContext, Widget?) => Widget,你当前定义的匿名函数第二个参数为不可空Widget类型,和官方标准的类型签名不匹配,触发类型校验报错。 - 代码中返回的
ChangeNotifierProvider本身是Widget的子类,这部分逻辑没有问题,报错核心为入参类型不匹配。
修复方案
直接调整匿名函数的第二个参数为可空类型,同时做好空兼容处理即可,修复后代码如下:
abstract class Role { Widget homeBuilder(BuildContext context); Map<String, WidgetBuilder>? routes; /// 可通过navigatorBuilder在MaterialApp和其Navigator之间插入组件,常用于为已登录的求职者或招聘方提供全局状态 TransitionBuilder? navigatorBuilder; } @override TransitionBuilder navigatorBuilder = // 仅修改第二个参数的类型为Widget? (BuildContext context, Widget? navigator) { String token = Provider.of<AuthBloc>(context).token; MyNotifications.setUpFirebaseMessaging(context); return ChangeNotifierProvider<Talent>( create: (ctx) => (Provider.of<AuthBloc>(context).role as TalentRole).talent ..setAuthToken(token), // 新增空兼容处理,常规场景下navigator不会为空,极端情况返回占位组件避免崩溃 child: navigator ?? const SizedBox.shrink(), ); };
如果你的项目暂未完全适配空安全,也可以临时用强制解包符!处理:child: navigator!,但更推荐上面的空兼容写法。
内容的提问来源于stack exchange,提问作者Al Mamun
相关产品推荐
相关产品推荐

