我在浏览同一个页面时遇到问题,数据不稳定



如何像在产品详细信息页面中点击相关产品一样导航同一页面,并根据相关产品导航到产品详细信息页?我想一遍又一遍地调用同一页。

如果你让你的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时才有效。

只需完成以下步骤:

  1. 在数据库中创建一个名为products 的集合

  2. 现在添加产品,在所有产品/文档中,您需要有一个名为id的字段。PS:任何id都只能使用一次。

  3. 在代码中创建一个名为id 的全局变量

  4. 如果你在其中一个产品上打标签,id变量需要设置为你在上打标签的产品的id

  5. 在产品详细信息页面中添加一个名为productData的变量

  6. 在"产品详细信息"类中创建一个方法,如下所示:

    getProductData() async {
    
    await FirebaseFirestore.instance.collection("products").where("id", isEqualTo: id).get().then((value) {
    productData = value.docs[0].data();
    });}
    
  7. initState()中添加以下方法:

    asyncTasks((async{等待getProductData((;}

  8. 在initState 中调用方法asyncTasks()

现在您可以从产品文档中获取数据,如下所示:

// Now you get the value that stands in the price field
productData["price"];

希望它能有所帮助!

最新更新