getAllListDataSingleModelForSync method
dynamic
getAllListDataSingleModelForSync(
{ - required dynamic model,
- 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;
}