Flutter web URL 导航像 http://localhost:60117/ItemDetails?pId=1 不工作
Flutter web URL navigation like http://localhost:60117/ItemDetails?pId=1 not working
在我的 flutter 项目中,我必须分享一个 URL,它通过社交媒体直接重定向到特定的产品详细信息页面。所以我使用 velocity_x 添加了路由信息,我的 main.dart 页面如下
@override
Widget build(BuildContext context) {
return MaterialApp.router(
debugShowCheckedModeBanner: false,
title: 'AppName',
theme: ThemeData(
primaryColor: MyAppTheme.primaryColor,
accentColor:MyAppTheme.accentColor
),
routeInformationParser: VxInformationParser(),
routerDelegate: VxNavigator(routes: {
"/": (_,__)=> MaterialPage(child:SplashScreen()),
"/login": (_,__)=> MaterialPage(child:SignUp()),
"/home": (_,__)=> MaterialPage(child:Home(selectedIndex: 0)),
"/ItemDetails": (uri, _){
final pId=int.parse(uri.queryParameters["pId"]);
return MaterialPage(
child:ItemDetailsFromAdd(
pId:pId.toString() ,
));
},
}),
)
我的初始路径是启动画面,在检查身份验证后重定向到登录页面或主页。当我点击一个特定的项目时,创建一个 url "http://localhost:60117/ItemDetails?pId=1" 这个。但是当我尝试从另一个选项卡启动此 url 时,它首先加载产品详细信息页面并突然重定向到我的初始页面闪屏。
我试图将“/”初始路由从“/”更改为“/splash”,并更改了我的“<base href="/splash/">
”,但最初出现页面未找到错误。
如何以正确的方式使用“http://localhost:60117/ItemDetails?pId=1”URL 直接访问我的产品详情页面。
onGenerateRoute: (settings) {
List<String> pathComponents = settings.name.split('/');
if (pathComponents[1] == 'invoice') {
return MaterialPageRoute(
builder: (context) {
return Invoice(arguments: pathComponents.last);
},
);
} else
return MaterialPageRoute(
builder: (context) {
return LandingPage();
},
);
;
},
试试这个方法
尝试在 URL 中添加话题标签 #
:
http://localhost:60117/#/ItemDetails?pId=1
如果您是 运行 渐进式网络应用程序,这是分享它的唯一方式。 /#/
左边是告诉浏览器从哪里获取应用程序,后面是路由逻辑。如果您尝试删除 /#/
,该应用程序将无法正常运行并恢复为默认路由。
经过长时间的测试我找到了答案,这里我的初始路由('/')重定向到'SplashScreen'。因此,当我尝试使用 URL 访问特定项目时,首先会出现 SplashScreen,然后我根据用户身份验证编码重定向到主页或登录。因此,当我使用 url 访问特定项目时,它会重定向到我的 login/home。解决方案是我更改了到主页的初始路径。
在我的 flutter 项目中,我必须分享一个 URL,它通过社交媒体直接重定向到特定的产品详细信息页面。所以我使用 velocity_x 添加了路由信息,我的 main.dart 页面如下
@override
Widget build(BuildContext context) {
return MaterialApp.router(
debugShowCheckedModeBanner: false,
title: 'AppName',
theme: ThemeData(
primaryColor: MyAppTheme.primaryColor,
accentColor:MyAppTheme.accentColor
),
routeInformationParser: VxInformationParser(),
routerDelegate: VxNavigator(routes: {
"/": (_,__)=> MaterialPage(child:SplashScreen()),
"/login": (_,__)=> MaterialPage(child:SignUp()),
"/home": (_,__)=> MaterialPage(child:Home(selectedIndex: 0)),
"/ItemDetails": (uri, _){
final pId=int.parse(uri.queryParameters["pId"]);
return MaterialPage(
child:ItemDetailsFromAdd(
pId:pId.toString() ,
));
},
}),
)
我的初始路径是启动画面,在检查身份验证后重定向到登录页面或主页。当我点击一个特定的项目时,创建一个 url "http://localhost:60117/ItemDetails?pId=1" 这个。但是当我尝试从另一个选项卡启动此 url 时,它首先加载产品详细信息页面并突然重定向到我的初始页面闪屏。
我试图将“/”初始路由从“/”更改为“/splash”,并更改了我的“<base href="/splash/">
”,但最初出现页面未找到错误。
如何以正确的方式使用“http://localhost:60117/ItemDetails?pId=1”URL 直接访问我的产品详情页面。
onGenerateRoute: (settings) {
List<String> pathComponents = settings.name.split('/');
if (pathComponents[1] == 'invoice') {
return MaterialPageRoute(
builder: (context) {
return Invoice(arguments: pathComponents.last);
},
);
} else
return MaterialPageRoute(
builder: (context) {
return LandingPage();
},
);
;
},
试试这个方法
尝试在 URL 中添加话题标签 #
:
http://localhost:60117/#/ItemDetails?pId=1
如果您是 运行 渐进式网络应用程序,这是分享它的唯一方式。 /#/
左边是告诉浏览器从哪里获取应用程序,后面是路由逻辑。如果您尝试删除 /#/
,该应用程序将无法正常运行并恢复为默认路由。
经过长时间的测试我找到了答案,这里我的初始路由('/')重定向到'SplashScreen'。因此,当我尝试使用 URL 访问特定项目时,首先会出现 SplashScreen,然后我根据用户身份验证编码重定向到主页或登录。因此,当我使用 url 访问特定项目时,它会重定向到我的 login/home。解决方案是我更改了到主页的初始路径。