当前位置: 首页 > news >正文

在多模块应用中使用navigation不知不觉都是这么用

https://www.youtube.com/watch?v=lv1raAvwcgI&t=318s

省流总结:

假设我们有主模块 app, 功能模块 featureA, featureB,

featureA中有 screen1, screen2

featureB中有 screen3, screen4

核心common模块定义了Route1->screen1,Route2->screen2,Route3->screen3.....

如果在screen3 中要跳转到A中的screen1

有时候代码会是这样

@Composable
fun Screen3(navController: NavController,modifier: Modifier = Modifier
) {Box(modifier = Modifier.fillMaxSize(),contentAlignment = Alignment.Center) {Button(onClick = {navController.navigate(Route.Screen1)}    ) {Text("Go to Screen 1")}}
}

我们把导航逻辑写到模块中带来的问题是,

如果我现在单独使用 featureB,但是featureB中因为导航的这个逻辑,又要不得不去关联featureA。

所以,需要把导航的逻辑到需要通过lambda来提升到外部去

@Composable
fun ScreenA(onButtonClick: () -> Unit,modifier: Modifier = Modifier
) {Box(modifier = Modifier.fillMaxSize(),contentAlignment = Alignment.Center) {Button(onClick = onButtonClick //抛出导航逻辑) {Text("Go to Screen 1")}}
}

所有的逻辑写在应用nav模块中

 NavigationMultiModulePrepTheme {Scaffold(modifier = Modifier.fillMaxSize()) { innerPadding ->val navController = rememberNavController()NavHost(navController = navController,startDestination = Route.ScreenA) {composable<Route.Screen1> {Screen1(onButtonClick = {navController.navigate(Route.Screen3)})}composable<Route.Screen2> {Screen2(onButtonClick = {navController.navigate(Route.Screen3)})}composable<Route.Screen3> {Screen3(onButtonClick = {navController.navigate(Route.Screen1) {popUpTo<Route.Screen3> {inclusive = true}}})}}}}

所以,我们不该在内部的功能部分看到navigate的导航逻辑


http://www.mrgr.cn/news/63128.html

相关文章:

  • DHCP详解和部署
  • 7 分布式定时任务调度框架
  • 数据仓库: 10- 新技术与趋势
  • Unity的Transform类
  • 【Linux】Linux基础命令(二)
  • LeetCode 209 题:长度最小的子数组
  • NeurIPS 2024 Oral:用 DuQuant 实现 SOTA 4bit 量化
  • 浏览器的异步行为导致多个文件下载时没有全部执行
  • 微服务基础拆分实践(第一篇)
  • 【Linux 从基础到进阶】分布式文件系统的高可用配置
  • DAYWEB69 攻防-Java 安全JWT 攻防Swagger 自动化算法签名密匙Druid 泄漏
  • 关于解决keil中出现乱码的情况处理,搜索框乱码
  • 什么是Javascript,有什么特点
  • 计算机毕业设计——ssm基于微信平台的校园汉服租赁系统的设计与实现演示录像2021微信端
  • XXXX 本地模型替换为 两家 API
  • 环境变量——用户变量和系统变量
  • (实战)WebApi第9讲:EFCore性能优化(IQueryable延迟查询、取消跟踪机制)
  • Python爬虫必备利器:urllib库全面解析
  • 在树莓派 Raspbian 11 上使用 pyenv 安装 Python 3.9
  • Maven 插件
  • 基于单片机的宠物自动喂食系统的设计
  • Vue 动态属性 []
  • 2024年10月总结及随笔之漏更及失而复得
  • 多线程和线程同步基础篇学习笔记(Linux)
  • 微服务实战系列之玩转Docker(十七)
  • 【2024工业图像异常检测文献】SuperSimpleNet: 统一无监督和监督式学习检测快速可靠的表面缺陷检测方法