[英]No Scaffold widget found : Getting exception while opening Bottom Dialog sheet
我正在使用 Scaffold 小部件,但在打开底部对话框时出现此异常
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text("Calendar"),
),
body: SafeArea(
.......
.......
child: GestureDetector(
onTap: (){
//getting exception here
showBottomSheet(
context: context,
builder: (context) => Container(
color: Colors.red,
));
},
我被困在这段代码上,如果有人可以提出任何建议,这将非常有帮助。 谢谢你。
使用showModalBottomSheet
而不是showBottomSheet
试试下面的showBottomSheet
。
void _settingModalBottomSheet(BuildContext context){
showModalBottomSheet(
context: context,
builder: (BuildContext bc){
return Container(
child: new Wrap(
children: <Widget>[
new ListTile(
leading: new Icon(Icons.music_note),
title: new Text('Music'),
onTap: () => {}
),
new ListTile(
leading: new Icon(Icons.videocam),
title: new Text('Video'),
onTap: () => {},
),
],
),
);
});
}
问题是,在context
用来显示BottomSheet
不是context
中的Scaffold
。 您可以通过使用GlobalKey
或将您的GestureDetector
包装在Builder
小部件中来解决此问题,以便它为您提供包含Scaffold
引用的context
。
这是一个使用GlobalKey
和Scaffold
状态的示例:
// created the ScaffoldState key
final scaffoldState = GlobalKey<ScaffoldState>();
class MyWidget extends StatelessWidget {
void _showSheet() {
// Show BottomSheet here using the Scaffold state instead ot«f the Scaffold context
scaffoldState.currentState
.showBottomSheet((context) => Container(color: Colors.red));
}
@override
Widget build(BuildContext context) {
return Scaffold(
key: scaffoldState,
appBar: AppBar(
title: Text("Calendar"),
),
body: SafeArea(child: GestureDetector(onTap: () {
//getting exception here
_showSheet();
})));
}
}
使用 Builder 小部件包装小部件树
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text("Calendar"),
),
body: Builder( //HERE
builder:(context){
return SafeArea(
.......
.......
child: GestureDetector(
onTap: (){
//getting exception here
showBottomSheet(
context: context,
builder: (context) => Container(
color: Colors.red,
));
},
我不是 100% 知道为什么会这样,但我猜测是因为它在脚手架之外。
class Example extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
),
body: SafeArea(child: YourWidget(),
)
);
}
}
class YourWidget extends StatelessWidget {
const YourWidget({
Key key,
}) : super(key: key);
@override
Widget build(BuildContext context) {
return GestureDetector(
onTap: (){
//getting exception here
showBottomSheet(
context: context,
builder: (context) => Container(
color: Colors.red,
));
}
);
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.