setJson method

Future setJson(
  1. dynamic data, {
  2. bool log = true,
  3. SetMode setMode = SetMode.append,
  4. FileMode mode = FileMode.write,
  5. Encoding encoding = utf8,
  6. bool flush = false,
})

Implementation

Future setJson(
  dynamic data, {
  bool log = true,
  SetMode setMode = SetMode.append,
  FileMode mode = FileMode.write,
  Encoding encoding = utf8,
  bool flush = false,
}) async {
  dynamic currentData = await getJson();
  if (setMode != SetMode.replace &&
      currentData != null &&
      currentData.runtimeType.toString().contains("Map") &&
      data.runtimeType.toString().contains("Map")) {
    for (var key in data.keys) {
      if (setMode == SetMode.append) {
        currentData[key] = data[key];
      } else if (setMode == SetMode.remove && currentData.containsKey(key)) {
        currentData.remove(key);
      }
    }
  } else if (setMode != SetMode.replace &&
      currentData != null &&
      currentData.runtimeType.toString().contains("List") &&
      data.runtimeType.toString().contains("List")) {
    for (var item in data) {
      if (!currentData.contains(item) && setMode == SetMode.append) {
        currentData.add(item);
      } else if (currentData.contains(item) && setMode == SetMode.remove) {
        currentData.remove(item);
      }
    }
  } else if (setMode != SetMode.replace &&
      currentData != null &&
      currentData.runtimeType != data.runtimeType) {
    throw const StorageDatabaseException("Can't append different data");
  } else {
    currentData = data;
  }
  await set(
    jsonEncode(currentData),
    log: log,
    mode: mode,
    encoding: encoding,
    flush: flush,
  );
}