Coder Social home page Coder Social logo

odyssey's People

Contributors

alexgladkov avatar ephemerayne avatar kirich1409 avatar programistich avatar skeptick avatar slartus avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar

odyssey's Issues

onScreenRemove не вызывается (backToScreen)

Момент ухода экрана с навигации можно отслеживать через onScreenRemove.

Но вызов происходит через LaunchedEffect внутри AnimatedHost, а это работает через рекомпозицию.
Цепочка прямых возвратов, как это делает backToScreen - вызовет onScreenRemove только у последнего целевого экрана,
промежуточные останутся без внимания.

onScreenRemove функция очень важная, хотелось бы гарантированной работы для каждого экрана.

Screen transition dynamic color change bug

In one of my applications, there was a need to implement a dynamic theme change. But i stumbled upon a problem during attempts to change screens transition background color programmatically together with changing application theme.

In the Odyssey library, the background color when animating the transition between screens is set by a separate parameter backgroundColor in the OdysseyConfiguration class, which is passed to setNavigationContent when constructing the navigation graph.
Example was found here

In this minimal example i tried to simulate the dynamic transition background color change.

Initially, there is no problem, but after the first transition background color change, the screen is becoming colored with the solid color of the current backgroundColor value. The content on the screen disappears.

Way to reproduce: Click on Set Dark Transition Background button on first screen in this example project.
image
image

Please help me figure out how to dynamically change the color of screens transition in runtime.

IOS build fails because of org.jetbrains.compose.annotation-internal:annotation dependency

С версией 1.3.50 не собирается на iOS выдает ошибку
Could not find "org.jetbrains.compose.annotation-internal:annotation" in [/Users/binishmathew/binishmatheww/Kadalas, /Users/binishmathew/.konan/klib, /Users/binishmathew/.konan/kotlin-native-prebuilt-macos-aarch64-1.9.21/klib/common, /Users/binishmathew/.konan/kotlin-native-prebuilt-macos-aarch64-1.9.21/klib/platform/ios_simulator_arm64]

с 1.3.40 нормально все собирается.

Kotlin version: 1.9.21
Compose Multiplatform version: 1.6.0

Missing ViewActions

No opportunity to change extraBufferCapacity param for _viewActions SharedFlow, so when ViewModel send several actions in sequence, only the last action will be executed. I think there is needs more flexibility.

For example:

FeatureViewModel {
    fun someMethod() {
        ...
        viewAction = FeatureAction.Vibrate()
        viewAction = FeatureAction.Close()
        ...
    }
}

There is FeatureAction.Vibrate will be missed

Expected class OdysseyConfiguration does not have default constructor

При определении конфигурации навигации не могу определить OdysseyConfiguration для iosMain. В android все в порядке и все работает. Проект чистил, перезапускал Android Studio, успел даже повысить версию пакета, но ошибка не уходит. Подскажите какие данные еще предоставить для решения данной проблемы. Заранее спасибо)
Снимок экрана 2023-08-17 в 17 05 34

Alert dialog animation

Alert dialogs have animation of bottom sheets. They show and hide with y-offset instead of regular fade animation.

It would be nice to get a ModalDialogState when using CustomModalConfiguration. That way you can customize modal animation.

Multi-call body of fun screen()

Invoke screen() fun will work 4-5 times

setupNavigation("splash") {
   screen("splash") {
    Log.i(TAG, "call splash")
    SplashScreen()
   }
}

Log output:
call splash
call splash
call splash
call splash
call splash

DESKTOP "Module with the Main dispatcher had failed to initialize" when runReleaseDistributable

Приложение(Windows) вылетает при попытке перейти на экран (screen()) . Добавление зависимости swing coroutines в desktopMain не помогает.

