Size: a a a

Kotlin Community

2020 August 04

I

Igor in Kotlin Community
Eugene P.
@noraltavir Ну если мне нужен такой flow в разных местах. Можно, конечно, обернуть в какой-то DataSource
> Можно, конечно, обернуть в какой-то DataSource

Хорошая идея кстати.
Если вы вдруг переедете с dagger2 допустим на koin, у вас все равно все сломается из-за стирания дженериков
источник

AN

Alexander Nozik in Kotlin Community
Eugene P.
@noraltavir Ну если мне нужен такой flow в разных местах. Можно, конечно, обернуть в какой-то DataSource
Я думаю, что там как минимум должен быть не сам Flow, а контейнер для него.
источник

AI

Arkadii Ivanov in Kotlin Community
Eugene P.
Кто знает, в чем магия? Кейс инжект зависимостей в Dagger
val notificationDataFlow: Observable<List<NotificationData>> - компилится
val notificationDataFlow: Flow<List<NotificationData>> - не компилится
val notificationDataFlow: Flow<@JvmSuppressWildcards List<NotificationData>> - компилится
Всё верно, надо использовать это аннотацию. Вот тут немного описано https://medium.com/androiddevelopers/dagger-in-kotlin-gotchas-and-optimizations-7446d8dfd7dc
источник

EP

Eugene P. in Kotlin Community
Alexander Nozik
Я думаю, что там как минимум должен быть не сам Flow, а контейнер для него.
Да, я "слегка" срезал углы. По логике должен быть DataSource
источник

AN

Alexander Nozik in Kotlin Community
Eugene P.
Да, я "слегка" срезал углы. По логике должен быть DataSource
Просто к примеру далеко не любой Flow можно вычитать повторно
источник

I

Igor in Kotlin Community
Eugene P.
В фабрике сгенерировалось так:
public Flow<List<NotificationData>> get()
а при Inject генерируется так
Provider<Flow<? extends List<? extends NotificationData>>> notificationDataFlowProvider;
кстати ваш NotificationData финальный класс?
PS а не важно, у вас же в дженерике интерфейс List
источник

EP

Eugene P. in Kotlin Community
Igor
кстати ваш NotificationData финальный класс?
PS а не важно, у вас же в дженерике интерфейс List
Нет. Я тут заметил, что еще не конвертнул его в Kotlin. Но List<NotificationData> инжектился без проблем
источник

EP

Eugene P. in Kotlin Community
спасибо
источник

EP

Eugene P. in Kotlin Community
Alexander Nozik
Просто к примеру далеко не любой Flow можно вычитать повторно
StateFlow  и грядущий SharedFlow можно будет, нет?
источник

AN

Alexander Nozik in Kotlin Community
Eugene P.
StateFlow  и грядущий SharedFlow можно будет, нет?
В принципе да.
источник

I

Igor in Kotlin Community
Eugene P.
Нет. Я тут заметил, что еще не конвертнул его в Kotlin. Но List<NotificationData> инжектился без проблем
> Но List<NotificationData> инжектился без проблем

Да, потому что NotificationData финальный класс и котлине НЕ добавляет ? extends (потому что не может быть наследников)
НО ваш Flow<List<>> внутри имеет интерфейс List, от которого могут быть наслдники
источник

IO

Iaroslav Orlov in Kotlin Community
fun CoroutineScope.doAsync(): Deferred<R> = async {...} vs suspend fun do(): R = coroutineScope {...}
источник

EP

Eugene P. in Kotlin Community
Igor
> Но List<NotificationData> инжектился без проблем

Да, потому что NotificationData финальный класс и котлине НЕ добавляет ? extends (потому что не может быть наследников)
НО ваш Flow<List<>> внутри имеет интерфейс List, от которого могут быть наслдники
Спасибо за пояснения
источник

AI

Arkadii Ivanov in Kotlin Community
Eugene P.
Да, я "слегка" срезал углы. По логике должен быть DataSource
Имхо Вы сделали всё верно. Вам нужен поток данных, Вы использовали минимально возможный для этого интерфейс. Всё остальное - детали реализации.
источник

AN

Alexander Nozik in Kotlin Community
Iaroslav Orlov
fun CoroutineScope.doAsync(): Deferred<R> = async {...} vs suspend fun do(): R = coroutineScope {...}
В основном второе. Зависит от того, хочешь ли ты это отменять.
источник

AN

Alexander Nozik in Kotlin Community
Arkadii Ivanov
Имхо Вы сделали всё верно. Вам нужен поток данных, Вы использовали минимально возможный для этого интерфейс. Всё остальное - детали реализации.
А если там single-fire flow?
источник

EP

Eugene P. in Kotlin Community
Arkadii Ivanov
Имхо Вы сделали всё верно. Вам нужен поток данных, Вы использовали минимально возможный для этого интерфейс. Всё остальное - детали реализации.
Архитекторы не одобрят, слишком мало слоев абстракций
источник

EP

Eugene P. in Kotlin Community
Alexander Nozik
А если там single-fire flow?
Это не обязательно singleton
источник

IO

Iaroslav Orlov in Kotlin Community
Alexander Nozik
В основном второе. Зависит от того, хочешь ли ты это отменять.
ну корутины все равно плохо отменяются
источник

AI

Arkadii Ivanov in Kotlin Community
Alexander Nozik
А если там single-fire flow?
А чем оборачивание в ещё один интерфейс поможет?
источник