applyDeeplink method

void applyDeeplink(
  1. String params
)

Implementation

void applyDeeplink(String params) {
  final parts = params.split(';');
  final entries = parts.map(
    (e) {
      final [key, value] = e.split(':');
      return MapEntry(key, revive(value));
    },
  );

  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.onParamAdded.firstWhere((element) => element == id).then(
        (_) {
          final param = _params.items[id];
          if (param == null) return;

          final data = _serializer.decode(param, value);
          _params.update(id, data);
        },
      );
    } else {
      final data = _serializer.decode(param, value);
      _params.update(id, data);
    }
  }

  state = params;
  ref.notifyListeners();
}