无法使用更新的值-Flutter

时间:2019-05-13 10:46:45

标签: dart flutter

如果不是,我将在其他情况下更新totalPayable的值,但是当我调用getOrder()时无法在代码中的任何地方使用更新的值。是API问题还是有人可以帮助我处理代码?

else if (isOrderInitiated == false){
    getCleintOrderFromApi();
    debugPrint("ifelse" + totalPayable.toString());
}

getClientOrderFromApi() {
    orders.clear();
    totalPayable = 0.0;
    api.getCleintOrder().then((list) {
        list.forEach((order) {
            if(order.is_placed) {
                order.status = ORDER_STATUS[0];
            } else if(!order.is_placed) {
                 order.status = ORDER_STATUS[2];
             }
            debugPrint("ORDER_STATUS from remote" + order.status);
            for (var j = 0; j < order.items.length; j++) {
                FoodItemOrder item = order.items[j];
                totalPayable = totalPayable + item.unitPrice * item.quantity;
                debugPrint(" total payable in order "+ totalPayable.toString());
            }
            orders.add(order);
            debugPrint("itemsin order"+orders.last.items.length.toString());
            });
        currentOrderList.clear();
        currentOrderList.addAll(orders);
        orderItemsSink.add(orders);
        });
    } 
} 

debugPrint中的getClientOrderFromApi()显示更新后的结果,但是如果debugPrint(" ifelse "+ totalPayable.toString());未显示更新后的值,这就是为什么无论我在哪里使用totalPayable没有显示期望的值。

1 个答案:

答案 0 :(得分:0)

    Future<List<Order>> getCleintOrder() async {
        MakeOrder clientOrderRequest = MakeOrder(); //currentCafe;
        clientOrderRequest.caffeID = currentCafe.caffeId;
        clientOrderRequest.tableidtimestamp = currentUser.tableIdTimestamp;
        // offset = 160;
    String url = BASE_URL + BASE_URL_GET_CLIENT_ORDER;
    debugPrint("requesting getCleintOrder --- \n" +
        url +
        "\n " +
        clientOrderRequest.toClietnOrderJson().toString());
    var response = await http
        .post(
      url,
      headers: {
        HttpHeaders.contentTypeHeader: 'application/json',
        // HttpHeaders.authorizationHeader : ''
      },
      body: json.encode(clientOrderRequest.toClietnOrderJson()),
    )
        .catchError(
      (error) {
        ////debugPrint(error.toString());
        return false;
      },
    );

    var jsonObj = json.decode(response.body);
    ////debugPrint(jsonObj.toString());
    List<Order> orders = [];

    try {
      jsonObj.forEach((newJson) {

        List<Order> orderList = (newJson["orders"] as List)
            .map((neworderJson) => Order.fromJSON(neworderJson))
            .toList().cast<Order>();
        orders.addAll(orderList);

      });
    } catch (e) {
      ////debugPrint(e.toString());
    }

    // debugPrint("total client orders  " + orders.length.toString());

    return orders;
  }

这是我的API推荐链接。