Parámetro de relleno de contenido no se usa

3 minutos de lectura

Avatar de usuario de BenjyTec
benjytec

Recientemente comencé a trabajar con Jetpack Compose. Tengo el siguiente componible:

@Composable
fun SearchScreen(navController: NavHostController) {
    Scaffold(
        topBar = { SearchBar() },
        content = {
            Column(modifier = Modifier
                .fillMaxSize()
                .verticalScroll(rememberScrollState())) {
                Text(stringResource(id = R.string.genreFilter))
                Row(
                    modifier = Modifier
                        .horizontalScroll(rememberScrollState()),
                    horizontalArrangement = Arrangement.spacedBy(4.dp)
                ) {
                    // some nested Composables
                }

            }},
    )
}

Pero con este código tal como está, todo el código dentro content = {...} está subrayado en rojo diciendo Jetpack Compose: Content padding parameter it is not used. Ya leí en esta publicación de Stackoverflow que en realidad, PaddingValues sólo se proporcionan en un andamio si el bottomBar está establecido, lo que obviamente no es el caso aquí. Así que no entiendo por qué estoy recibiendo este error.

Nota: La aplicación en realidad usa un BottomNavigationpero no dentro del Composable que mostré arriba. ¿Puede ser que esto todavía se propague de alguna manera aquí?

  • Copié y pegué tu componible y no puedo reproducir el error subrayado. tambien he puesto el content argumento como un lambda final y el código funciona bien.

    – Tonnie

    2 de mayo de 2022 a las 9:57

  • Interesante. ¿Podría estar relacionado con mi versión de composición? estoy usando compose_version = '1.2.0-alpha08, ya que necesito el FilterChip Composable. ¿Qué versión está utilizando?

    – BenjyTec

    2 de mayo de 2022 a las 10:01


  • si, estoy en composeVersion = "1.1.1" y he visto @Pylyp Dukhov respuesta a continuación que aclara las diferencias.

    – Tonnie

    2 mayo 2022 a las 10:20

Avatar de usuario de Phil Dukhov
Phil Dujov

desde componer 1.2.0 se requiere usar el parámetro de relleno, pasado a Scaffold content componible Debe aplicarlo al contenedor/vista superior en content:

content = { padding ->
    Column(
        modifier = Modifier
            .padding(padding)
    // ...

Esto se hace para evitar problemas de diseño, por ejemplo, cuando el andamio tiene una barra inferior, sin el uso de este relleno, parte de su vista estará debajo de la barra.

Siempre puedes suprimirlo con @SuppressLint("UnusedMaterialScaffoldPaddingParameter")pero recomendaría hacer esto solo cuando sepa exactamente lo que está haciendo.

  • Gracias, esto lo explica! Sin embargo, una pregunta de seguimiento, si tengo un NavHost establecido como hijo de un Scaffold¿simplemente configuraría el relleno directamente en el NavHosto necesito pasar de alguna manera este relleno a los elementos componibles separados que se mostrarán dentro del NavHost?

    – BenjyTec

    2 de mayo de 2022 a las 11:32

  • @BenjyTec debe aplicarlo al contenedor superior, en este caso NavHost

    – Phil Dujov

    2 de mayo de 2022 a las 11:41


  • Apliqué esto a mi contenedor superior y sigo recibiendo el error, suprimirlo parece ser la única forma de deshacerme de él.

    – alfietap

    6 de mayo de 2022 a las 5:42

  • @alfietap muestra el código cómo lo hiciste, por ejemplo, usando esencia. debería funcionar con seguridad, si su código es correcto y no funciona, debe informarse como error IDE

    – Phil Dujov

    6 de mayo de 2022 a las 5:46

  • @alfietap no me muestra error. Asegúrese de estar utilizando el IDE más reciente y el complemento Gradle de Android. Intente crear un nuevo proyecto con el mismo código para ver si puede reproducirlo. En caso afirmativo, informe incluyendo este proyecto de muestra, su versión IDE y proyecto de muestra.

    – Phil Dujov

    6 de mayo de 2022 a las 6:03

Vi un error en la versión alfa y estaba usando SmallTopAppBar() Scaffold no proporcionaba rellenos para dos componibles que estaban uno encima del otro. Después de actualizarlo, me di cuenta de que se solucionó el error y Scaffold tiene un relleno para que los elementos componibles ya no estén uno encima del otro.

Uso:

  Scaffold(topBar = { AppBar() }) { paddingValues ->
  AnyComposable(modifier = Modifier.padding(paddingValues)){

  }

app build.gradle agrega esto:

 buildFeatures {
    compose = true
    kotlinOptions.freeCompilerArgs += "-Xopt-in=androidx.compose.material.ExperimentalMaterialApi"
    kotlinOptions.freeCompilerArgs += "-Xopt-in=androidx.compose.foundation.ExperimentalFoundationApi"
    kotlinOptions.freeCompilerArgs += "-Xopt-in=androidx.compose.ui.ExperimentalComposeUiApi"
    kotlinOptions.freeCompilerArgs += "-Xopt-in=androidx.compose.animation.ExperimentalAnimationApi"
    kotlinOptions.freeCompilerArgs += "-Xopt-in=androidx.compose.animation.graphics.ExperimentalAnimationGraphicsApi"
    kotlinOptions.freeCompilerArgs += "-Xopt-in=kotlinx.serialization.ExperimentalSerializationApi"
    kotlinOptions.freeCompilerArgs += "-Xopt-in=com.google.accompanist.navigation.material.ExperimentalMaterialNavigationApi"
}

¿Ha sido útil esta solución?