deserializeAndSave method

Future<DeserializedData<T>> deserializeAndSave(
  1. Object? data, {
  2. String? key,
  3. bool notify = true,
  4. bool ignoreReturn = false,
})
inherited

Implementation

Future<DeserializedData<T>> deserializeAndSave(Object? data,
    {String? key, bool notify = true, bool ignoreReturn = false}) async {
  final record = await runInIsolate<
      (
        List<DataModelMixin>,
        List<DataModelMixin>,
        List<String>
      )>((adapter) async {
    final emptyDm = <DataModelMixin>[];
    final r = adapter._deserialize(adapter, data, key: key);
    final models = [...r.$1, ...r.$2];
    if (models.isEmpty) return (emptyDm, emptyDm, <String>[]);
    final savedKeys = await adapter.saveManyLocal(models, async: false);
    return ignoreReturn
        ? (emptyDm, emptyDm, savedKeys!)
        : (r.$1, r.$2, savedKeys!);
  });
  final (models, included, savedKeys) = record;
  if (notify && savedKeys.isNotEmpty) {
    core._notify(savedKeys, type: DataGraphEventType.updateNode);
  }
  return DeserializedData<T>(models.cast<T>(), included: included);
}