上下文的颤振脚手架给出“不包含脚手架”

时间:2020-02-12 17:55:13

标签: flutter

我在脚手架上有一个应用栏。

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.

2 个答案:

答案 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(),
        ),
      ),
    );
  },
)