flutter 中术语 .of() 的含义

Sal*_*rke 5 flutter

所以我想知道关闭时使用的命令AlertDialog

FlatButton(
  child: Text('Okay'),
  onPressed: () {
    Navigator.of(context).pop();
  },
),
Run Code Online (Sandbox Code Playgroud)

.of() 到底做了什么?我在 flutter 开发文档中找不到任何内容(可能是因为我缺少正确的搜索词)

谁能解释那里发生了什么?

Ric*_*ods 9

在 Flutter SDK 中,这些.of方法是一种服务定位器函数,它以框架 BuildContext 作为参数,并返回与指定类相关但由小部件树上的小部件创建的内部 API。然后,子窗口小部件可以使用这些 API 来访问父窗口小部件上设置的状态,并在某些情况下(例如导航器)来操作它们。该模式鼓励组件化,并将与构建树相关的信息的生产与其消耗解耦。

除了Navigator.of(返回 NavigatorState)之外还有:

  • Theme.of(返回包含环境主题设置的 ThemeData)
  • MediaQuery.of(返回一个 MediaQueryData,其中包含有关设备屏幕尺寸的计算信息)
  • Directionality.of(返回包含有关文本显示信息的 TextDirection)

当然,Flutter 有非特定的方法用于从构建上下文中查找父窗口小部件:

context.findAncestorWidgetOfExactType<T extends Widget>()
context.findAncestorStateOfType<T extends State>()
context.findRootAncestorStateOfType<T extends State>()
Run Code Online (Sandbox Code Playgroud)

soTheme.of(context)实际上只是一个静态简写context.findAncestorWidgetOfExactType<Theme>().data并且Navigator.of(context).pop()实际上只是一个简写context.findAncestorStateOfType<NavigatorState>().pop()


Don*_*sek 7

从课程的文档Navigator来看,

尽管您可以直接创建导航器,但最常见的是使用由 Router 创建的导航器,该导航器本身是由 WidgetsApp 或 MaterialApp 小部件创建和配置的。您可以使用 Navigator.of 引用该导航器。

Classname.of(someObject)作为一般规则,任何时候您在 OO 语言中看到类似于 的东西,都是一个返回from.of实例的构建器。ClassnamesomeObject