无法在 '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
方法,否则什么都不做”。
您好,我在尝试 运行 代码
时遇到了这个错误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
方法,否则什么都不做”。