无法在 'ScaffoldState?' 上调用方法 'showBottomSheet',因为它可能为空

Method 'showBottomSheet' cannot be called on 'ScaffoldState?' because it is potentially null

您好,我在尝试 运行 代码

时遇到了这个错误
lib/layout/home_layout.dart:54:36: Error: Method 'showBottomSheet' cannot be called on 'ScaffoldState?' because it is potentially null.
 - 'ScaffoldState' is from 'package:flutter/src/material/scaffold.dart' ('/C:/src/flutter/packages/flutter/lib/src/material/scaffold.dart').
Try calling using ?. instead.
          scaffoldKey.currentState.showBottomSheet(
                                   ^^^^^^^^^^^^^^^

我定义了一个变量:

 var scaffoldKey = GlobalKey<ScaffoldState>();

在这里,我尝试在单击浮动操作按钮时构建一个底页

floatingActionButton: FloatingActionButton(
    onPressed: () {
      scaffoldKey.currentState.showBottomSheet(
              (context) => Container(
                width: double.infinity,
                height: 120.0,
                color: Colors.red
              ),
      );
    },
    child: const Icon(
        Icons.add
    ),
  ),

请问,有人能告诉我哪里错了吗?

所以问题是,正如你可能已经发现的那样,flutter 不知道当前状态变量是否为 null,在某些情况下它是 null,因此,它不会让你调用它,这是显而易见的解决方案:

if (scaffoldKey.currentState != null) {
  scaffoldKey.currentState!.showBottomSheet(...);
}

请注意 currentState 之后的 !,当您将 ! 放在可能为 null 的值之后时,您是在告诉 flutter,“相信我,这个值不为 null”,这意味着如果它为 null,它会抛出一个错误,但它不会抱怨。

一个也许更好的解决方案是按照您的错误代码建议进行操作:

Method 'showBottomSheet' cannot be called on 'ScaffoldState?' because it is potentially null. Try calling using ?. instead. scaffoldKey.currentState.showBottomSheet(

像这样:

scaffoldKey.currentState?.showBottomSheet(...);

当使用 ?. 时,您是在有条件地调用可能为空值的方法或成员变量

所以上面这行说的是,“如果 currentState 不为空,调用它的 showBottomSheet 方法,否则什么都不做”。