通知页面的跳转会跳转到视频详情页

来源:1-2 课程导学

光_cfstOQ

2025-07-20

这个是homepage的通知的图标的onTap的代码 Icon(
Icons.explore_outlined,
color: Colors.grey,
),
InkWell(
onTap: () {
print(‘hi_navigator:跳转通知${RouteStatus.notice}’);
HiNavigator.getInstance().onJumpTo(RouteStatus.notice);
},
child: Padding(
padding: EdgeInsets.only(left: 12),
child: Icon(
Icons.mail_outline,
color: Colors.grey,
),
),
然后在hi_navigator中进行了扩充RouteStatus getStatus(MaterialPage page){
if(page.child is LoginPage){
return RouteStatus.login;
}else if(page.child is RegistrationPage){
return RouteStatus.registration;
}else if(page.child is BottomNavigator){
return RouteStatus.home;
}else if(page.child is VideoDetailPage){
return RouteStatus.detail;
}else if(page.child is NoicePage){
return RouteStatus.notice;
}else{
return RouteStatus.unknown;
}
}, 但是问题来了:首次打开程序,点击这个Icon,跳转的是NoicePage图片描述但是此时屏幕是全黑的,我的NoicePage是有数据的,不至于全黑,
然后我手势滑动页面 返回首页,如果不点击其他页面,每次按这个图标 都是进入NoicePage,但是页面是全黑的,这个时候就直接跳入RouteStatus.detail;这个页面,并且从此以后每次按这个图标 都是进入视频详情页RouteStatus.detail;图片描述这是为什么?
另外还想问一个问题: /// 注册路由跳转处理器
/// - routeJumpListener: 实现了路由跳转逻辑的监听器
void registerRouteJump(RouteJumpListener routeJumpListener){
this._routeJump = routeJumpListener;
}这个是hi_navigator里面的注册路由跳转处理器 但是我看了老师的代码里 只有main.dart里面 // 路由表 为Navigator设置一个Key,必要的时候可以通过navigatorKey.currentState来获取NavigatorState对象
BiliRouteDelegate():navigatorKey = GlobalKey()
{
//实现路由跳转逻辑
HiNavigator.getInstance().registerRouteJump
(RouteJumpListener(onJumpTo: (RouteStatus routeStatus,{Map? args})
{
_routeStatus = routeStatus;
if(routeStatus == RouteStatus.detail)
{
this.videoModel = args![‘videoModel’];

    }
    notifyListeners();
  })
);

}这里用到了,我想问为什么这里要这样设置,这个视频详情页面为什么要单独拎出来这样注册?

写回答

1回答

CrazyCodeBoy

2025-07-20

1.详情页需要传递视频模型所以单独做了处理。
2.看描述问题大概出在路由处理上,可以参考下这个路由的设置https://git.imooc.com/coding-487/fa-profile/src/master/lib/main.dart#L97
0
1
光_cfstOQ
我看了我的路由设置 } //创建我们要创建的页面 var page ; if(routeStatus == RouteStatus.home) { //跳转首页时将栈中其他页面进行出栈,因为首页不可回退 pages.clear(); page = pageWrap(BottomNavigator()); }else if(routeStatus == RouteStatus.detail) { page = pageWrap(VideoDetailPage(videoModel!)); }else if(routeStatus == RouteStatus.registration) { page = pageWrap(RegistrationPage()); }else if(routeStatus == RouteStatus.login) { page = pageWrap(LoginPage()); }else if(routeStatus == RouteStatus.notice) { page = pageWrap(NoicePage()); } 是有设置noicepage的 然后在没有点开视频详情页的时候 确实能进入Noicepage,现在的问题是 我一旦点开了视频详情页,再次点击Noice图标 进去的就成了视频详情页,routeStatus == RouteStatus.detail ,进不了notice的页面,如果我是进入首页、排行榜、收藏、我的,这4个路由页面,再次点击Noice图标 是可以进入的,
2025-07-21
共1条回复

Flutter高级进阶实战-仿哔哩哔哩-掌握Flutter高阶技能

一次性掌握Flutter高阶技能+商业级复杂项目架构设计与开发方案

1791 学习 · 900 问题

查看课程