getRetailerData method

Future<List> getRetailerData()

Implementation

Future<List<dynamic>> getRetailerData() async {
  clearUserDetails();
  List<dynamic> returnVal = <dynamic>[ConstantName.fail, ErrorMsg.wentWrong];

  await SharedPreferenceHelper.getBunchDataFromSp(data: {
    SharedPreferenceKey.username: String,
    SharedPreferenceKey.clientId: String
  }).then((Map<String, dynamic> spresponse) async {
    // Get user detail
    await HttpServices.apicall(param: {
      "username": spresponse[SharedPreferenceKey.username],
      "ClientID": spresponse[SharedPreferenceKey.clientId],
      "ClientRetailerID": retailerID.text
    }, uri: ApiConstant.getRetailerDataApi, label: 'Get retailer data Api')
        .then((List response1) async {
      if (response1[0] == 200) {
        try {
          retailerDetailsMap.value = jsonDecode(response1[1]);

          Map<String, String> retailerIdTableFields =
              retailerDetailsMap.isEmpty
                  ? <String, String>{}
                  : getFieldTypes(retailerDetailsMap);

          // Create & Insert retailer table
          if (retailerIdTableFields.isNotEmpty) {
            // --> add {clientRetailerId : value} if not exit start
            String clientMatchKey = ErrorHandling.getContainsKey(
              detail: retailerDetailsMap,
              inputKey: ConstantName.clientRetailerId,
            );
            if (clientMatchKey.trim().isEmpty) {
              retailerDetailsMap[ConstantName.clientRetailerId] =
                  retailerID.text;
            } else if (retailerDetailsMap[clientMatchKey] == null ||
                retailerDetailsMap[clientMatchKey]
                    .toString()
                    .trim()
                    .isEmpty) {
              retailerDetailsMap[clientMatchKey] = retailerID.text;
            }
            // --> add {clientRetailerId : value} if not exit end

            await DatabaseHelper.instance.createRetailerIdTable(
                retailerIdTableFields: retailerIdTableFields);
            // --> Store data to Database start
            await DatabaseHelper.instance.insertMultipleData(
                tableName: ConstantName.retailerIdTable,
                dataList: [retailerDetailsMap]);
            // --> Store data to Database end
          }

          // Get identifier data
          await HttpServices.apicall(param: {
            "ClientID": spresponse[SharedPreferenceKey.clientId]
          }, uri: ApiConstant.getIdentifierData, label: 'Get identifier data')
              .then((List response2) async {
            if (response2[0] == 200) {
              //Map<String, dynamic> decodedMap = jsonDecode(response2[1]);

              // Set data
              showIdentifierMap.value =
                  await decodeJson(jsonResponse: jsonDecode(response2[1]));

              //print('updateRetailerDetailsMap:: $updateRetailerDetailsMap');
              //print('showIdentifierMap:: $showIdentifierMap');

              // --> Copy showIdentifierMap to updateIdentifierMap without refrence start
              showIdentifierMap.forEach((key, value) {
                List<Map<String, dynamic>> newValue = [];
                for (var item in value) {
                  Map<String, dynamic> newItem =
                      Map<String, dynamic>.from(item);
                  // Changed showIdentifierMap {controller : value} to {controller : TextEditingController}
                  item[ConstantName.controller] = TextEditingController(
                      text: item[ConstantName.controller]);
                  if (item[ConstantName.controller] != null) {
                    newItem[ConstantName.controller] =
                        TextEditingController.fromValue(
                      item[ConstantName.controller].value,
                    );
                  }
                  newValue.add(newItem);
                }
                updateIdentifierMap[key] = newValue;
              });
              // --> Copy showIdentifierMap to updateIdentifierMap without refrence end

              /* --> print
              for (int i = 0; i < showIdentifierMap.length; i++) {
                String key = showIdentifierMap.keys.elementAt(i);
                print(
                    'decodedMap => $i: key: $key, ${showIdentifierMap[key]}');
              }
              */

              retailerID.clear();
              returnVal = <dynamic>[ConstantName.pass, ''];
            } else {
              returnVal = <dynamic>[ConstantName.fail, response2[1]];
            }
          });
        } catch (e) {
          print('getRetailerData error: $e');
        }
      } else {
        returnVal = <dynamic>[ConstantName.fail, response1[1]];
      }
    });
  });

  return returnVal;
}