Android Compose – как предотвратить двойное отображение диалога? ⇐ Android

Форум для тех, кто программирует под Android
Anonymous
Android Compose – как предотвратить двойное отображение диалога?

Сообщение Anonymous »

Я пытаюсь отобразить диалоговое окно сразу после отображения текущего представления. Однако диалоговое окно отображается дважды (возможно, из-за того, как работает рекомпозиция).

Код: Выделить всё

val showGpsDisabledDialog by viewModel.showGpsDisabledDialog.collectAsState()

Log.d(TAG, showGpsDisabledDialog.toString())
if (showGpsDisabledDialog) {
Log.d(TAG, "dialog")
val context = LocalContext.current

BasicAlertDialog(
onDismissRequest = {
Log.d(TAG, "dismiss")
viewModel.closeGpsDisabledDialog()
},

) {
Text("dialog")
}
}
ViewModel:

Код: Выделить всё

@HiltViewModel
class MapViewModel @Inject constructor(): ViewModel() {

private var _showGpsDisabledDialog: MutableStateFlow = MutableStateFlow(true)
val showGpsDisabledDialog: StateFlow get() = _showGpsDisabledDialog.asStateFlow()

fun openGpsDisabledDialog() {
if(!_showGpsDisabledDialog.value)
_showGpsDisabledDialog.value = true
}

fun closeGpsDisabledDialog() {
if(_showGpsDisabledDialog.value)
_showGpsDisabledDialog.value = false
}
}
Я пытался сохранить состояние в компонуемой модели, а затем в модели представления.
Я пытался использовать LaunchedEffect для установки этих флагов ( поэтому они неверны до компонуемой визуализации)
Я попробовал установить для них значение true в модели представления с использованием задержки.
Я обнаружил, что диалоговое окно отображается дважды в этих случаях, отображая простой диалог с текстом и заметил, что два текста перекрываются

Подробнее здесь: https://stackoverflow.com/questions/793 ... ying-twice

Вернуться в «Android»