Exception in thread "AWT-EventQueue-0" java.lang.IllegalStateException: Module with the Main dispatcher had failed to initialize
	at kotlinx.coroutines.internal.MissingMainCoroutineDispatcher.missing(MainDispatchers.kt:118)
	at kotlinx.coroutines.internal.MissingMainCoroutineDispatcher.isDispatchNeeded(MainDispatchers.kt:96)
	at kotlinx.coroutines.internal.DispatchedContinuationKt.resumeCancellableWith(DispatchedContinuation.kt:319)
	at kotlinx.coroutines.intrinsics.CancellableKt.startCoroutineCancellable(Cancellable.kt:30)
	at kotlinx.coroutines.intrinsics.CancellableKt.startCoroutineCancellable$default$6a2188af(Cancellable.kt:25)
	at kotlinx.coroutines.AbstractCoroutine.start(AbstractCoroutine.kt:2110)
	at kotlinx.coroutines.CancellableContinuation$DefaultImpls.launch(CancellableContinuation.kt:3056)
	at kotlinx.coroutines.CancellableContinuation$DefaultImpls.launch$default(CancellableContinuation.kt:4047)
	at kotlinx.coroutines.flow.FlowKt.launchIn(Unknown Source)
	at ru.alexgladkov.odyssey.core.extensions.CFlow.watch(CFlow.kt:19)
	at ru.alexgladkov.odyssey.compose.navigation.modal_navigation.ModalNavigatorKt$ModalNavigator$2.invokeSuspend(ModalNavigator.kt:55)
	at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:33)
	at kotlinx.coroutines.DispatchedTask.run(DispatchedTask.kt:106)
	at androidx.compose.ui.platform.FlushCoroutineDispatcher$dispatch$2$1.invoke(FlushCoroutineDispatcher.skiko.kt:1056)
	at androidx.compose.ui.platform.FlushCoroutineDispatcher.performRun(FlushCoroutineDispatcher.skiko.kt:85)
	at androidx.compose.ui.platform.FlushCoroutineDispatcher.access$performRun(FlushCoroutineDispatcher.skiko.kt:33)
	at androidx.compose.ui.platform.FlushCoroutineDispatcher$dispatch$2.invokeSuspend(FlushCoroutineDispatcher.skiko.kt:51)
	at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:33)
	at kotlinx.coroutines.DispatchedTask.run(DispatchedTask.kt:106)
	at java.desktop/java.awt.event.InvocationEvent.dispatch(Unknown Source)
	at java.desktop/java.awt.EventQueue.dispatchEventImpl(Unknown Source)
	at java.desktop/java.awt.EventQueue$3.run(Unknown Source)
	at java.desktop/java.awt.EventQueue$3.run(Unknown Source)
	at java.base/java.security.AccessController.doPrivileged(Unknown Source)
	at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source)
	at java.desktop/java.awt.EventQueue.dispatchEvent(Unknown Source)
	at java.desktop/java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
	at java.desktop/java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
	at java.desktop/java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
	at java.desktop/java.awt.EventDispatchThread.pumpEvents(Unknown Source)
	at java.desktop/java.awt.EventDispatchThread.pumpEvents(Unknown Source)
	at java.desktop/java.awt.EventDispatchThread.run(Unknown Source)
	Suppressed: kotlinx.coroutines.DiagnosticCoroutineContextException: [StandaloneCoroutine{Cancelling}@3d695df6, Dispatchers.Main[missing, cause=java.util.ServiceConfigurationError: kotlinx.coroutines.internal.MainDispatcherFactory: Provider kotlinx.coroutines.swing.SwingDispatcherFactory not found]]
Caused by: java.util.ServiceConfigurationError: kotlinx.coroutines.internal.MainDispatcherFactory: Provider kotlinx.coroutines.swing.SwingDispatcherFactory not found
	at java.base/java.util.ServiceLoader.fail(Unknown Source)
	at java.base/java.util.ServiceLoader$LazyClassPathLookupIterator.nextProviderClass(Unknown Source)
	at java.base/java.util.ServiceLoader$LazyClassPathLookupIterator.hasNextService(Unknown Source)
	at java.base/java.util.ServiceLoader$LazyClassPathLookupIterator.hasNext(Unknown Source)
	at java.base/java.util.ServiceLoader$2.hasNext(Unknown Source)
	at java.base/java.util.ServiceLoader$3.hasNext(Unknown Source)
	at kotlin.collections.CollectionsKt___CollectionsKt.toCollection(_Collections.kt:1295)
	at kotlin.collections.CollectionsKt___CollectionsKt.toMutableList(_Collections.kt:1328)
