如何让Apollo GraphQL Kotlin Codegen生成的Fragment支持序列化?
Apollo GraphQL Kotlin Fragment序列化解决方案
要让codegen自动生成支持序列化的Fragment类,从而能安全保存到实例状态,最便捷的方式是通过配置Apollo插件,让生成的模型自动实现Android常用的Parcelable或者kotx.serialization序列化:
方式一:生成Parcelable实现(Android场景首选)
- 先在模块的
build.gradle.kts中启用kotlin-parcelize插件:
plugins { id("com.android.application") // 或 library id("org.jetbrains.kotlin.android") id("kotlin-parcelize") // 新增该插件 id("com.apollographql.apollo3") }
- 配置Apollo服务生成Parcelable模型:
apollo { service("yourServiceName") { generateKotlinModels.set(true) kotlinModels { // 开启自动生成Parcelable实现,覆盖Fragment类 parcelable.set(true) } } }
- 执行Clean Project后Rebuild,生成的Fragment类会自动带上
@Parcelize注解并实现Parcelable接口,直接就能放到SavedStateHandle或者Bundle里保存实例状态。
方式二:生成kotx.serialization序列化支持
如果项目采用kotx序列化体系,也可以配置codegen自动生成序列化注解:
- 启用kotx序列化插件并添加依赖:
plugins { id("com.android.application") id("org.jetbrains.kotlin.android") id("kotlinx-serialization") // 新增插件 id("com.apollographql.apollo3") } dependencies { implementation("org.jetbrains.kotlinx:kotlinx-serialization-json:1.6.0") // 适配项目的版本 }
- 配置Apollo服务使用kotx序列化:
apollo { service("yourServiceName") { generateKotlinModels.set(true) kotlinModels { serializer.set(KotlinSerializer.KOTX_SERIALIZATION) } } }
- Rebuild后,生成的Fragment类会自动添加
@Serializable注解,可通过kotx序列化工具转为可存储格式,再保存到实例状态中。
两种方式都完全依赖codegen自动生成代码,不需要手动给Fragment类补写序列化逻辑,能最大程度减少重复工作。
内容的提问来源于stack exchange,提问作者Raj Chaudhary
相关产品推荐
相关产品推荐

