実現したいこと
- composable上のイベントを発火させたい
- composeで同じ値を送信して発火させていたい
composeで、同じ値を送信したい
例えば、webviewのbackボタンを押して戻った後に、もう一度同じbackボタンを押した場合に、同じbackのeventが流れた場合に2回目も動作させたいという内容になります。
前提
androidアプリを作成しており、UIをcomposeで作成しております。
xmlとcomposeの過渡期であることもあり、fragment本体はxmlで作成しており、fragmentから、menu、webviewはcomposeを呼び出しております。
menuにある、更新、進む、戻るのボタンを選択して、webviewに反映したいと考えております。
該当のソースコード
メニューにて、「WebViewModel.setWebViewEvent(WebViewModel.WebViewEventType.BACK)」
kotlin
1class WebViewModel() : ViewModel() { 2 enum class WebViewEventType { 3 NONE, BACK, FORWARD, REFRESH 4 } 5 private val _webViewEvent = MutableSharedFlow<WebViewEventType>() 6 val webViewEvent = _webViewEvent .asStateFlow() 7 fun setWebViewEvent(event: WebViewEventType){ 8 viewModelScope.launch { 9 _webViewEvent.emit(event) 10 } 11 } 12}
kotlin
1@Composable 2fun DetailArticleCompose(webViewModel: WebViewModel) { 3 Qlog.d("url=$currentUrl") 4 val webViewNavigator = rememberWebViewNavigator() 5 val webViewEvent = detailWebViewModel.webViewEvent.collectAsState(webViewModel.WebViewEventType.NONE) 6 7 WebView( 8 state = rememberWebViewState(url = "https://www.google.co.jp"), 9 navigator = webViewNavigator, 10 captureBackPresses = false, 11 }), 12 ) 13 14 if(DetailWebViewModel.WebViewEventType.NONE != webViewEvent.value){ 15 when(webViewEvent.value){ 16 DetailWebViewModel.WebViewEventType.BACK -> webViewNavigator.navigateBack() 17 DetailWebViewModel.WebViewEventType.FORWARD -> webViewNavigator.navigateForward() 18 DetailWebViewModel.WebViewEventType.REFRESH -> webViewNavigator.reload() 19 else -> {} 20 } 21 }
試したこと
もともとは、MutableStateFlowとしてましたが2回目以降うまくいかず、MutableSharedFlowに変えるなどしましたが状況は変わず、最初の1回しか動作しませんでした。
補足情報(FW/ツールのバージョンなど)
anroid 12
implementation platform('androidx.compose:compose-bom:2023.09.00')
compileSdk 34
kotlin 1.8.10
android studio 2022.3.1 patch 4
回答1件
あなたの回答
tips
プレビュー