В 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 ->
// ...
}
}
}
}
Код: Выделить всё
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,{})
}
}
}
Код: Выделить всё
@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,
)
}
Подробнее здесь: https://stackoverflow.com/questions/789 ... n-a-scaffo