我认为语境的第一种用法是指你目前所处的语境,但第二种语境指的是什么呢?它也是当前的,还是当点击时会出现路由/屏幕的上下文,如果是的话,颤振如何知道您指的是哪个BuildContext,当它们都被命名为相同的时候?我真的不明白整个第二部分,所以如果有人能解释每个词的意思/那就太好了。
// Within the `FirstRoute` widget
onPressed: () {
Navigator.push(
context,
MaterialPageRoute(builder: (context) => SecondRoute()),
);
}发布于 2019-12-29 07:21:07
根据文档的说法
若要在堆栈上推送新路由,可以使用构建器函数
MaterialPageRoute创建一个实例,该实例可以创建屏幕上任何您想要显示的内容。
因此,第二个上下文是SecondRoute的上下文。
查看下面同一页中的指定示例
Navigator.push(context, MaterialPageRoute<void>(
builder: (BuildContext context) {
return Scaffold(
appBar: AppBar(title: Text('My Page')),
body: Center(
child: FlatButton(
child: Text('POP'),
onPressed: () {
Navigator.pop(context);
},
),
),
);
},
));在onPressesd函数中,您将注意到传入builder of MaterialPageRoute的上下文也是从堆栈中弹出的上下文。
如果没有被推到堆栈上的路径,还有哪些路径会从堆栈中弹出?SecondRoute的上下文是您的答案
关于将如何知道第二个小部件的上下文的问题,请检查班级,您将找到以下语句
调用以获取子部件。 每当此小部件包含在其父部件的构建中,并且与其同步的旧小部件(本例中为
FirstRoute)具有不同的对象标识(与SecondRoute不同)时,就调用此函数。通常,父构建方法将构造一棵新的小部件树,因此一个新的生成器子部件(SecondRoute)将与相应的旧小部件不同。
PS:括号中的注释是我添加的。
发布于 2019-12-30 09:52:53
简单地说,上下文就是当前在您面前的屏幕上的上下文。它可能是一个屏幕,任何小部件,或者像AlertDialog小部件这样的任何对话框。使用代码Navigator.push,您将上下文从一个屏幕推送/路由/导航到另一个屏幕。现在,新的屏幕变成了当前的上下文。如果使用Navigator.pop,上下文将返回到它被推送到的位置。假设现在打开了一个AlertDialog小部件。因此,这个小部件是当前上下文。如果使用Navigator.pop,上下文将成为前一个屏幕/小部件。它有一些更多的理论解释,告诉我们正在使用的堆栈。我希望我的回答能让你了解现实中发生的事情。
https://stackoverflow.com/questions/59514627
复制相似问题