getAllListDataSingleModelForSync method

dynamic getAllListDataSingleModelForSync({
  1. required dynamic model,
  2. required String sql,
})

Implementation

getAllListDataSingleModelForSync({required dynamic model, required String sql}) async {
  final db = await DatabaseHelper().getDatabaseInstance;
  final List<Map<String, dynamic>> mapsFullInfo = [];

  final List<Map<String, dynamic>> mapsMasterData = await db.rawQuery(sql);

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

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

  int dataNumber = 0;
  for (var masterData in mapsMasterData) {
    int childModelNumber = 0;
    Map<String, dynamic> masterTempMap = Map();

    masterData.forEach((field, value) {
      bool willInsert = true;

      for (Object model in childObjectList) {
        if (model.runtimeType.toString() == field.toString()) {
          willInsert = false;
          break;
        }
      }
      if (willInsert) {
        if (value == "null") {
          value = null;
        }
        masterTempMap[field] = value;
      }
    });

    for (var childModel in childObjectList) {
      var childDataTemp = await getAllListDataSingleModel(sql: "Select * From ${childModel.runtimeType.toString()} where ${masterData.keys.first} = '${masterData.values.first}'");

      var childMapList = [];
      for (var map in childDataTemp) {
        Map<String, dynamic> childTempMap = Map();
        map.forEach((field, value) {
          if (value == "null") {
            value = null;
          }
          childTempMap[field] = value;
        });
        childMapList.add(childTempMap);
      }

      // masterTempMap[childModel.runtimeType.toString()] =  await getAllListDataSingleModel(sql: "Select * From ${childModel.runtimeType.toString()} where ${masterData.keys.first} = '${masterData.values.first}'");
      masterTempMap[childModel.runtimeType.toString()] = childMapList;

      childModelNumber++;
    }



    mapsFullInfo.add(masterTempMap);
    dataNumber++;
  }

  return mapsFullInfo;
}