路由¶
在路由之前,需要先注册页面
使用¶
在页面内可通过LocalPageScope
获取PageScope,然后使用其中的route
方法进行路由跳转。
val pageScope = LocalPageScope.current
Button(onClick={
pageScope.route("path"){
argBuild{
//edit args
}
onResult{
//返回的值
}
window("windowId") // 以窗口的形式打开,目前只有desktop平台有用
panel("panelId") //在当前界面的对应panel中打开
transform = normal() // 以normal变换实现页面切换效果
transform{
//编辑变换效果。
}
flag = NormalFlag //给打开页面设置flag
}
}){
//...
}
参数传递¶
MRouter提供了灵活的参数传递设置方式,可以使用上述的argBuild
方法进行设置,也可以将参数放在路径上:path?key=value
或path/1
,后者是动态路径,需要在注册的时候使用动态路径的注册方式。
在路径上的参数会尝试变换成正确的数据结构进行传递,比如1会被转换成int类型,如果转换失败,将以字符串的类型进行传递,而为了区分int和long,可在数字后加L
,显式的转为long类型。
在后退时如果有携带数据,那么将可以在onResult
回调中获得。
多窗口¶
在desktop平台,可通过window
方法传入不同的windowId
打开不同的窗口,窗口的menu
将通过该id在注册表中寻找。
局部路由¶
在路由时可通过panel
方法指定该页面路由到当前页面的哪个panel上,除了使用panel
方法之外,还可以直接在路径上表示panelId:path
,如果当前页面不存在该panel,将以一个普通页面进行打开,结果和path
无异。可查看局部路由页面
变换¶
在路由时可通过transform
设置页面变换效果,在路由时可直接使用内置的变换组合,比如
normal
是从右到左进入,从左到右退出,在界面左侧存在手势区域,可向右滑动退出界面
modal
是从下到上进入,从上到下退出,效果是ios的presentViewController
实现的模态效果。且可在界面任意部分下滑退出。
none
则是无手势版的normal
。
除此之外,也可以使用第二种方式组合出你想要的变换效果。更详细的使用方式,请参考变换
flag¶
目前只支持一种ClearTaskFlag
,即在打开该页面时,清空当前回退栈。
回退和拦截¶
通过pageScope
的backPressed
方法即可从当前页面回退到上一个页面,可以使用setResult
方法设置回退时返回给上一个页面的值;使用BackHandler
函数可拦截该回退。
@Composable
fun Page(){
val pageScope = LocalPageScope.current
BackHandler{
//intercept the backspace
}
Button(onClick={
pageScope.setResult{
putInt("key",1)
}
pageScape.backPressed()
}){
//...
}
}
路由到平台界面¶
MRouter支持路由到各个平台的界面,只需要在各个平台中使用platformRoute
方法注册平台界面即可。
路由到Ios平台页面的补充¶
一般情况下是不需要实现的,库有默认实现提供。
需要路由到ios的UIViewController时,除了需要注册平台界面之外,还需要另外注册两个资源: 1,实现用于跳转的RootViewController。
MRouter.setRootViewController(rootViewController: UIViewController)
MRouter.registerRouteDelegate(delegate: RouteUIViewControllerDelegate)