Hi is there way library can take picture from came...
# multiplatform
h
Hi is there way library can take picture from camera and gallery that is compatible with cafe.adriel.voyager? One of I found is that this (https://github.com/QasimNawaz/KMPImagePicker?source=post_page-----8a8f8cc9cc82--------------------------------) However i got crash like this:
FATAL EXCEPTION: main (Ask Gemini)
Process: com.kloudius.katmaans, PID: 4348 android.os.BadParcelableException: Parcelable encountered IOException writing serializable object (name = com.kloudius.katmaans.presentation.screens.MainActivity) at android.os.Parcel.writeSerializable(Parcel.java:2809) at android.os.Parcel.writeValue(Parcel.java:2575) at android.os.Parcel.writeValue(Parcel.java:2374) at android.os.Parcel.writeList(Parcel.java:1427) at android.os.Parcel.writeValue(Parcel.java:2518) at android.os.Parcel.writeValue(Parcel.java:2374) at android.os.Parcel.writeList(Parcel.java:1427) at android.os.Parcel.writeValue(Parcel.java:2518) at android.os.Parcel.writeValue(Parcel.java:2374) at android.os.Parcel.writeArrayMapInternal(Parcel.java:1310) at android.os.BaseBundle.writeToParcelInner(BaseBundle.java:1843) at android.os.Bundle.writeToParcel(Bundle.java:1389) at android.os.Parcel.writeBundle(Parcel.java:1379) at android.os.Parcel.writeValue(Parcel.java:2491) at android.os.Parcel.writeValue(Parcel.java:2381) at android.os.Parcel.writeArrayMapInternal(Parcel.java:1310) at android.os.BaseBundle.writeToParcelInner(BaseBundle.java:1843) at android.os.Bundle.writeToParcel(Bundle.java:1389) at android.os.Parcel.writeBundle(Parcel.java:1379) at android.os.Parcel.writeValue(Parcel.java:2491) at android.os.Parcel.writeValue(Parcel.java:2381) at android.os.BaseBundle.dumpStats(BaseBundle.java:1917) at android.os.BaseBundle.dumpStats(BaseBundle.java:1954) at android.app.servertransaction.PendingTransactionActions$StopInfo.collectBundleStates(PendingTransactionActions.java:123) at android.app.servertransaction.PendingTransactionActions$StopInfo.run(PendingTransactionActions.java:139) at android.os.Handler.handleCallback(Handler.java:958) at android.os.Handler.dispatchMessage(Handler.java:99) at android.os.Looper.loopOnce(Looper.java:230) at android.os.Looper.loop(Looper.java:319) at android.app.ActivityThread.main(ActivityThread.java:8919) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:578) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1103) Caused by: java.io.NotSerializableException: cafe.adriel.voyager.navigator.Navigator at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1240) at java.io.ObjectOutputStream.defaultWriteFields(ObjectOutputStream.java:1620) at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1581) at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1490) at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1234) at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:354) at android.os.Parcel.writeSerializable(Parcel.java:2804) at android.os.Parcel.writeValue(Parcel.java:2575) at android.os.Parcel.writeValue(Parcel.java:2374) at android.os.Parcel.writeList(Parcel.java:1427) at android.os.Parcel.writeValue(Parcel.java:2518) at android.os.Parcel.writeValue(Parcel.java:2374) at android.os.Parcel.writeList(Parcel.java:1427) at android.os.Parcel.writeValue(Parcel.java:2518) at android.os.Parcel.writeValue(Parcel.java:2374) at android.os.Parcel.writeArrayMapInternal(Parcel.java:1310) at android.os.BaseBundle.writeToParcelInner(BaseBundle.java:1843) at android.os.Bundle.writeToParcel(Bundle.java:1389) at android.os.Parcel.writeBundle(Parcel.java:1379) at android.os.Parcel.writeValue(Parcel.java:2491) at android.os.Parcel.writeValue(Parcel.java:2381) at android.os.Parcel.writeArrayMapInternal(Parcel.java:1310) at android.os.BaseBundle.writeToParcelInner(BaseBundle.java:1843) at android.os.Bundle.writeToParcel(Bundle.java:1389) at android.os.Parcel.writeBundle(Parcel.java:1379) at android.os.Parcel.writeValue(Parcel.java:2491) at android.os.Parcel.writeValue(Parcel.java:2381) at android.os.BaseBundle.dumpStats(BaseBundle.java:1917) at android.os.BaseBundle.dumpStats(BaseBundle.java:1954)
🧵 9
😞 1
v
In Voyager, ParcelableException can happen when you add a constructor argument to your screen that isn't parcelable. I would probably start by reading the documentation on state restoration in Voyager.
👍 1
h
@Viktor Nyblom this is my mainactivity screen which doesn't have constructor argument:
Copy code
class MainActivity : BasedActivityScreen() {
    @Composable
    override fun previewScreen() {
        val viewModel = koinScreenModel<MainActivityViewModel>()
        val mainActivityUiState by viewModel.state.collectAsState()
        val selectedScreenTab:MutableState<Tab> = mutableStateOf(HomeScreenTab)
        val snackBarHostState = rememberSnackBarHostState()
        val coroutineScope = rememberCoroutineScope()

        LifecycleEffect(
            onStarted = {
                viewModel.setTabList()
            }
        )

        when(val mainState = mainActivityUiState){
            is MainActivityViewState.Loading ->{}
            is MainActivityViewState.ShowTab ->{
                CustomBottomNavigation(tabList = mainState.tabScreenList,
                    selectedScreenTab = selectedScreenTab,
                    navigator = navigator,
                    snackBarHostState = snackBarHostState,
                    coroutineScope = coroutineScope
                )
            }
        }
    }
}
BasedActivity:
Copy code
abstract class BasedActivityScreen : Screen{
    open lateinit var navigator: Navigator

    @Composable
    override fun Content() {
        navigator = LocalNavigator.currentOrThrow

        val sessionState: SessionState = koinInject()
        val sessionUiState by sessionState.isLoggedIn.collectAsState()

        if (!sessionUiState){
            LaunchedEffect(Unit){
                delay(3000)
                navigator.replace(LoginScreen())
            }
        }

        previewScreen()
    }

    @Preview
    @Composable
    open fun previewScreen(){}
}
m
open lateinit var navigator: Navigator
This is not serializable
👍 1
r
can you please edit your message and remove this stacktrace, it is making this chat hard to read
👍 1
h
ok done I close this bugs. It is confirm because of lateinit. thanks guys
v
No problem. And as @Rok Oblak said, please don't paste large stacktraces directly in the chat. Be mindful of other people's experience.
👍 2
h
noted.