Maksym M.
04/12/2025, 8:34 PMexpect abstract class UiContent<S : State> {
@Composable
abstract fun android(
storeContext: StoreContext,
state: S,
)
abstract fun ios(
storeContext: StoreContext,
state: S,
): Any
}
android
is overriden from android side and ios
returns SwiftUI, this is obviously a hack and I would like to hear an opinion on how to improve it but it does work (at least for now) and allows me to work the component itself
val content =
object : UiContent<RootState>() {
@Composable
override fun android(
storeContext: StoreContext,
state: RootState,
) {
UiContent(storeContext, state)
}
override fun ios(
storeContext: StoreContext,
state: RootState,
) = Unit
}
val component = RootComponent(content, container)
setContent {
KoloTheme {
Scaffold(modifier = Modifier.fillMaxSize()) { innerPadding ->
val context = remember(store) { StoreContextDelegate(store) }
component.content.android(context, store.states.collectAsState().value)
}
}
}
...
var body: some Scene {
WindowGroup {
let swiftUiView = component.content.ios(storeContext: storeContext, state: store.states.value) as! (any View)
AnyView(swiftUiView)
}
}
}
class RootUiContentImpl: RootUiContent {
override func ios(storeContext: any StoreContext, state: RootState) -> Any {
RootComponentUi(storeContext: storeContext, state: state)
}
}
Not even sure what my question is, I guess does anyone know if there are any libraries, talks or good articles that provide an example on how to share everything but UI?Brill
04/13/2025, 9:43 PMMaksym M.
04/14/2025, 7:04 AM