setJson method
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,
);
}