首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Navigator.push中,每个“上下文”字指的是什么?

在Navigator.push中,每个“上下文”字指的是什么?
EN

Stack Overflow用户
提问于 2019-12-28 20:30:59
回答 2查看 621关注 0票数 1

我认为语境的第一种用法是指你目前所处的语境,但第二种语境指的是什么呢?它也是当前的,还是当点击时会出现路由/屏幕的上下文,如果是的话,颤振如何知道您指的是哪个BuildContext,当它们都被命名为相同的时候?我真的不明白整个第二部分,所以如果有人能解释每个词的意思/那就太好了。

代码语言:javascript
复制
// Within the `FirstRoute` widget
    onPressed: () {
      Navigator.push(
        context,
        MaterialPageRoute(builder: (context) => SecondRoute()),
      );
    }
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-12-29 07:21:07

根据文档的说法

若要在堆栈上推送新路由,可以使用构建器函数MaterialPageRoute创建一个实例,该实例可以创建屏幕上任何您想要显示的内容。

因此,第二个上下文是SecondRoute的上下文。

查看下面同一页中的指定示例

代码语言:javascript
复制
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:括号中的注释是我添加的。

票数 0
EN

Stack Overflow用户

发布于 2019-12-30 09:52:53

简单地说,上下文就是当前在您面前的屏幕上的上下文。它可能是一个屏幕,任何小部件,或者像AlertDialog小部件这样的任何对话框。使用代码Navigator.push,您将上下文从一个屏幕推送/路由/导航到另一个屏幕。现在,新的屏幕变成了当前的上下文。如果使用Navigator.pop,上下文将返回到它被推送到的位置。假设现在打开了一个AlertDialog小部件。因此,这个小部件是当前上下文。如果使用Navigator.pop,上下文将成为前一个屏幕/小部件。它有一些更多的理论解释,告诉我们正在使用的堆栈。我希望我的回答能让你了解现实中发生的事情。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59514627

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档