2

Conectando Deep Links ao Flutter: MethodChannel, EventChannel e DeepLinkService — sem pacote (Parte 4)

Continuando a série. Posts 2 e 3 cobriram o código nativo (Android e iOS).

Agora o Flutter precisa receber esses links.

Sem uni_links. Sem go_router. Só bridge nativo.


O problema clássico: Android captura o link, iOS captura o link — o Flutter não reage.

Causa: ninguém configurou os canais de comunicação.


No Post 4 implementei o DeepLinkService:

  • MethodChannel → busca o link inicial (cold start)
  • EventChannel → stream para links com app aberto
  • StreamController.broadcast() → aceita múltiplos listeners sem explodir
Future<void> initialize() async {
  if (_initialized) return;
  _initialized = true;

  final String? initialUrl =
      await _methodChannel.invokeMethod('getInitialLink');

  if (initialUrl != null) {
    final data = _parseDeepLink(initialUrl);
    if (data != null) _controller.add(data);
  }

  _eventChannel.receiveBroadcastStream().listen((url) {
    if (url is String) {
      final data = _parseDeepLink(url);
      if (data != null) _controller.add(data);
    }
  });
}

Por que broadcast()?

Um StreamController padrão só aceita um listener. Se a tela de signup e o widget raiz estiverem ouvindo ao mesmo tempo, quebra. O .broadcast() resolve.


Fonte (post completo no Medium)

https://medium.com/@crdornelles/conectando-tudo-integra%C3%A7%C3%A3o-flutter-com-deep-links-nativos-parte-4-b9b23c6e32e5


Como você lida com o timing entre o link chegar e a tela estar pronta?

Esse é o ponto que mais complica quando deep link é cold start.

Carregando publicação patrocinada...