mcpField
D
deep-linking-for-flutter-web

deep-linking-for-flutter-web

github.com/rodydavisDevelopment6053 installsUpdated 2w ago
Repository

About deep-linking-for-flutter-web

A tutorial skill for Flutter developers implementing URL navigation in Flutter web apps, covering named and dynamic routes, protected routes, and browser history behavior.

Key features

  1. 01URL-based page navigation
  2. 02Multiple page routes
  3. 03Dynamic routes with IDs
  4. 04Browser back-button support
  5. 05Custom transitions and protected routes

Use cases

  1. 01Add direct links to specific pages
  2. 02Route to pages using an ID in the URL
  3. 03Support browser back navigation

Install

Copy the command and run it in a terminal.

$npx skills add https://github.com/rodydavis/skills --skill deep-linking-for-flutter-web

After installing, type/deep-linking-for-flutter-webin Claude Code to confirm it loaded.

Details

From the project README

Deep Linking for Flutter Web

In this article I will show you how to have proper URL navigation for your application. Open links to specific pages, protected routes and custom transitions.

TLDR The final source here and an online demo.

Setup 

Create a new flutter project called “flutter_deep_linking”

Open that folder up in VSCode.

Update your “pubspec.yaml” with the following:

README image

Step 1 

Create a file at “lib/ui/home/screen.dart” and add the following:

README image

Update your “lib/main.dart” with the following:

README image

Run your application and you should see the following:

README image

Step 2 

Now we need to grab the url the user enters into the address bar.

Create a folder at this location “lib/plugins/navigator”

Create a file inside named: “web.dart” with the following:

README image

Create a file inside named: “unsupported.dart” with the following:

README image

Create a file inside named: “navigator.dart” with the following:

README image

Now go back to your “lib/main.dart” file and add the navigator:

README image

It’s important to import the navigator as shown as this will have the conditional import for web compiling.

If you run the app now nothing should change.

Step 3 

Now let’s add the proper routing.

Create a new file “lib/ui/router.dart” and add the following:

README image

Also update “lib/main.dart” with the following:

README image

Notice how we removed the “home” field for MaterialApp. This is because the router will handle everything. By default we will go home on “/”

Step 4 

Now let’s add multiple screens to put this to the test! Add the following folders and files.

Create a file “lib/ui/account/screen.dart” and add the following:

README image

Create a file “lib/ui/settings/screen.dart” and add the following:

README image

Create a file “lib/ui/about/screen.dart” and add the following:

README image

Add the following to “lib/ui/router.dart”:

README image

Now when you navigate to /about, /account and /settings you will go to the new pages!

README image

Step 5 

Now let’s tie into the browser navigation buttons! Update “lib/ui/home/screen.dart” with the following:

README image

Now when you run the application and click on the settings icon it will launch the new screen as expected. But if you click your browsers back button it will go back to the home screen!

README image

README image

Step 6 

These urls are great but what if you want to pass data such as an ID that is not known ahead of time? No worries!

Update “lib/ui/account/screen.dart” with the following:

README image

Let’s update our “lib/ui/router.dart” with the following:

README image

Now when you run your application and navigate to “/account/40” you will see the following:

README image

Conclusion 

Dynamic routes work great for Flutter web, you just need to know what to tweak! This package uses a forked version of fluro for some fixes I added but once the PRs is merged you can just use the regular package. Let me know what you think below and if there is a better way I am not seeing!

Here is the final code: https://github.com/rodydavis/flutter_deep_linking

Comments

Markdown supported