Flutter 脚手架能找到远方的麻醉师吗?

Flutter 脚手架能找到远方的麻醉师吗?,flutter,Flutter,我正在努力学习更多关于BuildContext和Scaffold.of()的知识 我理解,当您显示一个SnackBar时,您通常需要添加一个Builder,以获取您所添加的脚手架下的上下文 因此: class MyScreen extends StatelessWidget { build(BuildContext context) { return Scaffold( body: Builder( builder: (context) =&g

我正在努力学习更多关于
BuildContext
Scaffold.of()
的知识

我理解,当您显示一个
SnackBar
时,您通常需要添加一个
Builder
,以获取您所添加的脚手架下的上下文

因此:

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 Scaffold? 当我们删除生成器并创建此错误代码时:

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()使用不包含脚手架的上下文调用。
I/颤振(7750)
从传递给Scaffold.of()的上下文开始,找不到任何Scaffold祖先。

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

我知道,如果它发现了脚手架并渲染了蛇形条,我们将无法看到它,但我仍然不明白它为什么找不到。也许我误解了“祖先”的意思


谢谢

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

因此,根据您使用的
BuildContext
,调用(context)的Scaffold.of(Scaffold)可能会有不同的行为

在以下示例中:

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'))),
       ),
     ),
   );
  }
}

在这里,您使用的是
MyScreen
BuildContext
。问题是
MyScreen
是创建
Scaffold
的小部件。因此,
MyScreen
Scaffold
的祖先,无法通过
Scaffold.of(context)
访问它,谢谢您的回复。我仍然不明白为什么
Scaffold.of(context)
没有从我的应用程序返回其他的Scaffold。如果它返回最近的祖先,并且MyScreen中没有脚手架,那么它不应该在widget树上进一步搜索,直到找到一个吗?不,因为它不是祖先。小部件无法访问其子体。他们根本不可能这么做1.开始屏幕-->2.注释屏幕-->3.我的屏幕。我在描述这样一种情况,所以
Start Screen
Screen是
My Screen
的祖先,不是后代,或者我遗漏了什么?我想我有一个同事的解决方案:鉴于
Theme.of(context)
Navigator.of(context)
将一直搜索小部件树,直到找到主题或导航器,
Scaffold.of(context)
只搜索可见的框架。因此,它找不到(不可见的)祖先支架,例如StartScreen。是的,但要查看其他屏幕,它必须先上后下。