【问题标题】:Method 'showBottomSheet' cannot be called on 'ScaffoldState?' because it is potentially null无法在“ScaffoldState”上调用方法“showBottomSheet”?因为它可能为空
【发布时间】:2021-12-30 16:32:49
【问题描述】:

您好,我在尝试运行代码时遇到此错误

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 flutter-layout dart-null-safety null-safety


    【解决方案1】:

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

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

    注意!currentState 之后,当你将! 放在一个可能为空的值之后时,你告诉颤振,“相信我,这个值不为空”,这意味着如果它是null,但它不会抱怨。

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

    不能在“ScaffoldState”上调用方法“showBottomSheet”?因为它可能为空。 尝试使用 ?. 调用。 脚手架Key.currentState.showBottomSheet(

    像这样:

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

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

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

    【讨论】:

      猜你喜欢
      • 2022-06-25
      • 2022-11-12
      • 2021-08-06
      • 1970-01-01
      • 1970-01-01
      • 2022-12-05
      • 2021-11-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多