Home > Mobile >  How to handle lists initial building in Getx
How to handle lists initial building in Getx

Time:09-15

I'm making a reactive model with Getx on a product list, but when I start the list it comes with no value and causes an index error even though there are actually values ​​in the list it appears empty at first, which somehow gets fixed automatically. (this is inside a build of a statelesswidget)

return GetX<CartController>(
      init: CartController(),
      builder: (controller) {
        try {
          return Text(
            "${StringConvert.toMoney(controller.totalByProduct[productId])}",
            style: kSmallTextBold,
          );
        } catch (e) {
          return const Text("Error...");
        }
      },
    );
  }

I did try catch to manage this, but the catch part doesn't show up;

this is relevant part of the controller

  var totalByProduct = [].obs;

  fetchTotal() {
    List products = storage.read(StorageKeys.cartProducts);
    double currentValue = 0.0;
    List currentTotals = [];
    
    for (var item in products) {
      currentTotals.add(item['total'] * item['amount']);
      currentValue  = item['total'] * item['amount'];
    }

    total.value = currentValue;
    totalByProduct.value = currentTotals;
  }

I believe it's not the right way to do this, so what do I need to know to fix this correctly?
If helps this is the error:

error image

CodePudding user response:

With a method to read the storage (sharedPreferences) in async mode, with a FutureBuilder it was possible to correct the error, because in the initial state the list takes the value assigned explicitly. Even if it then receives the correct value, accessing the index in its initial state causes the error, this explains why even with the error it works.

  • Related