Caused by: java.util.ServiceConfigurationError: kotlinx.coroutines.internal.MainDispatcherFactory: Provider kotlinx.coroutines.swing.SwingDispatcherFactory not found

	at kotlin.collections.CollectionsKt___CollectionsKt.toList(_Collections.kt:1319)
	at kotlinx.coroutines.internal.FastServiceLoader.load(FastServiceLoader.kt:90)
	at kotlinx.coroutines.internal.FastServiceLoader.loadMainDispatcherFactory$kotlinx_coroutines_core(FastServiceLoader.kt:55)
	at kotlinx.coroutines.internal.MainDispatcherLoader.loadMainDispatcher(MainDispatchers.kt:27)
	at kotlinx.coroutines.internal.MainDispatcherLoader.<clinit>(MainDispatchers.kt:22)
	at kotlinx.coroutines.Dispatchers.getMain(Dispatchers.kt:57)
	... 23 more
Exception in thread "AWT-EventQueue-0" java.lang.IllegalStateException: Module with the Main dispatcher had failed to initialize
	at kotlinx.coroutines.internal.MissingMainCoroutineDispatcher.missing(MainDispatchers.kt:118)
	at kotlinx.coroutines.internal.MissingMainCoroutineDispatcher.isDispatchNeeded(MainDispatchers.kt:96)
	at kotlinx.coroutines.internal.DispatchedContinuationKt.resumeCancellableWith(DispatchedContinuation.kt:319)
	at kotlinx.coroutines.intrinsics.CancellableKt.startCoroutineCancellable(Cancellable.kt:30)
	at kotlinx.coroutines.intrinsics.CancellableKt.startCoroutineCancellable$default$6a2188af(Cancellable.kt:25)
	at kotlinx.coroutines.AbstractCoroutine.start(AbstractCoroutine.kt:2110)
	at kotlinx.coroutines.CancellableContinuation$DefaultImpls.launch(CancellableContinuation.kt:3056)
	at kotlinx.coroutines.CancellableContinuation$DefaultImpls.launch$default(CancellableContinuation.kt:4047)
	at kotlinx.coroutines.flow.FlowKt.launchIn(Unknown Source)
	at ru.alexgladkov.odyssey.core.extensions.CFlow.watch(CFlow.kt:19)
	at ru.alexgladkov.odyssey.compose.navigation.modal_navigation.ModalNavigatorKt$ModalNavigator$2.invokeSuspend(ModalNavigator.kt:55)
	at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:33)
	at kotlinx.coroutines.DispatchedTask.run(DispatchedTask.kt:106)
	at androidx.compose.ui.platform.FlushCoroutineDispatcher$dispatch$2$1.invoke(FlushCoroutineDispatcher.skiko.kt:1056)
	at androidx.compose.ui.platform.FlushCoroutineDispatcher.performRun(FlushCoroutineDispatcher.skiko.kt:85)
	at androidx.compose.ui.platform.FlushCoroutineDispatcher.access$performRun(FlushCoroutineDispatcher.skiko.kt:33)
	at androidx.compose.ui.platform.FlushCoroutineDispatcher$dispatch$2.invokeSuspend(FlushCoroutineDispatcher.skiko.kt:51)
	at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:33)
	at kotlinx.coroutines.DispatchedTask.run(DispatchedTask.kt:106)
	at java.desktop/java.awt.event.InvocationEvent.dispatch(Unknown Source)
	at java.desktop/java.awt.EventQueue.dispatchEventImpl(Unknown Source)
	at java.desktop/java.awt.EventQueue$3.run(Unknown Source)
	at java.desktop/java.awt.EventQueue$3.run(Unknown Source)
	at java.base/java.security.AccessController.doPrivileged(Unknown Source)
	at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source)
	at java.desktop/java.awt.EventQueue.dispatchEvent(Unknown Source)
	at java.desktop/java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
	at java.desktop/java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
	at java.desktop/java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
	at java.desktop/java.awt.EventDispatchThread.pumpEvents(Unknown Source)
	at java.desktop/java.awt.EventDispatchThread.pumpEvents(Unknown Source)
	at java.desktop/java.awt.EventDispatchThread.run(Unknown Source)
	Suppressed: kotlinx.coroutines.DiagnosticCoroutineContextException: [StandaloneCoroutine{Cancelled}@3d695df6, Dispatchers.Main[missing, cause=java.util.ServiceConfigurationError: kotlinx.coroutines.internal.MainDispatcherFactory: Provider kotlinx.coroutines.swing.SwingDispatcherFactory not found]]
	Suppressed: kotlinx.coroutines.DiagnosticCoroutineContextException: [androidx.compose.ui.awt.ComposeLayer$coroutineExceptionHandler$1@1fb1beab, androidx.compose.runtime.BroadcastFrameClock@4e5d5721, StandaloneCoroutine{Cancelling}@27fff5a4, FlushCoroutineDispatcher@7eacf369]
