https://kotlinlang.org logo
#compose
Title
# compose
a

Adriano Celentano

11/28/2020, 12:54 PM
I get the following error
Caused by: java.lang.InstantiationException: java.lang.Class<com.adriano.spotifytag.presentation.edittrack.EditTrackViewModel> has no zero argument constructor
when using
androidx.navigation:navigation-compose:1.0.0-alpha02
Copy code
@AndroidEntryPoint
class SpotifyTagActivity : AppCompatActivity() {

    @Inject
    lateinit var spotifyImageLoader: SpotifyImageLoader

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)

        setContent {

            val navController = rememberNavController()

            SpotifyTagTheme {

                Providers(SpotifyImageLoaderAmbient provides spotifyImageLoader) {
                    ProvideWindowInsets {
                        NavHost(
                            navController = navController,
                            startDestination = Screen.EditTrack.route,
                            builder = {
                                composable(Screen.EditTrack.route) { EditTrackView() }
                                composable(Screen.CreatePlaylist.route) { Text(text = "test2") }
                            }
                        )
                    }
                }
            }
        }
    }
}
without navigation it work
Copy code
@AndroidEntryPoint
class SpotifyTagActivity : AppCompatActivity() {

    @Inject
    lateinit var spotifyImageLoader: SpotifyImageLoader

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)

        setContent {

            SpotifyTagTheme {

                Providers(SpotifyImageLoaderAmbient provides spotifyImageLoader) {
                    ProvideWindowInsets {
                        EditTrackView()
                    }
                }
            }
        }
    }
}
This is how my Screen looks like
Copy code
@Composable
fun EditTrackView() {

    val editTrackViewModel: EditTrackViewModel = viewModel()

    Surface(color = MaterialTheme.colors.background) {

        Box(modifier = Modifier.fillMaxSize()) {

            val transition = getEditModeTransition(editTrackViewModel.state.editMode)

            TrackAndTagsColumn(
                modifier = Modifier.fillMaxSize(),
                tags = editTrackViewModel.state.tags,
                scaleFactor = transition[CardScaleFactor],
                onTagClicked = { index: Int ->
                    editTrackViewModel.event(TrackViewEvent.TagClicked(index))
                },
                track = editTrackViewModel.state.currentTrack
            )

            val alignment = BiasAlignment(1f, transition[FabAlignmentFactor])
            TextInputFab(
                modifier = Modifier.align(alignment),
                editMode = editTrackViewModel.state.editMode,
                currentTextInput = editTrackViewModel.state.currentTextInput,
                onTextChange = { input: String ->
                    editTrackViewModel.event(TrackViewEvent.TagTextChanged(input))
                },
                onClick = { editTrackViewModel.event(TrackViewEvent.FabClicked) }
            )
        }
    }
}
The navigation component is overriding the default dagger's ViewModelFactory.Provider
a

Adriano Celentano

11/28/2020, 1:22 PM
thank you 🙏