save method

Future<Map<String, Object?>> save({
  1. VoidCallback? onSuccess,
  2. bool useLoadingDialog = false,
  3. dynamic afterSave(
    1. bool success,
    2. Map<String, List<Map<String, Object?>?>?> response
    )?,
  4. bool checkDirtyData = true,
  5. bool uploadImage = true,
  6. Map<String, Object?>? params,
})

Implementation

Future<Map<String, Object?>> save({
  VoidCallback? onSuccess,
  bool useLoadingDialog = false,
  Function(
    bool success,
    Map<String, List<Map<String, Object?>?>?> response,
  )?
      afterSave,
  bool checkDirtyData = true,
  bool uploadImage = true,
  Map<String, Object?>? params,
}) async {
  Map<String, Object?> dataReturn = {};
  this.onSuccess = onSuccess;
  if (_isDirtyData || !checkDirtyData) {
    final Map<String, Object?> jParam = dataEntity.map((key, value) {
      if (value is num || value is bool || value is String || value == null) {
        value = value;
      } else {
        value = value.toString();
      }
      return MapEntry(key, value);
    });
    jParam.removeWhere(
      (key, value) => _checkIsImagesKey(key.replaceFirst(RegExp(r'@'), '')),
    );

    params ??= {};
    jParam.forEach((key, value) {
      params!.putIfAbsent(key, () => value);
    });

    try {
      if (useLoadingDialog) _isWaiting.value = true;
      if (kDebugMode) {
        print('EditorWidget: Submitting...');
      }

      final response =
          await SQLService.execute(onSaveProcedure, params: params);
      if (kDebugMode) {
        print('result: $response');
      }
      dataReturn = response;
      if (response['Exception']?.isNotEmpty ?? false) {
        _succeed.value = false;
        afterSave?.call(false, response);
        if (kDebugMode) {
          print(
              'Editor Save Error On Server: ${response['Exception']?.first?['Message']}');
        }
      } else {
        if (uploadImage) {
          await saveImages(response);
        }
        _succeed.value = true;
        afterSave?.call(true, response);
        onSuccess?.call();
      }
    } catch (e, stackTrace) {
      if (kDebugMode) {
        print('Editor Save Error: $e');
        print(stackTrace);
      }
    }
    EditorController.mapDataReturn = dataReturn;
    return dataReturn;
  } else {
    if (kDebugMode) {
      print('data have already save');
    }
    EditorController.mapDataReturn = dataReturn;
    return dataReturn;
  }
}