insertModelData method

Future insertModelData({
  1. required dynamic model,
  2. required dynamic modelData,
})

Implementation

Future<dynamic> insertModelData({ required dynamic model, required dynamic modelData}) async {
  String tableName = modelData.runtimeType.toString();
  final db = await DatabaseHelper().getDatabaseInstance;

  bool isAlreadyInserted = false;
  var firstFieldName = modelData.getDataTypeMap().keys.first;

  final Map<String, dynamic> dataMap = getMapFromModelData(model: model, data: modelData);

  var fieldValue = dataMap.values.first;

  String sql = "Select $firstFieldName from ${tableName} where $firstFieldName = '$fieldValue'";

  var datas = await db.rawQuery(sql);

  if (datas.length > 0) {
    isAlreadyInserted = true;
  }
  var insertOrUpdateId;
  if (isAlreadyInserted) {
    insertOrUpdateId = await db.update(tableName, where: " $firstFieldName = '$fieldValue' ", dataMap);
  } else {
    insertOrUpdateId = await db.insert(tableName, dataMap);
  }
  if (insertOrUpdateId != null) {
    return modelData;
  }
  return null;
}