showModalBottomSheet 获取不到 Scaffold
时间: 2023-12-29 10:03:22 浏览: 133
在调用 `showModalBottomSheet` 方法时,需要传入一个 `BuildContext` 参数。如果你在 `Scaffold` 中调用 `showModalBottomSheet`,那么你可以直接使用 `Scaffold.of(context)` 来获取到当前的 `Scaffold`,进而调用它的方法或属性。但是,如果你在 `Scaffold` 之外调用 `showModalBottomSheet`,那么 `Scaffold.of(context)` 将会返回 null,因为它没有找到最近的 `Scaffold`。
解决这个问题的方法有以下两种:
1. 在 `showModalBottomSheet` 方法中传入一个 `builder` 参数,通过 `builder` 方法返回一个新的 `Scaffold`,然后在 `builder` 方法中使用 `BuildContext` 参数来获取当前的 `Scaffold`。示例代码如下:
```
showModalBottomSheet(
context: context,
builder: (BuildContext context) {
final scaffold = Scaffold.of(context);
// 在这里使用 scaffold
return Container();
},
);
```
2. 在 `Scaffold` 中定义一个 `GlobalKey`,然后在 `showModalBottomSheet` 中传入该 `GlobalKey`,通过 `currentState` 属性来获取当前的 `Scaffold`。示例代码如下:
```
final _scaffoldKey = GlobalKey<ScaffoldState>();
@override
Widget build(BuildContext context) {
return Scaffold(
key: _scaffoldKey,
body: Center(
child: RaisedButton(
onPressed: () {
showModalBottomSheet(
context: context,
builder: (BuildContext context) {
final scaffold = _scaffoldKey.currentState;
// 在这里使用 scaffold
return Container();
},
);
},
child: Text('Show bottom sheet'),
),
),
);
}
```
阅读全文