¿Cómo configuro la imagen de fondo en Flutter?

5 minutos de lectura

Avatar de usuario de Arun Kumar
Arun Kumar

Estoy tratando de establecer una imagen de fondo para la página de inicio. Estoy obteniendo el lugar de la imagen desde el inicio de la pantalla y llenando el ancho pero no el alto. ¿Me estoy perdiendo algo en mi código? ¿Existen estándares de imagen para flutter? ¿Las imágenes se escalan según la resolución de pantalla de cada teléfono?

class BaseLayout extends StatelessWidget{
  @override
  Widget build(BuildContext context){
    return  Scaffold(
      body:  Container(
        child:  Column(
          mainAxisAlignment: MainAxisAlignment.start,
          children: [
             Image.asset("assets/images/bulb.jpg") 
          ]
        )
      )
    );
  }
}

  • ¿Cuál debe ser el tamaño de la imagen? ancho * alto?

    – ArgaPK

    25 de septiembre de 2018 a las 13:28

  • ¿Alguien puede dar un ejemplo con una llamada de imagen de red?

    – El chico multimillonario

    12 de febrero de 2019 a las 21:22

  • @TheDeadGuy Image.network(‘ejemplo.com/ruta/a/imagen.jpg’)?

    – Desarrollador SacWeb

    23 de abril de 2019 a las 21:26

  • solución de pago aquí en este enlace stackoverflow.com/a/62245570/9955978

    – Shubham Sharma

    19 de junio de 2020 a las 9:31

  • 8 ejemplos de imágenes de fondo de Flutter

    – Vijay Ram

    5 de febrero de 2021 a las 9:54

Avatar de usuario de Collin Jackson
collin jackson

No estoy seguro de entender tu pregunta, pero si quieres que la imagen ocupe toda la pantalla, puedes usar un DecorationImage con un ataque de BoxFit.cover.

class BaseLayout extends StatelessWidget{
  @override
  Widget build(BuildContext context){
    return Scaffold(
      body: Container(
        decoration: BoxDecoration(
          image: DecorationImage(
            image: AssetImage("assets/images/bulb.jpg"),
            fit: BoxFit.cover,
          ),
        ),
        child: null /* add child content here */,
      ),
    );
  }
}

Para su segunda pregunta, aquí hay un enlace a la documentación sobre cómo incrustar imágenes de activos dependientes de la resolución en su aplicación.

  • Esto funciona siempre y cuando no tengas ningún hijo. Si agrega un elemento secundario, el tamaño del Contenedor se reduce al tamaño de su elemento secundario. ¿Sabes cómo hacer que el contenedor llene toda la pantalla sin importar el tamaño de su niño?

    – HyLian

    9 de marzo de 2018 a las 14:35

  • @ColinJackson, ¿cuál debería ser el tamaño de la imagen? ancho * alto?

    – ArgaPK

    25 de septiembre de 2018 a las 13:28

  • @HyLian establece la propiedad de restricciones del contenedor, constraints: BoxConstraints.expand()

    –Rustem Kakimov

    18 de enero de 2020 a las 2:14


  • @HyLian agregar width: double.infinity al Contenedor con la imagen.

    – jkoech

    7 abr 2020 a las 19:32

  • ¿Cómo repetir la imagen del tipo de patrón en el fondo del contenedor en flutter?

    – Kamlesh

    11 oct 2020 a las 13:05

Si usas un Container como el cuerpo del Scaffoldsu tamaño será en consecuencia el tamaño de su hijo y, por lo general, eso no es lo que desea cuando intenta agregar una imagen de fondo a su aplicación.

Mirando esta otra pregunta, @ collin-jackson también sugería usar Stack en lugar de Container como el cuerpo del Scaffold y definitivamente hace lo que quieres lograr.

Así es como se ve mi código

@override
Widget build(BuildContext context) {
  return new Scaffold(
    body: new Stack(
      children: <Widget>[
        new Container(
          decoration: new BoxDecoration(
            image: new DecorationImage(image: new AssetImage("images/background.jpg"), fit: BoxFit.cover,),
          ),
        ),
        new Center(
          child: new Text("Hello background"),
        )
      ],
    )
  );
}

  • ¿Cuál debe ser el tamaño de la imagen? ancho * alto?

    – ArgaPK

    25 de septiembre de 2018 a las 13:28

  • Al abrir el teclado, se cambia el tamaño de la imagen. ¿Qué se puede hacer para eso?

    -Michael Hathi

    18 de septiembre de 2019 a las 5:09

  • @MichaelHathi stackoverflow.com/questions/52572850/…

    – dilshan

    26 de febrero de 2021 a las 7:55

