如何从BuildContext检查类父级?

问题描述

我正在实现一个商务应用程序,现在重点放在三个组件上:CartPageCatalogPageProductListItemProductListItem组件可在购物车和目录这两个页面上重复使用。因此,在ProductListItem小部件中,我必须知道您的父级是什么类才能返回特定的组件。到目前为止,我的意思是使用BuildContext对象从父对象那里获取一些信息。如果不是这样,我的意思是使用静态字符串检查父对象,并在创建ProductListItem组件时将其传递给构造函数

class ProductListItem extends StatefulWidget {

  final Product product;

  ProductListItem(this.product);

  @override
  _ProductListItemState createState() => _ProductListItemState(product);
}

class _ProductListItemState extends State<ProductListItem> {
  final Product product;
  int amount = 1;

  _ProductListItemState(this.product);

  @override
  Widget build(BuildContext context) {
  // if (parent is Cart) return 1;
  // else if (parent is Catalog) return 2;
  }
}

我也接受其他更改的建议。

解决方法

BuildContext对象被传递到WidgetBuilder函数(例如StatelessWidget.build),并且可以从State.context成员获得。某些静态函数(例如showDialog,Theme.of等)也采用了构建上下文,以便它们可以代表调用小部件进行操作,或专门获取给定上下文的数据。

每个小部件都有自己的BuildContext,它成为StatelessWidget.build或State.build函数返回的小部件的父级。 (同样,RenderObjectWidgets的任何子项的父项。)

,

也许您想获取Navigator的历史记录以检查父级。 当前,导航器不支持获取导航器的历史记录。但是Flutter团队将在Navigator 2.0上更新此功能,它们完成并合并到母版中。等待下一个版本。

How to get _history from NavigatorState

Navigator 2.0

根据您的情况,临时将标志传递给“家长”的“详细信息页面”。