BuildContext
做了什么,我们从中得到了什么信息?
https://docs.flutter.dev/flutter/widgets/BuildContext-class.html只是不清楚。
https://flutter.dev/widgets-intro/#basic-widgets在术语 BuildContext
的第 9 个实例中,有一个示例,但尚不清楚它是如何使用的。它是让我迷失的更大代码集的一部分,因此我很难理解 BuildContext
是什么。
有人可以用简单/非常基本的术语解释一下吗?
最佳答案
BuildContext
就像它的名字所暗示的那样,是构建特定小部件的上下文。
如果你以前做过一些 React,那么这个上下文有点类似于 React 的上下文(但使用起来更流畅);有一些奖金。
一般来说,上下文有 2 个用例:
第二点比较少见。另一方面,几乎所有地方都使用第一点。
例如,当您要推送新路由时,您将执行 Navigator.of(context).pushNamed('myRoute')
。
注意这里的上下文。它将用于获取树中上面最接近的 NavigatorState
小部件实例。然后在该实例上调用方法 pushNamed
。
很酷,但是我什么时候想要使用它?
BuildContext 在您想要向下传递数据时非常有用 不必手动将其分配给每个小部件的配置,例如;你会想在任何地方访问它们。但是您不想将它传递给每个构造函数。
您可能会创建一个全局或单例;但是当 confs 更改时,您的小部件不会自动重建。
在这种情况下,您使用 InheritedWidget
。有了它,您可能会编写以下内容:
class Configuration extends InheritedWidget {
final String myConf;
const Configuration({this.myConf, Widget child}): super(child: child);
@override
bool updateShouldNotify(Configuration oldWidget) {
return myConf != oldWidget.myConf;
}
}
然后,这样使用它:
void main() {
runApp(
new Configuration(
myConf: "Hello world",
child: new MaterialApp(
// usual stuff here
),
),
);
}
多亏了这一点,现在在您的应用程序中无处不在,您可以使用 BuildContext
访问这些配置。通过做
final configuration = context.inheritFromWidgetOfExactType(Configuration);
更酷的是 所有 调用 inheritFromWidgetOfExactType(Configuration)
的小部件将在配置更改时自动重建。
很棒吧?
https://stackoverflow.com/questions/49100196/
相关文章:
flutter - 如何将 BottomNavigationBar 与 Navigator 一起使用
flutter - 如何更改文本字段 flutter 中的值?
android-studio - Dart 的 SDK 在/flutter 文件夹中的什么位置?
flutter - 如何在 Flutter 中创建圆形图标按钮?
dart - 如何在另一个 flutter 应用程序中使用本地 flutter 包?
dart - Flutter 切换到 Tab 重新加载小部件并运行 FutureBuilder