繁体   English   中英

Scaffold.of会找到遥远的窗口小部件吗?

[英]Will Scaffold.of ever find distant widget anestors?

我正在尝试了解有关BuildContextScaffold.of()更多信息。

我了解到,当您显示SnackBar ,通常需要添加一个Builder才能使上下文位于添加的Scaffold下方。

因此:

class MyScreen extends StatelessWidget {
   build(BuildContext context) {
    return Scaffold(

        body: Builder(
          builder: (context) =>
           RaisedButton(
                child: Text('push me'),
                onPressed: () => Scaffold.of(context).showSnackBar(
                    SnackBar(content: Text('this will work'))),
              ),
        ));
  }
}

我的问题是:如果Scaffold.of()获得最接近的祖先,通常它是否最终不应该在小部件树上找到更高的东西,例如SplashScreen支架? 当我们拿走构建器并创建此不正确的代码时:

class MyScreen extends StatelessWidget {
   build(BuildContext context) {
    return Scaffold(

        body: RaisedButton(
                child: Text('push me'),
                onPressed: () => Scaffold.of(context).showSnackBar(
                    SnackBar(content: Text('broken'))),
              ),
        ));
  }
}

那么我们得到的标准错误Scaffold.of() called with a context that does not contain a Scaffold. I/flutter ( 7750) Scaffold.of() called with a context that does not contain a Scaffold. I/flutter ( 7750) No Scaffold ancestor could be found starting from the context that was passed to Scaffold.of().

即使BuildContext没有直接的父代Scaffold,也怎么根本找不到Scaffold的祖先(例如,祖父母祖先)? 我的应用程序中的所有先前页面都有一个脚手架,它们不再位于小部件树中吗?

我知道,如果它找到一个Scaffold并渲染了SnackBar,我们将无法看到它,但是我仍然不明白它是如何找不到的。 也许我误解了“祖先”的含义。

谢谢

BuildContext表示小部件树中一个特定小部件的位置。

这样,根据您使用的BuildContext ,调用Scaffold.of(context)行为可能会有所不同。

在您的以下示例中:

class MyScreen extends StatelessWidget {
   build(BuildContext context) {
     return Scaffold(
       body: RaisedButton(
         child: Text('push me'),
         onPressed: () => Scaffold.of(context).showSnackBar(
           SnackBar(content: Text('this will work'))),
       ),
     ),
   );
  }
}

在这里,您正在使用MyScreenBuildContext 问题是MyScreen创建 Scaffold的小部件。 因此, MyScreenScaffold的祖先,无法通过Scaffold.of(context)访问它。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM