Francis Mariano
02/28/2023, 6:32 PMSeth Madison
03/01/2023, 12:15 AMSubExecutors
that we delegate to. Each SubExecutor
is responsible for managing a subset of data (usually 1-to-1 with a backend endpoint). It gets a little icky, though because SubExecutors
sometimes need reference to each other — not the end of the world, but it feels like there should be a better way.Arkadii Ivanov
03/18/2023, 10:01 AMMagdalena Tsolaki
04/17/2023, 12:16 PMTravis Reitter
04/17/2023, 4:14 PMState
directly from SwiftUI (ie, avoiding the State -> Model
translation and avoiding creating a class that implements BaseMviView
)? My project's equivalent of MainController in the sample exposes a Flow<State>
that I consume directly from Compose with Flow<T>.collectAsStateWithLifecycle()
and I'd like to follow as closely as possible with my SwiftUITravis Reitter
04/18/2023, 4:38 PMCoroutineContext
in the public constructor and internally creating a new scope from it. Is that a reasonable way to handle the CoroutineScope
for the controller and how do I need to handle the lifecycle of the scope? Details in the threadAlexey
05/05/2023, 11:32 AMTung97 Hl
05/24/2023, 12:46 PMSeth Madison
05/30/2023, 8:38 PMlabel
).abu naser
06/15/2023, 6:49 AMTung97 Hl
06/18/2023, 7:30 AMTravis Reitter
07/17/2023, 4:31 PMBroadcastChannel
. The translation seems pretty simple but I'm having trouble getting it to work in my MVIKotlin-based project (and I believe this chunk of code is based closely on an older version of an MVIKotlin example). More details in the thread.Travis Reitter
07/17/2023, 6:02 PMCommand PhaseScriptExecution failed with a nonzero exit code
) but there's no output anywhere to indicate what the issue might be. I feel like, even in this case, I used to at least get some output. Has anyone had luck getting the underlying build output?Francis Mariano
07/26/2023, 7:26 PMFrancis Mariano
07/31/2023, 8:45 PMdata class State(
val channel01: Boolean = true,
val channel02: Boolean = false,
val chain: Boolean = false,
val effect: Effect = Effect(
num = 0x02, velocity = 25f, repeat = 100f, back = false,
primaryColor = Color.Red, secondaryColor = Color.Green, thirdColor = Color.Blue,
),
val effectScreen: List<EffectScreen> = getEffectNormalScreen(),
)
I have an intent to change the effect.num property. With the log is possible to check that the intent is called and dispatcher as well because the state is updated. But the store is not emitting the new state in the stateFlow. I am monitoring the stateFlow in the component of the store and it is logged just when I changed other property, but it is possible to see that state.num is different. The log is in the image attached.Sean Wong
08/07/2023, 10:45 AMPragnesh Meniya
08/21/2023, 5:02 AMSeth Madison
09/06/2023, 5:36 AMbinding
has started collecting. I have code along the lines of:
binder = bind {
renderer.events.map { it.toIntent() } bindTo store
}.apply { start() }
But I have no way to know when it is safe to call renderer.dispatch
because the call to start()
is asynchronous, and non-blocking.
It would be nice to provide an API similar to stateIn
, which offers a default implementation that launches a job to start sharing, and a secondary suspending stateIn()
function that blocks until the sharing has begun.
In MVIKotlin we could offer suspending start()
that would block until the flows are all actively collecting.
Thoughts? Am I missing something?Shabinder Singh
09/08/2023, 8:59 PMCoroutineExecutor
and StoreFactories in upper levels extend this BaseExecutor
My use case is, I want to do some logic process whenever a BaseMsg
is dispatched,
My first thought was to override the dispatch method
in BaseExecutor
and do processing by having a check in there.
but the dispatch of CoroutineExecutor is not marked as Open.
Is there a better way designed to support this use case or should I open a ticket suggesting marking dispatch as open ?Nacho Ruiz Martin
09/18/2023, 6:16 AMCoroutineScope
of the executor inside coroutineExecutorFactory
or onIntent
?
I’d like to use the same mechanism as with the previous API for my flows to be automatically cancelled when the scope is disposed.Tung97 Hl
10/13/2023, 4:17 AMArkadii Ivanov
11/04/2023, 9:05 PMArkadii Ivanov
11/04/2023, 11:14 PM3.3.0
is released!
👉 Updated Kotlin to 1.9.20
and other dependencies
👉 Removed the support of the legacy memory model
Release notes: https://github.com/arkivanov/MVIKotlin/releases/tag/3.3.0Nacho Ruiz Martin
11/18/2023, 7:15 AMstateFlow
extension?
I’ve found that if you map it with:
store.stateFlow.map(::mapper).stateIn(scope, SharingStarted.Eagerly, store.state.mapper())
you fall into the everlasting problem of textfield states.
I’ve been thinking of adding an optional mapping function inside stateFlow
. This would help users of MviKotlin
+ Decompose
that want to use Coroutines
all the way down.Arkadii Ivanov
11/19/2023, 10:03 PM1.3.0-beta01
.
- Added Lifecycle extensions for Coroutines
- Added Lifecycle extensions for Reaktive
- Added convenience extensions for LifecycleOwner
- Call doOnDestroy callback if Lifecycle is already destroyed
Release notes: https://github.com/arkivanov/Essenty/releases/tag/1.3.0-beta01
Slack ConversationArkadii Ivanov
12/02/2023, 4:02 PMmvikotlin-extensions-reaktive
module to version 2.0.0
- Updated Essenty to 1.3.0
- Deleted all deprecated code
- Merged rx
, rx-internal
and utils-internal
modules into mvikotlin
module
- Updated Kotlin to 1.9.21
- Disabled debug artifact publications for Android
- Support sending Actions from Executors
- Replaced getState
argument function in Executors and state
property in DSL with state()
function
Release notes: https://github.com/arkivanov/MVIKotlin/releases/tag/4.0.0-alpha01electrolobzik
12/31/2023, 2:09 PMwhen
block of the regular Executor for Intents?electrolobzik
01/04/2024, 2:41 PMArkadii Ivanov
01/16/2024, 9:10 AM4.0.0-alpha02
is released!
👉 Support wasmJs
target
Release notes: https://github.com/arkivanov/MVIKotlin/releases/tag/4.0.0-alpha02Zsolt.bertalan
02/29/2024, 2:03 PM