applyDeeplink method

void applyDeeplink(
  1. String params
)

Implementation

void applyDeeplink(String params) {
  final parts = params.split(';');
  final entries = parts.map(
    (pair) {
      try {
        final [key, value] = pair.split(':');
        return MapEntry(key, revive(value));
      } catch (error) {
        if (kDebugMode) {
          print("WARNING: failed to revive $error\n\t$pair");
        }

        return null;
      }
    },
  ).nonNulls;

  final map = unflatten(Map.fromEntries(entries));

  for (final entry in map.entries) {
    final [id, value] = [entry.key, entry.value];
    final param = _params.items[id];

    if (param == null) {
      _params.onParamRegistered.firstWhere((it) => it.$1 == id).then(
        (_) {
          final param = _params.items[id];
          if (param == null) return;

          final serializer = param.serializer;
          if (serializer == null) return;

          final data = serializer.$deserialize(value);
          _params.update(id, data);
        },
      );
    } else {
      final serializer = param.serializer;
      if (serializer == null) return;

      final data = serializer.$deserialize(value);
      _params.update(id, data);
    }
  }

  state = params;
  ref.notifyListeners();
}