【发布时间】:2021-03-01 20:09:42
【问题描述】:
我正在开发一个显示订单列表的颤振应用程序,它将显示相应的订单详细信息onTap,因为我已经看到了很多关于如何将数据从列表屏幕传递到显示详细信息的屏幕的示例传递的那个对象,我们可以通过widget.obj.name读取数据。但是,就我而言,我想传递其中一个订单的 ID,在这里我可以使用 widget.orderId 从上一个屏幕获取订单 ID,但我无法通过调用获取订单详细信息来检索详细信息API。
为了进一步解释,我将在这里展示我的代码:
在orderlist.dart,
onTap: () {
Navigator.push(
context,
MaterialPageRoute(
builder: (context) => OrderDetail(
orderId: order.id,
onRefresh: onRefresh,
)),
);
},
在order_detail.dart 中,我试图构建 UI,但 model.orderItem.toString() 的结果为空。当我尝试直接运行 Services().getOrderDetails() API 时,它工作得非常好,但因为我有 OrderItem 模型,我将与提供者一起使用它。
@override
Widget build(BuildContext context) {
return ListenableProvider<OrderItemModel>(
create: (_) => OrderItemModel(),
child: Consumer<OrderItemModel>(
builder: (context, model, child) {
print("orderItem: " + model.orderItem.toString());
},
));
}
我收到以下错误:
未处理的异常:错误:在此 OrderDetail 小部件上方找不到正确的提供程序。这可能是因为您使用了不包括您选择的提供者的BuildContext。有几种常见的情况:
- 您尝试读取的提供程序位于不同的路径中。 提供者是“范围的”。因此,如果您在路由中插入提供程序,则其他路由将无法访问该提供程序。
- 您使用了
BuildContext,它是您尝试读取的提供程序的祖先。 确保 OrderDetail 在您的 MultiProvider/Provider 下。这通常发生在您创建提供程序并尝试立即读取它时。
我已经尝试过 Flutter 提供的解决方案,但它仍然给了我同样的错误。为了在orderdetails.dart 中调用 OrderItemModel 提供程序,orderlist.dart 部分是否需要做任何事情?我错过了什么吗?
【问题讨论】:
标签: api flutter flutter-provider