不能在'ScaffoldState?'上调用方法 'showBottomSheet',因为它可能为 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之后的!,当你把!放在一个潜在的空值之后时,你告诉flutter,";相信我,这个值不是空的;这意味着如果它为null,它将抛出一个错误,但在其他情况下它不会抱怨。

A、 也许更好的解决方案是按照错误代码的建议:

不能在"ScaffoldState?"上调用方法"showBottomSheet"因为它可能为空。请尝试使用?进行呼叫。scaffoldKey.currentState.showBottomSheet(

像这样:

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

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

所以上面这行所说的是;如果currentState不为null,则调用它的showBottomSheet方法,否则不执行任何操作;。

我从阿卜杜拉·曼苏尔的《2022年长笛全集》中知道这个例子;乌代米的Dart发展课程[阿拉伯语]。h8moss的答案非常好,并抱怨flutter中的部分零安全概念,尤其是在您的情况下,但它并没有帮助您显示我认为的BottomSheet。因此,我发现实际上是GlobalKey返回了一个null状态。问题是为什么?

您需要将密钥传递到scaffold小部件中,然后设置上下文和状态。

class _HomeLayoutState extends State<HomeLayout> { GlobalKey<ScaffoldState> scaffoldKey = new GlobalKey(); //so we can call snackbar from anywhere

Widget build(BuildContext context) {
return Scaffold(
key: scaffoldKey, //set state and context

最后,注意在currentState之后,当您放置在一个潜在的空值之后,你告诉flutter,";相信我,这个值不是空的

scaffoldKey.currentState!.showBottomSheet(...);

相关内容

最新更新