我在脚手架上有一个应用栏。
return Scaffold(
appBar: styling.appBar(
AppBar(
leading: styling.iconButton(() => Scaffold.of(context).openDrawer(), Icons.menu),
)
),
);
这是iconButton:
ClipRRect iconButton(VoidCallback onPressed, IconData icon) {
return ClipRRect(
borderRadius: BorderRadius.circular(360),
child : Material(
color: Colors.transparent,
child: IconButton(
icon: Icon(
icon,
color: secondaryColor,
),
onPressed: onPressed,
)
),
);
}
这是替换打开抽屉的默认汉堡图标,当我单击它时出现此错误:
Scaffold.of() called with a context that does not contain a Scaffold.
答案 0 :(得分:5)
这几乎可以肯定是因为您的context
实际上位于脚手架之外。您的函数可能类似于以下内容:
Widget build(BuildContext context) {
// ... other code up here
return Scaffold(
appBar: styling.appBar(AppBar(
leading: styling.iconButton(() => Scaffold.of(context).openDrawer(), Icons.menu),
)),
);
}
这里的问题是context
实际上是DID来自不在脚手架内部的地方。您在此处使用的context
来自包装build()
函数的函数参数,该参数确实存在于脚手架外部(因为此build()
实际上是生成{{1 }}。
您需要做的是这样的:
Scaffold
或类似的东西。原因是因为现在在Widget build(BuildContext context) {
// ... other code up here
return Scaffold(
appBar: styling.appBar(
AppBar(
leading: Builder(
builder: (BuildContext context) {
return styling.iconButton(() => Scaffold.of(context).openDrawer(), Icons.menu);
},
),
),
),
);
}
函数内部,您实际上有一个新的builder
对象,该对象实际上将存在于脚手架中。
希望这很清楚。如果没有,我可以进一步解释。
答案 1 :(得分:-1)
编辑1:简单的解决方案
Builder(
builder: (context) {
return Scaffold(
drawer: Drawer(),
appBar: AppBar(
leading: IconButton(
icon: Icon(Icons.menu),
onPressed: () => Scaffold.of(context).openDrawer(),
),
),
);
},
)