问题标签 [kotlin-stateflow]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
55 浏览

android - Flow 多次收集时会发出不同的值

我创建了一个从中发出数据的流。当我两次收集此流时,从同一个变量发出了 2 组不同的数据,而不是向两个收集器发出相同的值。

我有一个我自己创建的简单流程。文本将每秒记录两次

在我的 viewModel 中,我有一个简单的函数可以获取上一个 Flow

在我的 Fragment 中,我收集并显示我的 Flow

如果我将 Flow 转换为 StateFlow 或 SharedFlow,我不再有这个问题。我不明白为什么会发生这种情况,因为我使用的是相同的“demoFlow”变量。有没有办法在不转换为 StateFlow 或 SharedFlow 的情况下从“demoFlow”获取相同的值?

0 投票
2 回答
87 浏览

android - Android kotlin 中 SharedFlow 的使用

嘿,我正在学习 kotlin 中的流程。我正在学习MutableStateFlowMutableSharedFlow。我试图在现实世界的例子中学习MutableStateFlow 。但我无法获得MutableSharedFlow示例,它更适合哪个位置。我尝试了一些MutableStateFlow

例如,当我们从 api 获取数据时,我们可以使用 seal 类进行相应的填充。

LoggedState.kt

SettingsViewModel.kt

活动.kt

我都得到了MutableStateFlow示例。有人可以指导我如何在现实世界的例子中做MutableSharedFlow 。我也对参数很好奇

  1. 重播

  2. 额外缓冲容量

  3. onBufferOverflow

谢谢

0 投票
2 回答
48 浏览

android - Android LiveData/StateFlow 列表项属性更新问题

所以我更新我RecylerViewStateFlow<List>如下:

我的数据类:

我的 ViewModel 逻辑:

问题: UI没变,但是isSelected里面_student变了,怎么回事?(与 相同LiveData

0 投票
1 回答
39 浏览

android - Jetpack 使用 StateFlow 编写、获取和添加更多项目到 LazyColumn

我有一个LazyColumn呈现项目列表的。但是,我现在想获取更多项目以添加到我的惰性列表中。我不想重新渲染已经在 中渲染的项目LazyColumn,我只想添加新项目。

我该怎么做StateFlow?我需要传递一个page字符串来获取下一组项目,但是如何将页面传递给该repository.getContent()方法?

在我的 UI 中,我有这段代码来观察流程并呈现LazyColumn

我确实意识到 Compose 有一个分页库,但我正在尝试实现类似的东西,除了用户负责是否加载下一个项目。

这是期望的行为:

0 投票
1 回答
27 浏览

kotlin - 收集 stateFlow 列表

我有一个整数状态流列表。

我需要一个单一的状态流,它是列表状态流的总和。

我怎么能这样做?

0 投票
1 回答
81 浏览

android - 将实时数据转换为状态流

安卓、科特林

我的数据源类中有以下实时数据,我无法将其更改为 StateFlow,因此需要在我的 viewModel 中将其转换为 StateFlow

在我的 ViewModel 中,我有以下内容,这是我不确定这是否是将 LiveData 转换为 StateFlow 的正确方法的部分:

然后在我的片段中,我只收集结果

这是将 LiveData 转换为 StateFlow 的最佳实践吗?有什么我应该注意的吗?

0 投票
0 回答
11 浏览

android - 什么时候应该在存储库中使用 LiveData 或 Flow vs Domain Model?

互联网上提供的大量示例使您感到困惑,一些教程仅返回 Domain Model ,一些 return LiveData<DomainModel>,还有一些 return Flow<DomainModel>。我知道这一点LiveData并且Flow是不同的,但是你什么时候应该返回常规域模型与那些像 LiveData、Flow、StateFlow、SharedFlow 等可观察的模型?有什么区别吗?

来自 Android Architecture 组件示例

一些教程

另一个教程

我不是在问LiveDatavs Flow,这个问题显然与何时使用常规域模型对象与可观察对象有关。在什么情况和情况下。

0 投票
0 回答
33 浏览

android - 在 repo 和视图模型中观察到具有 StateFlow 实时更改的 Firestore,但适配器未更新

作为一名需要适应变化的开发人员,我在某处读到它说:

如果您没有为您的 Android 项目选择正确的架构,那么随着代码库的增长和团队的扩展,您将很难维护它。

我想Clean ArchitectureMVVM

我的应用数据流将如下所示:

OneNote_Clean_Architecture_MVVM_Data_Flow

模型类

Dtos

存储层是

NoteRepositoryImpl 是:

ViewModel 层是:

NoteViewModelImpl 是:

最后但并非最不重要的片段是:

有了上述所有逻辑,我面临着TWO问题

问题 - 1 如前所述我在集合中添加了 SnapshotListener:

如果我从Firebase 控制台Repository更改文档的值,我会在和中获得更新的值ViewModel,但不会更新传递给的注释列表adapter,因此所有项目都是相同的。

问题 - 2
如果我使用以下命令从列表/回收站视图中删除任何项目:

Repository我仍然在和中获得更新的列表(即新的笔记列表,不包括已删除的笔记)ViewModel,但没有更新传递给的笔记列表adapter,因此所有项目都是相同的,没有并排除已删除的项目。

问题我在初始化/更新适配器时到底在哪里出错?因为ViewModel并且Repository工作正常。

0 投票
0 回答
11 浏览

android-jetpack-compose - 流动和撰写

我试图在 lifeCycleScope 之后访问该列表,但它确实只显示了初始值。它只传递初始值!!