insertDataListWithMultipleChild method

Future<bool> insertDataListWithMultipleChild({
  1. required dynamic model,
  2. required dynamic dataList,
  3. Function? onProgress,
})

Implementation

Future<bool> insertDataListWithMultipleChild({required dynamic model, required dynamic dataList, Function? onProgress}) async {
  final db = await DatabaseHelper().getDatabaseInstance;

  bool insertCompleted = false;

  if (dataList == null) {
    return false;
  }
  String query = getQueryStringFromJsonSingleList(model: model, dataList: dataList, onProgress: (dataInsertStatusNumber) {if (onProgress != null) {
    onProgress(dataInsertStatusNumber);
  }});
  try {
    await db.execute(query);
    insertCompleted = true;
  } catch (e) {
    return false;
  }

  List<dynamic> modelObjectList = [];
  Map<String, String> fieldNameList = model.getDataTypeMap();

  fieldNameList.forEach((field, type) {
    if (type == "List<dynamic>") {
      modelObjectList.add(DatabaseHelper.getModel(field));
    }
  });

  if (modelObjectList.length == 0) {
    if (insertCompleted) {
      return true;
    } else {
      return false;
    }
  }

  int childModelNumber = 0;

  for (var childModel in modelObjectList) {
    var subList = [];
    for (var temp in dataList) {
      if (temp[childModel.runtimeType.toString()].length > 0) {
        subList.add(temp[childModel.runtimeType.toString()]);
      }
    }

    if (subList.length > 0) {
      String query = getQueryStringFromJsonMultipleList(model: childModel, multipleDataList: subList);

      deleteTableData(childModel);
      try {
        await db.execute(query);
        if (childModelNumber == modelObjectList.length - 1) {
          return true;
        }
      } catch (e) {
        return false;
      }
    } else {
      if (childModelNumber == modelObjectList.length - 1) {
        return true;
      }
    }
    childModelNumber++;
  }
  return false;
}