美文网首页
compose-get路由-APT实现compose路由管理

compose-get路由-APT实现compose路由管理

作者: 进击的小大叔 | 来源:发表于2023-03-25 01:54 被阅读0次

compose是android开发的未来。

官方的路由框架navigation-animation

目前官方的提供的路由框架已支持进出场动画(仅支持slide类型transition),奈何其声明与配置步骤较多,出于敏捷开发的考虑,故想开发一套类似于Arouter的路由框架。

具体实现如下

image.png

一、get-processor 注解处理器

、、、对apt不熟悉的请自行脑补

该处理器是针对使用了PageRoute 注解标注的Compolseable函数进行页面标记,将其作为 Page(页面)添加到navigation中

具体PageRoute 代码如下:

@Target(
   AnnotationTarget.FUNCTION,//对函数生效
)
@Retention(AnnotationRetention.RUNTIME)//不删除编译后保留
annotation class PageRoute(
   val route: String,// 该page的路由地址(用过arouter的应该都很熟)
   val enter: Animation = Animation.LEFT_IN, // 进场动画
   val exit: Animation = Animation.LEFT_OUT, // 出场动画
   val popEnter: Animation = Animation.RIGHT_IN,// 推出
   val popExit: Animation = Animation.RIGHT_OUT// 推入
) {
   enum class Animation {
       LEFT_IN,
       LEFT_OUT,
       RIGHT_IN,
       RIGHT_OUT,

       UP_IN,
       UP_OUT,
       DOWN_IN,
       DOWN_OUT,
   }
}

二、 使用

1. 添加注解

@Composable
@PageRoute(route = "Text")
fun MainPage() {
    Text("Main页面")
}

2.编译

rebuild 项目即可生成路由集合类扩展函数


image.png

生成扩展函数如下:

@OptIn(ExperimentalAnimationApi::class)
public fun NavGraphBuilder.appComposePages(): Unit {
  definedPage(
      route="Main",
      enter=PageRoute.Animation.LEFT_IN,
      exit=PageRoute.Animation.LEFT_OUT,
      popEnter=PageRoute.Animation.RIGHT_IN,
      popExit=PageRoute.Animation.RIGHT_OUT) {
    MainPage()
  }
}

上诉代码中扩展函数appComposePages 中的前缀即 模块名称,通过对一模块的build.gradle声明,在模块build.gradle顶级添加

kapt {
   arguments {
       arg("moduleName", project.getName())
       includeCompileClasspath = true
       generateStubs = true
   }
}

3.配置多个模块到主app

1).activity

class MainActivity : ComponentActivity() {
   override fun onCreate(savedInstanceState: Bundle?) {
       super.onCreate(savedInstanceState)
       WindowCompat.setDecorFitsSystemWindows(window, false)
       setContent {
           ComposeGetTheme(darkTheme = false) {
               // A surface container using the 'background' color from the theme
               App()
           }
       }
   }
}

2).App

@OptIn(ExperimentalAnimationApi::class)
@Composable
fun App() {
   GetApp(
       startDestination = "Main" //目标首页 一般为Splash
   ) {
       //添加对应模块的扩展函数
       appComposePages() // 主工程
       // module_aComposePages() 
       // module_bComposePages() 
       // module_cComposePages() 
   }
}

4.使用路由地址跳转

navigator.navigate("xxxx") ///xxxx即在PageRoute注解上的route 地址

详细参考Demo

代码已上传至mavenCentral 可直接依赖使用

各个模块build.gradle 添加

dependencies {
    .......
    implementation "io.github.sunshaobei:satis-compose-get:1.0.0"
    implementation "io.github.sunshaobei:satis-compose-get-annotation:1.0.0"
    kapt "io.github.sunshaobei:satis-compose-get-processor:1.0.0"
}

相关文章

  • Day13 - Flutter - 路由导航

    概述 路由管理 路由基本使用 命名路由使用(重点) 页面跳转的拓展 一、路由管理 1.1、认识Flutter路由路...

  • Android 小型路由 SimpleRouter

    闲来无事,利用 APT 写了个类似 ARouter 的小型路由框架,方便组件化跳转。 功能说明 基本路由跳转 路由...

  • vue实现动态路由 前端控制

    公司最近重构之前的老项目,后台管理系统需要实现动态路由。 为什么要实现动态路由? 我们在开发后台管理系统的过程中,...

  • 路由

    路由map 路由视图 路由导航 实现简单路由 import VueRouter from 'vue-router'...

  • 基于APT的android路由框架(二)--APT技术

    Android 中的APT 基于APT的android路由框架(一) 一、什么是APT APT(Annotatio...

  • Flutter 通过自定义路由拦截实现权限管理

    之前几篇介绍了 fluro 的路由管理和转场动画,本篇介绍如何完成路由拦截,进而实现权限管理。“此路是我开,此树是...

  • 静态路由汇总

    1. 静态浮动路由 主备(也叫冗余备份) 基于控制层面实现 备份链路写静态路由改大管理距离,俗称浮动静态路由 基...

  • 组件化2.路由框架的设计

    路由框架原理 路由框架是为了实现组件之间的通信 路由框架维护了一个分组的路由表路由表中存放了路由地址和路由信息路由...

  • ios路由 FFRouter

    FFRouter路由 为啥路由 已经到了必须实现路由功能的时候,看了很多大神实现路由的方式(非常感谢?),尤其是Y...

  • react路由基础配置

    1、根据路径加载对应页面内容2、路由跳转3、路由懒加载4、嵌套路由(子路由)5、路由管理6、路由跳转权限校验 1、...

网友评论

      本文标题:compose-get路由-APT实现compose路由管理

      本文链接:https://www.haomeiwen.com/subject/hzwgrdtx.html