結論
module { viewModel { (savedState : SavedStateHandle) -> StateViewModel(savedState) } } class StateViewModel(savedState : SavedStateHandle) : ViewModel { } val viewModel by viewModel<StateViewModel> { parametersOf(Bundle) }
parametersOfでBundleを渡すとSavedStateに変換されて渡ってくる。
コードを追う
このPRで機能が追加されました。
https://github.com/InsertKoinIO/koin/pull/496
最初は以下のようにuseState というものが有ったのだが、
viewModel(useState = true){ (handle: SavedStateHandle) -> StateViewModel(savedState) }
2.1.0-alpha-8でwipというコミットで無くても良くなった。コード自体は追いやすいけど変更理由は謎。 https://github.com/InsertKoinIO/koin/commit/1e98608ec0a66183e14949cb8170be65e6aa11ae#diff-bf3b88c8af3824a062abbbd0e074ec87
と思ったらissuesに書いてあった。
https://github.com/InsertKoinIO/koin/issues/648
parametesOfでBundleを渡す方法はPRで一応検討はされていて、 https://github.com/InsertKoinIO/koin/pull/496#issuecomment-516514382
普通にBundle渡したい時ややこしくねという感じでdefaultArgumentsという引数に渡すことになりました。
val viewModel by viewModel<StateViewModel>(defaultArguments = { Bundle() }) {}
parametersOfに置くのは綺麗ではないと言っているのですがね。 https://github.com/InsertKoinIO/koin/pull/496#issuecomment-522904466
Bundleが強制的にSavedStateHandleに書き換えられるので、Bundleを渡すことは自分では無いですが第2引数以降に含めるしか方法はなくなりました。
一応意図した動作なのかを質問しました。