问题描述
我正在实现一个商务应用程序,现在重点放在三个组件上:CartPage
,CatalogPage
和ProductListItem
。 ProductListItem
组件可在购物车和目录这两个页面上重复使用。因此,在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
根据您的情况,临时将标志传递给“家长”的“详细信息页面”。