【问题标题】:The function can't be unconditionally invoked because it can be 'null'不能无条件调用该函数,因为它可以为“null”
【发布时间】:2021-07-12 22:06:10
【问题描述】:

我收到了这个错误

函数不能被无条件调用,因为它可以 '空'。

尝试添加一个空检查 ('!').dart(unchecked_use_of_nullable_value)

Map routeBuilders

routeBuilders[initialRoute](context),

即使添加了空检查,它也没有得到修复,请帮助

routeBuilders![initialRoute](context),

代码

@override
  Widget build(BuildContext context) {
    final routeBuilders = _routeBuilders();
    return Navigator(
      key: navigatorKey,
      initialRoute: tabNavigatorRoot,
      onGenerateInitialRoutes: (_, initialRoute) {
        return [
          MaterialPageRoute(
            settings: RouteSettings(name: tabNavigatorRoot),
            
            builder: (context) => routeBuilders[initialRoute](context),
          )
        ];
      },
    );
  }



Map<String, WidgetBuilder> _routeBuilders() {
    return {tabNavigatorRoot: (context) => _getScreen(context, item)};
  }

【问题讨论】:

    标签: flutter dart


    【解决方案1】:

    您似乎将空检查放在了错误的位置。映射访问器运算符的签名是V? operator[](K key),如果映射中不存在key,它可以返回null。

    在您的示例中,routeBuilders 始终是Map&lt;String, WidgetBuilder&gt;,因此无需在此处执行空检查。但是,您确实需要对routeBuilders[initialRoute] 的结果进行空检查,如下所示:

    routeBuilders[initialRoute]!(context);
    

    在调用它之前对返回的闭包执行空检查。

    【讨论】:

    • 谢谢你,拯救了我的一天:)
    • 请注意,来自! 的空检查是一个断言,如果在运行时该值变为null,则会引发异常。如果Map 查找有可能失败,请使用routeBuilders[initialRoute]?.call(context)
    • 乐于助人!并为 jamesin 的警告 +1。
    猜你喜欢
    • 2022-11-16
    • 2021-11-12
    • 2022-11-26
    • 2021-12-01
    • 2022-01-08
    • 2022-08-15
    • 2022-01-09
    • 2021-08-18
    • 1970-01-01
    相关资源
    最近更新 更多