如何像在产品详细信息页面中点击相关产品一样导航同一页面,并根据相关产品导航到产品详细信息页?我想一遍又一遍地调用同一页。
如果你让你的ProductDetails
页面接受Product
(或id,取决于你的数据(,你应该能够调用它。当然,这取决于你想要如何构建路由(以及你想要如何返回(。假设您的ProductDetails
接收了一个要显示的产品:
ProductDetails(product: myProduct)
然后它可以获得相关产品,你可以让相关产品推送另一个ProductDetails
页面:
// In your product details page
Widget relatedProductsWidget() {
return Row(
children: relatedProducts.map((product) => ProductCard(
product: product,
onTap: () => Navigator.of(context).push(
// Simply push another product on the stack
MaterialPageRoute(builder: (context) => ProductDetails(product: product))
),
)),
);
}
当然,这取决于你希望如何回去。这样,就会按下一整堆ProductDetails
页面(按下后退按钮时会再次弹出(。或者,如果您只想在任何时候显示一个产品详细信息页面,则可以使用Navigator.of(context).pushReplacement
,将动画设置到新位置,然后处理旧路线。现在,当用户返回时,他会被带回到主产品列表,而不会首先看到旧产品。
https://api.flutter.dev/flutter/widgets/Navigator/push.html
https://api.flutter.dev/flutter/widgets/Navigator/pushReplacement.html
我希望这能让你开始整理导航。如果你有一个特定的问题,我建议你发布一个最低版本的代码,以明确你想要实现的目标,因为现在你的问题还有点模糊。
我的答案只有在使用firebase时才有效。
只需完成以下步骤:
-
在数据库中创建一个名为products 的集合
-
现在添加产品,在所有产品/文档中,您需要有一个名为id的字段。PS:任何id都只能使用一次。
-
在代码中创建一个名为id 的全局变量
-
如果你在其中一个产品上打标签,id变量需要设置为你在上打标签的产品的id
-
在产品详细信息页面中添加一个名为
productData
的变量 -
在"产品详细信息"类中创建一个方法,如下所示:
getProductData() async { await FirebaseFirestore.instance.collection("products").where("id", isEqualTo: id).get().then((value) { productData = value.docs[0].data(); });}
-
在
initState()
中添加以下方法:asyncTasks((async{等待getProductData((;}
-
在initState 中调用方法
asyncTasks()
现在您可以从产品文档中获取数据,如下所示:
// Now you get the value that stands in the price field
productData["price"];
希望它能有所帮助!