Caused by: java.util.ServiceConfigurationError: kotlinx.coroutines.internal.MainDispatcherFactory: Provider kotlinx.coroutines.swing.SwingDispatcherFactory not found
	at java.base/java.util.ServiceLoader.fail(Unknown Source)
	at java.base/java.util.ServiceLoader$LazyClassPathLookupIterator.nextProviderClass(Unknown Source)
	at java.base/java.util.ServiceLoader$LazyClassPathLookupIterator.hasNextService(Unknown Source)
	at java.base/java.util.ServiceLoader$LazyClassPathLookupIterator.hasNext(Unknown Source)
	at java.base/java.util.ServiceLoader$2.hasNext(Unknown Source)
	at java.base/java.util.ServiceLoader$3.hasNext(Unknown Source)
	at kotlin.collections.CollectionsKt___CollectionsKt.toCollection(_Collections.kt:1295)
	at kotlin.collections.CollectionsKt___CollectionsKt.toMutableList(_Collections.kt:1328)
	at kotlin.collections.CollectionsKt___CollectionsKt.toList(_Collections.kt:1319)
	at kotlinx.coroutines.internal.FastServiceLoader.load(FastServiceLoader.kt:90)
	at kotlinx.coroutines.internal.FastServiceLoader.loadMainDispatcherFactory$kotlinx_coroutines_core(FastServiceLoader.kt:55)
	at kotlinx.coroutines.internal.MainDispatcherLoader.loadMainDispatcher(MainDispatchers.kt:27)
	at kotlinx.coroutines.internal.MainDispatcherLoader.<clinit>(MainDispatchers.kt:22)
	at kotlinx.coroutines.Dispatchers.getMain(Dispatchers.kt:57)
	... 23 more```

Проблем с отображением экрана на устройствах xiaomi

Не отрабатывает startDestination на определенных моделях xiaomi в следствие не отображается экран
Если создать активити с которой будет переход на экран с compose то все начинает работать и экран становится видимым

Android - handling configuration changes

After configuration changes such as screen rotation and theme change, navigation starts from the beginning. It is necessary to correct and process the configuration change.

Need Hilt integration for viewModels

Need some kind of binding to the life cycle of the screen for the VM. In hilt-navigation used function with param ViewModelStoreOwner. NavBackStackEntry is used as ViewModelStoreOwner.

Bottom navigation elevation

There is no way to configure elevation of Bottom Navigation since Odyssey library code passes no value in BottomBarNavigotor.kt line 60. (v 1.0.0)
BottomNavigation( backgroundColor = bottomNavConfiguration.backgroundColor )
Thus androidx's composable BottomNavigation takes default value from BottomNavigationDefaults.Elevation = 8.dp

Please add possibility to change bottom navigation elevation.

How to use Odyssey navigation with Moko ViewModel?

My application is built for Desktop and Android and using IceRock Moko viewModels. Navigation works well but ViewModel recreating every time when user navigating between screens instead of store it while a screen in backstack.

Now I am including my viewModels with val viewModel = remember { MyScreenViewModel() }. Or in case a Koin as DI with val viewModel = koinInject<MyScreenViewModel>().

It looks like Odyssey navigation should handling some lifecycle events and pass it to the ViewModel. Is it possible to implement it?

How to get correct screen key?

Hello, I am trying to retrieve screen key with LocalRootController.current.currentScreen.value?.screen?.key inside a screen Composable function. The problem is it calls several times with previous screen key and current screen key, so I can't differentiate what is the correct key of current screen. Could you please clarify how to retrieve current screen key?

Theming in Odyssey

It is not available to pass own app theme by setupNavigation() function.
Way to achieve that: get code from setupNavigation and wrap ModalNavigator with own theme:

        val navigationGraph: RootComposeBuilder.() -> Unit = {
            screen("screen1") {
                Screen1()
            }
            screen(name = "screen2") {
                Screen2()
            }
        }

        val rootController = RootComposeBuilder().apply(navigationGraph).build()
        rootController.setupWithActivity(this)

        setContent {
            CompositionLocalProvider(
                LocalRootController provides rootController
            ) {
                AppTheme() {
                    ModalNavigator {
                        Navigator("main")
                    }
                }
            }
        }

Would be awesome to have a tool to pass own app theme

Crash after clicking "Back"

If you are on the start screen and click on the "Back" button, then the application crashes. Exception stack trace:

E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.finance_tracker.finance_tracker, PID: 25018
    java.util.NoSuchElementException: List is empty.
        at kotlin.collections.CollectionsKt__MutableCollectionsKt.removeLast(MutableCollections.kt:255)
        at ru.alexgladkov.odyssey.compose.RootController.removeTopScreen(RootController.kt:372)
        at ru.alexgladkov.odyssey.compose.RootController.popBackStack(RootController.kt:199)
        at ru.alexgladkov.odyssey.compose.controllers.MultiStackRootController.popBackStack(MultiStackRootController.kt:44)
        at ru.alexgladkov.odyssey.compose.RootController.popBackStack(RootController.kt:198)
        at ru.alexgladkov.odyssey.compose.RootController$setupBackPressedDispatcher$1.onBackPressed(RootController.kt:126)
        at ru.alexgladkov.odyssey.core.backpress.OnBackPressedDispatcher.onBackPressed(OnBackPressedDispatcher.kt:7)
        at ru.alexgladkov.odyssey.compose.extensions.RootController___LifeCycleKt$setupWithActivity$1.handleOnBackPressed(RootController + LifeCycle.kt:19)
        at androidx.activity.OnBackPressedDispatcher.onBackPressed(OnBackPressedDispatcher.java:192)
        at androidx.activity.ComponentActivity.onBackPressed(ComponentActivity.java:657)
        at android.app.Activity.onKeyUp(Activity.java:3707)
        at android.view.KeyEvent.dispatch(KeyEvent.java:2849)
        at android.app.Activity.dispatchKeyEvent(Activity.java:4024)
        at androidx.core.app.ComponentActivity.superDispatchKeyEvent(ComponentActivity.java:124)
        at androidx.core.view.KeyEventDispatcher.dispatchKeyEvent(KeyEventDispatcher.java:86)
        at androidx.core.app.ComponentActivity.dispatchKeyEvent(ComponentActivity.java:142)
        at com.android.internal.policy.DecorView.dispatchKeyEvent(DecorView.java:389)
        at android.view.ViewRootImpl$ViewPostImeInputStage.processKeyEvent(ViewRootImpl.java:5545)
        at android.view.ViewRootImpl$ViewPostImeInputStage.onProcess(ViewRootImpl.java:5413)
        at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:4918)
        at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:4971)
        at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:4937)
        at android.view.ViewRootImpl$AsyncInputStage.forward(ViewRootImpl.java:5077)
        at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:4945)
        at android.view.ViewRootImpl$AsyncInputStage.apply(ViewRootImpl.java:5134)
        at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:4918)
        at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:4971)
        at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:4937)
        at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:4945)
        at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:4918)
        at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:4971)
        at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:4937)
        at android.view.ViewRootImpl$AsyncInputStage.forward(ViewRootImpl.java:5110)
        at android.view.ViewRootImpl$ImeInputStage.onFinishedInputEvent(ViewRootImpl.java:5273)
        at android.view.inputmethod.InputMethodManager$PendingEvent.run(InputMethodManager.java:3071)
        at android.view.inputmethod.InputMethodManager.invokeFinishedInputEventCallback(InputMethodManager.java:2614)
        at android.view.inputmethod.InputMethodManager.finishedInputEvent(InputMethodManager.java:2605)
        at android.view.inputmethod.InputMethodManager$ImeInputEventSender.onInputEventFinished(InputMethodManager.java:3048)
        at android.view.InputEventSender.dispatchInputEventFinished(InputEventSender.java:143)
        at android.os.MessageQueue.nativePollOnce(Native Method)
        at android.os.MessageQueue.next(MessageQueue.java:336)
        at android.os.Looper.loop(Looper.java:181)
        at android.app.ActivityThread.main(ActivityThread.java:7562)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:539)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:950)

Dialog

Hello, do you plan to add navigation support to dialogs?

Desktop version crash

example project: https://github.com/slartus/Moca/tree/sample/odyssey-desktop-bug

java.lang.NoSuchFieldError: end
at org.jetbrains.skia.impl.Library._nAfterLoad(Native Method)
at org.jetbrains.skia.impl.Library$Companion._nAfterLoad(Library.jvm.kt)
at org.jetbrains.skiko.Library.load(Library.kt:66)
at org.jetbrains.skiko.SkiaLayer.(SkiaLayer.jvm.kt:29)
at androidx.compose.ui.awt.ComposeLayer.(ComposeLayer.desktop.kt:73)
at androidx.compose.ui.awt.ComposePanel.addNotify(ComposePanel.desktop.kt:111)
at java.desktop/java.awt.Container.addNotify(Container.java:2800)
at java.desktop/javax.swing.JComponent.addNotify(JComponent.java:4791)
at java.desktop/java.awt.Container.addNotify(Container.java:2800)
at java.desktop/javax.swing.JComponent.addNotify(JComponent.java:4791)
at java.desktop/java.awt.Container.addNotify(Container.java:2800)
at java.desktop/javax.swing.JComponent.addNotify(JComponent.java:4791)
at java.desktop/javax.swing.JRootPane.addNotify(JRootPane.java:733)
at java.desktop/java.awt.Container.addNotify(Container.java:2800)
at java.desktop/java.awt.Window.addNotify(Window.java:787)
at java.desktop/java.awt.Frame.addNotify(Frame.java:490)
at java.desktop/java.awt.Window.show(Window.java:1049)
at java.desktop/java.awt.Component.show(Component.java:1732)
at java.desktop/java.awt.Component.setVisible(Component.java:1679)
at java.desktop/java.awt.Window.setVisible(Window.java:1032)
at SetupKt.setupNavigation(setup.kt:34)

Hilt version crash

Getting same error on app launch:

java.lang.IllegalArgumentException: CreationExtras must have a value by SAVED_STATE_REGISTRY_OWNER_KEY at androidx.lifecycle.SavedStateHandleSupport.createSavedStateHandle(SavedStateHandleSupport.kt:91)

Can be produced in the example project

Back to default tab after backpressed from customNavigation

было бы очень круто чтобы после переключения с одной вкладки customNavigation на другую, при последующем тапе на back мы не выходили из приложения а возвращались на какой-то дефолтный таб

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.