
uni_links: A Comprehensive Guide to Flutter’s Navigation and Deep Linking
Are you a Flutter developer looking to enhance your app’s navigation and deep linking capabilities? Look no further than uni_links. This powerful package allows you to seamlessly navigate between different screens and handle deep links with ease. In this article, we will delve into the various aspects of uni_links, providing you with a detailed and multi-dimensional introduction.
What is uni_links?
uni_links is a Flutter package that enables you to handle deep links and navigate between different screens in your app. It works by listening to URL changes and triggering the appropriate navigation based on the URL’s path and query parameters.
Installation and Setup
Before you can start using uni_links, you need to install it in your Flutter project. You can do this by adding the following line to your pubspec.yaml
file:
dependencies: flutter: sdk: flutter uni_links: ^latest_version
After adding the dependency, run flutter pub get
to install the package. Once installed, you can use uni_links by importing it in your Dart file:
import 'package:uni_links/uni_links.dart';
Handling Deep Links
One of the primary use cases of uni_links is handling deep links. Deep links allow you to open your app at a specific screen or with specific data. To handle deep links, you need to set up a listener for URL changes and navigate to the appropriate screen based on the URL’s path and query parameters.
Here’s an example of how to handle deep links in a Flutter app:
void main() { runApp(MyApp()); // Set up a listener for URL changes uni_links.addLinks( onLinksChange: (links) { for (final link in links) { if (link.url.path == '/home') { Navigator.pushNamed(context, '/home'); } else if (link.url.path == '/profile') { Navigator.pushNamed(context, '/profile'); } // Add more conditions for other paths } }, onOpenLink: (link) async { // Handle the link opening }, );}
Navigation Between Screens
uni_links not only helps you handle deep links but also simplifies navigation between different screens in your app. You can use the Navigator.pushNamed
method to navigate to a specific screen based on the URL’s path.
Here’s an example of how to navigate to a specific screen using uni_links:
void navigateToHome() { uni_links.launch('https://yourapp.com/home');}void navigateToProfile() { uni_links.launch('https://yourapp.com/profile');}
Query Parameters
uni_links allows you to pass query parameters in the URL, which can be used to pass data between screens. You can access the query parameters using the uri.queryParameters
property.

Here’s an example of how to use query parameters with uni_links:
void main() { runApp(MyApp()); // Set up a listener for URL changes uni_links.addLinks( onLinksChange: (links) { for (final link in links) { if (link.url.path == '/product') { final productId = link.url.queryParameters['id']; Navigator.pushNamed(context, '/product', arguments: {'id': productId}); } // Add more conditions for other paths } }, onOpenLink: (link) async { // Handle the link opening }, );}
Handling URL Changes
uni_links provides a listener that allows you to handle URL changes in real-time. This is useful for updating your app’s UI based on the current URL or for handling special cases when a URL is opened.
Here’s an example of how to handle URL changes using uni_links:
void main() { runApp(MyApp()); // Set up a listener for URL changes uni_links.addLinks( onLinksChange: (links) { for (final link in links) { if (link.url.path == '/special') { // Perform special actions for the '/special' path } // Add more conditions for other paths } }, onOpenLink: (link) async { // Handle the link opening