deeplinkHandlerSample function
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);
}
}
''';
}