找不到脚手架小部件:打开底部对话框表时出现异常
Posted
技术标签:
【中文标题】找不到脚手架小部件:打开底部对话框表时出现异常【英文标题】:No Scaffold widget found : Getting exception while opening Bottom Dialog sheet 【发布时间】:2020-05-21 03:14:28 【问题描述】:我正在使用 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,
));
,
我被困在这段代码上,如果有人可以提出任何建议,那将非常有帮助。谢谢。
【问题讨论】:
添加你的整个代码 【参考方案1】:使用showModalBottomSheet
代替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: () => ,
),
],
),
);
);
【讨论】:
为什么有效??...有什么区别。【参考方案2】:问题是用于显示BottomSheet
的context
不是Scaffold
的context
。您可以通过使用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();
)));
【讨论】:
我在使用您的代码时遇到了不同的错误 在 null 上调用了方法“addLocalHistoryEntry”。接收方:null 尝试调用:addLocalHistoryEntry(Instance of 'LocalHistoryEntry') 您使用哪个类来调用 addLocalHistoryEntry?【参考方案3】:用 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,
));
,
【讨论】:
【参考方案4】:我不是 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,
));
);
【讨论】:
以上是关于找不到脚手架小部件:打开底部对话框表时出现异常的主要内容,如果未能解决你的问题,请参考以下文章
当我从 qr_code_scanner 包打开 QRView 小部件时出现平台异常
Android:小部件 - 在远程视图上使用 setOnclickPendingIntent 时出现空指针异常?