Kotlin Поток - можно ли добавлять новые значения по запросу - PullRequest
2 голосов
/ 05 апреля 2020

Можно ли добавить значения в поток после того, как он был создан?

До сих пор я видел примеры построителя потока, где строитель определяет, какие значения будут отправлены и когда. Однако, что если мне нужно создать поток и подписаться на него на уровне пользовательского интерфейса, прежде чем будет получено какое-либо значение. Затем мне нужно добавить значения к нему в другом слое (например, домен). Поэтому я подумал, что создам пустой построитель потока, а затем добавлю значения, но это не работает. Эта модель работает с каналами, но я не хочу использовать устаревший API, см. Ниже. Мне нужен механизм, который бы связывал доменный и пользовательский интерфейсы и был бы заметен. Другая проблема с каналами состоит в том, что я не могу очистить данные внутри него, последнее значение всегда остается там.

private val channel = ConflatedBroadcastChannel<Data>()

override val flow: Flow<Data> = flow {
    channel.consumeEach { data ->
        this.emit(data)
    }
}
override suspend fun setGraph(domainData: Data) {
    channel.send(domainData)
}

1 Ответ

1 голос
/ 30 апреля 2020

Вы были на правильном пути с идеей использования Channel и выставления его как Flow, единственная недостающая часть - это расширение Channel.asFlow(), см. docs .

Однако, Я думаю, что ваш вопрос дублирует этот вопрос , на который уже дан ответ . (Я бы опубликовал это как комментарий, но у меня недостаточно репутации.)

...