Avatar de usuario de CopsOnRoad
policíasencarretera

Captura de pantalla:

ingrese la descripción de la imagen aquí


Código:

@override
Widget build(BuildContext context) {
  return DecoratedBox(
    decoration: BoxDecoration(
      image: DecorationImage(image: AssetImage("your_asset"), fit: BoxFit.cover),
    ),
    child: Center(child: FlutterLogo(size: 300)),
  );
}

  • Coloque un cuadro de texto y abra el teclado, luego la imagen se moverá hacia arriba, lo cual no es una buena solución. Cualquier otra sugerencia, por favor compartir.

    – Kamlesh

    28 de febrero de 2021 a las 17:26

Puedes usar Stack para hacer que la imagen se estire a pantalla completa.

Stack(
        children: <Widget>
        [
          Positioned.fill(  //
            child: Image(
              image: AssetImage('assets/placeholder.png'),
              fit : BoxFit.fill,
           ),
          ), 
          ...... // other children widgets of Stack
          ..........
          .............
         ]
 );

Nota: Opcionalmente, si está utilizando un Scaffoldpuedes poner el Stack dentro de Scaffold con o sin AppBar de acuerdo a sus necesidades.

Pude aplicar un fondo debajo del Scaffold (e incluso es AppBar) poniendo el Scaffold debajo de Stack y estableciendo un Container en la primera “capa” con la imagen de fondo establecida y fit: BoxFit.cover propiedad.

Ambos Scaffold y AppBar tiene que tener el backgroundColor establecer como Color.transparent y el elevation de AppBar tiene que ser 0 (cero).

¡Voila! ¡Ahora tiene un bonito fondo debajo de todo Scaffold y AppBar! 🙂

import 'package:flutter/material.dart';
import 'package:mynamespace/ui/shared/colors.dart';
import 'package:mynamespace/ui/shared/textstyle.dart';
import 'package:mynamespace/ui/shared/ui_helpers.dart';
import 'package:mynamespace/ui/widgets/custom_text_form_field_widget.dart';

class SignUpView extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Stack( // <-- STACK AS THE SCAFFOLD PARENT
      children: [
        Container(
          decoration: BoxDecoration(
            image: DecorationImage(
              image: AssetImage("assets/images/bg.png"), // <-- BACKGROUND IMAGE
              fit: BoxFit.cover,
            ),
          ),
        ),
        Scaffold(
          backgroundColor: Colors.transparent, // <-- SCAFFOLD WITH TRANSPARENT BG
          appBar: AppBar(
            title: Text('NEW USER'),
            backgroundColor: Colors.transparent, // <-- APPBAR WITH TRANSPARENT BG
            elevation: 0, // <-- ELEVATION ZEROED
          ),
          body: Padding(
            padding: EdgeInsets.all(spaceXS),
            child: Column(
              children: [
                CustomTextFormFieldWidget(labelText: 'Email', hintText: 'Type your Email'),
                UIHelper.verticalSpaceSM,
                SizedBox(
                  width: double.maxFinite,
                  child: RaisedButton(
                    color: regularCyan,
                    child: Text('Finish Registration', style: TextStyle(color: white)),
                    onPressed: () => {},
                  ),
                ),
              ],
            ),
          ),
        ),
      ],
    );
  }
}

Avatar de usuario de Jitesh Mohite
Jitesh mohita

Podemos usar Container y marcar su altura como infinito

body: Container(
      height: double.infinity,
      width: double.infinity,
      child: FittedBox(
        fit: BoxFit.cover,
        child: Image.network(
          'https://cdn.pixabay.com/photo/2016/10/02/22/17/red-t-shirt-1710578_1280.jpg',
        ),
      ),
    ));

Producción:

ingrese la descripción de la imagen aquí

Avatar de usuario de Boken
Boken

body: Container(
    decoration: BoxDecoration(
      image: DecorationImage(
        image: AssetImage('images/background.png'),fit:BoxFit.cover
      )
    ),
);

  • La respuesta proporcionada se marcó para su revisión como Publicación de baja calidad. Aquí hay algunas pautas para ¿Cómo escribo una buena respuesta? Esta respuesta proporcionada podría beneficiarse de una explicación. Las respuestas de solo código no se consideran respuestas “buenas”.

    –Trenton McKinney

    8 de agosto de 2020 a las 6:14

¿Ha sido útil esta solución?