繁体   English   中英

如何从另一个可组合屏幕为一个可组合屏幕异步安排 API 请求? (喷气背包组成)

[英]How to schedule an API request asynchronously for one composable screen from another composable screen? (Jetpack Compose)

我是一名初级 Android 开发人员,正在尝试构建一个类似 Facebook 的社交媒体应用程序。 我的问题是,当我在屏幕 B 中为帖子添加书签并且操作成功时,(1)我想在屏幕 B中在屏幕 A 中启动 API 请求,并且(2)仅为该特定帖子更新书签图标。

对于问题的第二部分,我尝试了这两种解决方案。

我在导航回屏幕 A 时重新启动了手动 API 请求。当只有一个小的更改时,这会更新整个列表,因此效率非常低。

我构建了另一个 URL 路由来仅获取更新的帖子并在导航回屏幕 A 时启动它。但是要将新更新的帖子插入旧索引,列表必须是可变的,我不确定这是一个好习惯.

请帮助我解决此问题或类似问题。 我不确定这是否应该通过传递 NavArg 以在本地更新然后一些或通过使用 web sockets 来完成。 提前致谢。

data class ScreenAState(
val posts: List<Post> = emptyList(),
val isLoading: Boolean = false)

data class ScreenBState(
val post: PostDetail? = null,
val isBookmarked: Boolean? = null)

data class Post(
val title: String,
val isBookMarked: Boolean,
val imageUrl: String)

data class PostDetail(
val title: String,
val content: String,
val isBookMarked: Boolean,
val imageUrl: String)

问题是如何处理数据一致性,这与 jetpack compose 没有直接关系。 我建议你在 model 级别解决这个问题。 返回流而不是存储库中的 static 数据,并在 jetpack compose 中使用collectAsState来监控数据变化。

很难举个例子,因为它取决于 Model 层的类型。 如果是数据库,androidx的房间库支持回流; 如果是网络,看看这个。 https://gist.github.com/FishHawk/6e4706646401bea20242bdfad5d86a9e

我建议您继续使用您的逻辑,该逻辑将在从屏幕 B 返回到屏幕 A 时更新您的列表,但您可以不使用简单列表,而是使用:

https://developer.android.com/reference/kotlin/androidx/compose/runtime/snapshots/SnapshotStateList

这个列表是为你所需要的而设计的。 只更新那个元素。 同时,如果您希望在等待 API 调用完成时加载类似视图,则可以将该项目从列表更改为一些加载虚拟项目。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM