为啥这样路由可以这样切换?

来源:5-5 Flutter新版路由和导航系统实战(二)

慕先生3072650

2021-11-16

为何 我路由点击后调用notifyListeners 之后 能打开播放详情 我并没有指定我要打开的页面地址啊 还有BiliRoutePath这个类有啥作用 里面调用了home()和detail() 最后 BiliRoutePath.home() : location 这个:loaction是啥意思
class BiliRouteDelegate extends RouterDelegate with ChangeNotifier,PopNavigatorRouterDelegateMixin {
@override
final GlobalKey navigatorKey;
//为Navigator设置一个key,必要的时候可以通过 navigationKey的currentState来获取NavigationState对象
BiliRouteDelegate():navigatorKey = GlobalKey();
List pages = [];
VideoModel? videoModel;
BiliRoutePath? path;

@override
Widget build(BuildContext context){
//构建路由栈
pages = [
pageWrap(
HomePage(
onJumpToDetail : (videoModel){
this.videoModel = videoModel;
notifyListeners();
},
)),
if(videoModel!=null) pageWrap(VideoDetailPage(videoModel!))
];
return Navigator(
key:navigatorKey,
pages:pages,
onPopPage: (route,result){
//在这里可以控制是否返回
if(!route.didPop(result)){
return false;
}
return true;
},
);
}

@override
Future setNewRoutePath(BiliRoutePath path) async {
this.path = path;
}
}

class BiliRoutePath {
final String location;

BiliRoutePath.home() : location = “/”;

BiliRoutePath.detail() : location = “/detail”;
}

写回答

2回答

CrazyCodeBoy

2021-11-17

//img.mukewang.com/szimg/6194cc4d0931277913501400.jpg

看下截图分析

0
0

CrazyCodeBoy

2021-11-17

1.notifyListeners();的时候会触发build,在build中通过if(videoModel!=null) pageWrap(VideoDetailPage(videoModel!))
];来判断是否要展示详情页;

2.可以通过BiliRoutePath来携带路由信息 location是BiliRoutePath的一个字段,BiliRoutePath.home() : location是初始化字段的一种写法。

0
2
CrazyCodeBoy
回复
慕先生3072650
看下上面截图分析
2021-11-17
共2条回复

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

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

1723 学习 · 870 问题

查看课程