mcpField
D
deep-linking-for-flutter-web

deep-linking-for-flutter-web

github.com/rodydavis开发6053 次安装2 周前更新
代码仓库

关于 deep-linking-for-flutter-web

面向 Flutter 开发者的教程技能,介绍如何在 Flutter Web 应用中实现 URL 导航,涵盖多页面路由、动态路由和浏览器历史记录。

主要功能

  1. 01基于 URL 的页面导航
  2. 02配置多个页面路由
  3. 03支持带 ID 的动态路由
  4. 04支持浏览器后退按钮
  5. 05自定义过渡和受保护路由

适用场景

  1. 01为特定页面添加直达链接
  2. 02通过 URL 中的 ID 路由页面
  3. 03支持浏览器后退导航

安装

复制下面的命令,在终端中运行。

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

安装后在 Claude Code 中输入/deep-linking-for-flutter-web确认已加载。

详细介绍

Flutter Web 深度链接

本文将介绍如何为应用实现完善的 URL 导航,包括打开特定页面的链接、受保护的路由和自定义过渡效果。

简而言之 最终源代码见此处,在线演示。

设置

创建一个名为“flutter_deep_linking”的新 Flutter 项目。

在 VSCode 中打开该文件夹。

按以下内容更新“pubspec.yaml”:

README 配图

步骤 1

创建文件“lib/ui/home/screen.dart”,并添加以下内容:

README 配图

按以下内容更新“lib/main.dart”:

README 配图

运行应用,你应该会看到以下内容:

README 配图

步骤 2

现在,我们需要获取用户在地址栏中输入的 URL。

在此位置创建文件夹“lib/plugins/navigator”。

在文件夹内创建名为“web.dart”的文件,并添加以下内容:

README 配图

在文件夹内创建名为“unsupported.dart”的文件,并添加以下内容:

README 配图

在文件夹内创建名为“navigator.dart”的文件,并添加以下内容:

README 配图

现在,回到“lib/main.dart”文件并添加导航器:

README 配图

请务必按示例所示导入导航器,因为其中包含用于 Web 编译的条件导入。

现在运行应用,应该不会有任何变化。

步骤 3

现在来添加合适的路由。

创建新文件“lib/ui/router.dart”,并添加以下内容:

README 配图

同时按以下内容更新“lib/main.dart”:

README 配图

注意,我们移除了 MaterialApp 的“home”字段。这是因为所有操作都将由路由器处理。默认情况下,访问“/”时会返回主页。

步骤 4

现在添加多个屏幕来测试一下!添加以下文件夹和文件。

创建文件“lib/ui/account/screen.dart”,并添加以下内容:

README 配图

创建文件“lib/ui/settings/screen.dart”,并添加以下内容:

README 配图

创建文件“lib/ui/about/screen.dart”,并添加以下内容:

README 配图

将以下内容添加到“lib/ui/router.dart”:

README 配图

现在,导航到 /about、/account 和 /settings 时,就会进入对应的新页面!

README 配图

步骤 5

现在,我们来接入浏览器的导航按钮!按以下内容更新“lib/ui/home/screen.dart”:

README 配图

现在运行应用并点击设置图标,就会按预期打开新屏幕。但如果点击浏览器的后退按钮,就会返回主页!

README 配图

README 配图

步骤 6

这些 URL 很不错,但如果想传递 ID 之类的、事先未知的数据,该怎么办?别担心!

按以下内容更新“lib/ui/account/screen.dart”:

README 配图

接下来,按以下内容更新“lib/ui/router.dart”:

README 配图

现在运行应用并导航到“/account/40”,就会看到以下内容:

README 配图

总结

动态路由非常适合 Flutter Web,只要知道该调整哪些地方就行!这个软件包使用了一个分支版本的 fluro,其中包含我添加的一些修复;不过 PR 合并后,你就可以直接使用常规版本的软件包了。欢迎在下方告诉我你的想法,以及你是否发现了更好的方法!

最终代码见:https://github.com/rodydavis/flutter_deep_linking

评论

支持 Markdown