问题标签 [kotlin-flow]

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 回答
150 浏览

kotlin - 使用 kotlin-flow 对内部流进行双重订阅

下面的代码片段存在以下问题;

  1. 当当前连接的条形码扫描仪的集合发生变化时,流set将发出当前连接的扫描仪scanners: Flow<Set<BarcodeScanner>>

  2. 如果我连接了一个名为 A 的扫描仪,并且我扫描了一个条形码,那么它工作正常,结果将显示在文本视图中。

  3. 如果我连接一个额外的设备,然后再次使用设备 A 扫描,我将看到 2 次扫描结果。

  4. 看起来每次更改 Set<> 时都会在 中创建一个额外的流订阅,collect { scanner.scan() }并且之前的流仍然存在。

我该如何解决这个问题?我已经和不同的运营商一起玩了一整天……我正在使用 Flow 1.2.2

0 投票
1 回答
1950 浏览

android - 如何在来自多个用例/交互器的视图模型中使用 Kotlin Flows 的组合结果?

背景

我正在尝试使用存储库和用例/交互器实现 MVVM 风格的干净架构模式。我想将 Kotlin Flows 用于用例/交互器。所有用例都具有相同的设置,并且结果被包装在一个密封的类中。

响应包装器:

所有用例/交互器都实现:

问题

在我的示例中,我需要GetFbUserUseCaseGetAllUsersUseCase. 它们都发出加载、错误和结果状态,我想直接委托给 UI。

示例代码

问题:

根据:Kotlin 流程,有多个选项可以组合和展平多个流程。哪一个最适合我的问题,我将如何实施?

0 投票
2 回答
10181 浏览

kotlin - 将多个 Kotlin 流合并到一个列表中,而无需等待第一个值

我有一个List<Flow<T>>,并且想生成一个Flow<List<T>>. 这几乎是什么combine- 除了 combine 等待每个Flow发出一个初始值,这不是我想要的。以这段代码为例:

使用combine(因此按原样),这是输出:

而我也对所有中间步骤感兴趣。这就是我想要从这三个流程中得到的:

现在我有两种解决方法,但都不是很好......第一个很丑陋,不适用于可为空的类型:

通过强制所有流发出第一个不相关的值,combine转换器确实被调用,并让我删除我知道不是实际值的空值。对此进行迭代,更具可读性但更重:

现在这个工作得很好,但仍然觉得我做得太过分了。协程库中是否有我缺少的方法?

0 投票
4 回答
12998 浏览

android - 如何在协程之外获取 Flow 的值?

与 LiveData 类似,如何在协程之外获取 Flow 的值?

语境

我避免LiveData在存储库层中支持Flow. 然而,我需要设置、观察和收集立即消费的价值。后者可用于 OkHttp3 中的身份验证目的Interceptor

0 投票
0 回答
271 浏览

kotlin - Kotlin Flow:没有足够的信息来推断 Flow 的构建器函数中的类型变量

我有这个扩展功能:

我可以毫无问题地使用它:

在此处输入图像描述

但是当我在 Flow 的 builder 函数中使用它时,我收到了这个错误:

没有足够的信息来推断参数 T

在此处输入图像描述

0 投票
1 回答
491 浏览

android - 如何从不同的函数发出值,但将它们全部收集在一个地方?流科特林

在我的活动中,我需要在回调中发出不同的流值,例如:

并在另一个类中收集,例如:

可能吗?

0 投票
4 回答
10658 浏览

kotlin - 如何从不同的功能发出流量值?Kotlin 协程

我有一个流程:

并想用函数发出值:

但是编译器不允许我这样做,有什么解决方法可以解决这个问题吗?

0 投票
1 回答
314 浏览

kotlin - 将流值发送/发送到 BroadcastChannel

今天一直被 Kotlin 流/通道的问题所困扰。本质上,我想获取从流中发出的值,并立即将它们发送到通道中。然后,我们通过公开的方法以流的形式订阅该频道。这里的用例是拥有一个始终在线的频道订阅和一个可以独立打开和关闭的流。

我在这里的简单用例是一个返回 channelFlow 的轮询器。理想情况下,我可以在 collect 方法中向通道发射。这似乎不起作用。我的菜鸟协程的想法是,因为收集和发送正在暂停,所以排放在收集中被暂停,我们被卡住了。

是否有任何用于流或通道的内置函数可以处理此行为或以任何其他方式实现此行为?

0 投票
1 回答
457 浏览

android - 删除表中的最后一行时,Android Room Flow 不会发出

我注意到当删除表的最后一个值时,流不会发出值。

例子:

因此,此表中有 2 株植物。现在我们删除工厂 1。正如我们所料,流程的观察者正在收到通知。现在直接删除植物 2,即表中的最后一个植物。此更改不会发出,观察者也不会收到通知。

我还注意到,如果您在植物 1 被移除后完全杀死应用程序,然后再次启动应用程序并删除第二个也是最后一个植物,则会发出更改并通知观察者。

这是房间/流程中的错误吗?我真的很想在发生这种情况时通知我的观察员。

我正在使用 Kotlin 1.3.72、协程 1.3.6 和 Room 2.2.5

0 投票
1 回答
3214 浏览

android - Kotlin 流程:仅收集至少重复 N 次的元素

我正在实现 ML Kit OCR 功能,有时,前几个值是错误的,只有在相机稳定并产生正确的值之后才会出现。我不想删除第一个 X 值,因为我不知道流将包含多少个元素。所以最好的方法是使用一些条件,将当前元素与前一个元素进行比较,但不确定。

Kotlin Flow API 中是否有一个函数可以比较收集的值并只收集至少发生 N 次的值?