有人能解释一下Flutter中的Navigator类和Scaffold类吗?

4

Flutter文档非常模糊。你们能解释一下谷歌含糊的说法吗:

Navigator类

许多应用程序在其小部件层次结构的顶部附近具有导航器,以使用覆盖显示其逻辑历史记录,并将最近访问的页面在旧页面的上方视觉上放置。

  1. "在其小部件层次结构的顶部附近"是什么意思?
  2. "逻辑历史记录"是什么意思?

Scaffold类

实现基本的Material Design视觉布局结构。

  1. Scaffold类为什么要实现material design?这不是MaterialApp类的工作吗?
1个回答

7

导航器

  1. "靠近顶部"指的是位于小部件层次结构的根附近。例如,如果您使用MaterialApp,它包含一个导航器,允许在不同页面之间切换。 靠近顶部意味着添加不同的路由将覆盖整个屏幕,而不仅仅是像弹出窗口那样的一小部分。在这样的页面中可能会有额外的导航器,用于叠加视图的较小部分。

  2. 带有选项卡功能的条,可控制导航器显示的页面。

  3. 您可以使用返回按钮导航到上一页。

脚手架

  1. MaterialApp更多关注主题,
    Scaffold更关注屏幕的结构。如何定位AppBar、抽屉、内容等。

它们是不同的小部件,这使得更容易用自定义实现替换其中一个或另一个,而不需要在您的自定义实现中也实现另一个。Flutter 的全部内容都是关于组合。


非常感谢您抽出时间回答我的问题!现在我明白了 Scaffold 的定义。谢谢!对于导航器,我卡在了“widget hierarchy”这个短语上。这是否意味着 widget 在 children 参数中按代码中列出的顺序排列? - Walter M
是的,你可能有类似于 Page > Tab > TabBar(带有选项卡标题作为子元素)+ TabContent > List > List items > ... 的东西。你可以将视图内容想象成小部件树,就像 HTML 是元素树一样。根小部件填充整个屏幕,子级仅填充其父级的部分。 - Günter Zöchbauer
好的,太棒了。让我总结一下我的理解:导航器被列为树中第一个(在任何其他小部件之前),以便当它覆盖新页面时,它位于应用程序中所有小部件的顶部 - 这称为“小部件层次结构”。术语“逻辑历史记录”基本上是指按时间顺序堆叠新页面的过程 - 顶部页面是最近覆盖的。你能确认我正确理解了吗? :) - Walter M
是的,没错,只是“Navigator被列为第一”不是严格的第一,而是“靠近顶部”,但通常它是最上面的可视化小部件。在导航器之上可能会有非可视化的元素,例如MediaQueryDirectionalityTheme等。 - Günter Zöchbauer
1
非常感谢你,Gunter!我真的很感激你的帮助!你非常有帮助! :) - Walter M

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接