跳转至

局部路由

当页面足够大时,一个窗口应该不止显示一个页面,这时就需要局部路由了,最经典的就是列表+详情页面了。

PanelHost

在一个页面中使用PanelHost便可在这个页面使用局部路由

 Row {
    Column(
        Modifier.background(Color.Blue).fillMaxSize().weight(1f).zIndex(1f),
        horizontalAlignment = Alignment.CenterHorizontally
    ) {
        Button(onClick = {
            route("local:sample/first") {
//                    panel("local", false)
            }
        }) {
            Text("first")
        }
    }
    PanelHost(modifier = Modifier.weight(2f), panelState = rememberPanelState(), onPanelChange = {
        loge("tag", "isAttach:$it")
    })
}

通过panelState可以配置当前的panel和页面大小的关系,比如说当页面处于某个尺寸下才显示
通过onPanelChange回调可以接收这个panel是否显示,现在就可以将页面路由到这个panel上了

 Button(onClick = {
    route("local:sample/first") {
//                    panel("local", false)
    }
}) {
    Text("first")
}

通过给路径加前缀local:或者使用RouteBuild的panel 方法都可以在路由时将地址路由到panel中,其中的local就是这个panel的key。
如果当前页面并不存在key为local的panel,那么将和普通的路由别无二致。

局部路由到主路由

在局部内使用路由,可以在路径上加root前缀,比如:root:path,这样path对应的地址将路由到主路由(window下的首层page)
因此局部路由创建是不可使用root作为key。

HostSize

HostSize指示Host的尺寸规则和WindowSize类似,都分为:CompactMediumExpanded
由于panel是可嵌套的,那么位于panel内的panel就需要以外部的panel的大小作为尺寸指示而非windowSize。
关于WindowSize相关,可以参考窗口大小类别

嵌套panel:当将一个有panel的页面路由到当前页面的panel中,那么就会形成嵌套panel。