You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 02:06:01