Implementing deep linking without Firebase

=> First we have to add plugins for deep linking in pubspec.yaml :

uni_links:  ^0.5.1

=> we should add below code in AndroidManifest.xml

<meta-data android:name="flutter_deeplinking_enabled" android:value="true"/>
<intent-filter android:autoVerify="true">
    <action android:name="android.intent.action.VIEW"/>
    <category android:name="android.intent.category.DEFAULT"/>
    <category android:name="android.intent.category.BROWSABLE"/>
    <data android:scheme="http" android:host="nutsby.com" />
    <data android:scheme="https" />
</intent-filter>

=> Then we have to import package

import 'package:uni_links/uni_links.dart';

=> Then we have to handle the deep linking process

void initUniLinks() async {
  try {
    String? initialLink = await getInitialLink();
    print(initialLink);

    if (initialLink != null) {
      // Handle the initial deep link
      handleDeepLink(context,initialLink);
    }
  } on PlatformException {
    // Handle errors
  }
}

void handleDeepLink(BuildContext context,String link) {

  if (link == null) {
    return null;
  }
  final uri = Uri.parse(link);
  if (uri.pathSegments.length < 2) {
    print("The pathSegments list does not have enough elements");
    return;
  }
  var route = uri.pathSegments[0];
  print("path1: $route");
  var route_id= uri.pathSegments[1];
  print("path2: $route_id");
  if(route=="product_details"){
    Navigator.push(context, MaterialPageRoute( builder: (context) => ProductDetails(prod_id: route_id)));
  }
  // Add your logic to handle the deep link
  print("Received deep link: $link");
}


Sign In or Register to comment.