deeplinkHandlerSample function

String deeplinkHandlerSample()

Sample for deeplink_handler.dart utility class

Implementation

String deeplinkHandlerSample() {
  return '''import 'package:app_links/app_links.dart';
import 'package:flutter/foundation.dart';

enum DeeplinkSource {
  /// (Cold Start)
  coldStart,

  /// (Warm Start)
  background,
}

class DeeplinkHandler {
  static final DeeplinkHandler _instance = DeeplinkHandler._internal();

  factory DeeplinkHandler() => _instance;

  DeeplinkHandler._internal();

  final AppLinks _appLinks = AppLinks();
  Function(Uri, DeeplinkSource)? _onLinkReceived;
  Uri? _lastHandledInitialLink;
  bool _initialized = false;

  Future<void> initialize({
    required Function(Uri, DeeplinkSource) onLinkReceived,
  }) async {
    if (_initialized) {
      if (kDebugMode) {
        print('DeeplinkHandler already initialized, skipping...');
      }
      return;
    }

    _initialized = true;
    _onLinkReceived = onLinkReceived;

    // PRIMARY: Check for initial link (Cold Start only)
    try {
      final initialLink = await _appLinks.getInitialLink();
      if (initialLink != null) {
        _lastHandledInitialLink = initialLink;
        _onLinkReceived?.call(initialLink, DeeplinkSource.coldStart);
      }
    } catch (e) {
      if (kDebugMode) {
        print('Error getting initial link: \$e');
      }
    }

    // SECONDARY: Listen to link stream for background/foreground links
    _appLinks.uriLinkStream.listen((uri) {
      // تجاهل الـ link لو هو نفسه اللي اتعالج كـ initial link
      if (_lastHandledInitialLink != null && uri == _lastHandledInitialLink) {
        _lastHandledInitialLink = null;
        return;
      }
      _onLinkReceived?.call(uri, DeeplinkSource.background);
    });
  }

  /// Handle deep link navigation
  void handleDeepLink(
    Uri uri, {
    DeeplinkSource source = DeeplinkSource.background,
  }) {
    if (kDebugMode) {
      print('Handling deep link: \$uri');
      print('Source: \${source.name}');
      print('Scheme: \${uri.scheme}');
      print('Host: \${uri.host}');
      print('Path: \${uri.path}');
      print('Query Parameters: \${uri.queryParameters}');
    }

    _onLinkReceived?.call(uri, source);
  }
}

''';
}