首页 > 解决方案 > type '(BuildContext, Widget) => ChangeNotifierProvider<>' 不是类型转换中类型 '(BuildContext, Widget?) => Widget' 的子类型

问题描述

type '(BuildContext, Widget) => ChangeNotifierProvider' 不是类型转换中类型 '(BuildContext, Widget?) => Widget' 的子类型

嗨,我在将旧项目转换为 Flutter 2.5 时遇到上述错误,谁能帮我解决这个问题?

abstract class Role {
  Widget homeBuilder(BuildContext context);
   Map<String, WidgetBuilder>? routes;

  /// The navigatorBuilder allows you to insert widgets between MaterialApp and its Navigator.
  /// This is useful for providing the logged in Talent or Recruiter
   TransitionBuilder? navigatorBuilder;
}




@override
  TransitionBuilder navigatorBuilder =
      (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),
      child: navigator,
    );
  };

标签: flutterdart

解决方案


过渡构建器:

typedef TransitionBuilder = Widget Function(BuildContext context, Widget? child);

需要一个上下文和一个孩子。孩子是类型的Widget?,注意问号。这向您展示了小部件可以为空。

如果你定义了一个 TransitionBuilder,你也需要展示它,所以你需要改变

@override
  TransitionBuilder navigatorBuilder =
      (BuildContext context, Widget navigator) {

@override
  TransitionBuilder navigatorBuilder =
      (BuildContext context, Widget? navigator) { //add the question mark

有关空安全性的更多信息: https ://dart.dev/null-safety/understanding-null-safety


推荐阅读