Как передать событие onClick плавающей кнопки действия, находящейся в Scaffold, на другой экран с помощью Jetpack ComposAndroid

Форум для тех, кто программирует под Android
Ответить Пред. темаСлед. тема
Anonymous
 Как передать событие onClick плавающей кнопки действия, находящейся в Scaffold, на другой экран с помощью Jetpack Compos

Сообщение Anonymous »

Я пишу приложение, следуя примерам из Now In Android.
В Scaffold У меня есть плавающая кнопка действия, и я хочу передать onClick > событие на другой экран, чтобы я мог взять контент с этого экрана и передать его в программу чтения текста в речь (TTS), которая будет отображаться в ModalBottomSheet.
Моя проблема в том, что я не знаю, как передать это событие, чтобы захватить его на другом экране.
Это код, в котором я загружаю Scaffold:

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

@Composable
fun LPlusApp(appState: LPlusAppState, onReaderClick: () -> Unit) {
LPlusBackground {
LPlusGradientBackground(/* code */) {
val snackbarHostState = remember { SnackbarHostState() }
val isOffline by appState.isOffline.collectAsStateWithLifecycle()
val notConnectedMessage = stringResource(R.string.not_connected)

LaunchedEffect(isOffline) {
//...
}

// ...

Scaffold(
modifier = Modifier.semantics {
testTagsAsResourceId = true
},
containerColor = Color.Transparent,
contentColor = MaterialTheme.colorScheme.onBackground,
contentWindowInsets = WindowInsets(0, 0, 0, 0),
snackbarHost = { SnackbarHost(snackbarHostState) },
floatingActionButton =
{
SmallFloatingActionButton(onClick = onReaderClick)
{ Icon(Icons.Filled.PlayArrow, contentDescription = "") }

},

) { padding ->

// ...
}
}
}
}
А это код MainActivity, где я устанавливаю содержимое:

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

setContent {
val darkTheme = shouldUseDarkTheme(uiState)

DisposableEffect(darkTheme) {
enableEdgeToEdge(
statusBarStyle = SystemBarStyle.auto(
android.graphics.Color.TRANSPARENT,
android.graphics.Color.TRANSPARENT,
) { darkTheme },
navigationBarStyle = SystemBarStyle.auto(
lightScrim,
darkScrim,
) { darkTheme },
)
onDispose {}
}

val appState = rememberLPlusAppState(
windowSizeClass = calculateWindowSizeClass(this),
networkMonitor = networkMonitor,
universalisRepository = universalisRepository,
timeZoneMonitor = timeZoneMonitor,
)

val currentTimeZone by appState.currentTimeZone.collectAsStateWithLifecycle()

CompositionLocalProvider(
LocalAnalyticsHelper provides analyticsHelper,
LocalTimeZone provides currentTimeZone,
) {
LPlusTheme(
darkTheme = darkTheme,
androidTheme = shouldUseAndroidTheme(uiState),
disableDynamicTheming = shouldDisableDynamicTheming(uiState),
) {
@OptIn(ExperimentalMaterial3AdaptiveApi::class)
LPlusApp(appState,{})
}
}
}
А это маршрут и экран, на котором я хочу перехватить событие onReaderClick:

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

@ExperimentalMaterial3AdaptiveApi
@Composable
fun UniversalisRoute(
onBackClick: () -> Unit,
modifier: Modifier = Modifier,
viewModel: UniversalisViewModel = hiltViewModel(),
onReaderClick: () -> Unit,
) {
val uiState by viewModel.uiState.collectAsStateWithLifecycle()

UniversalisScreen(
uiState = uiState,
modifier = modifier,
onReaderClick = {
Timber.d("Launch ModalBottomSheet with TTS")
},
onBackClick = onBackClick,
)
}
Код у меня не работает. Как мне захватить событие onClick плавающей кнопки действия в UniversalisScreen?

Подробнее здесь: https://stackoverflow.com/questions/789 ... n-a-scaffo
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

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