Flutter - Introducción a los widgets

Como aprendimos en el capítulo anterior, los widgets lo son todo en el marco de Flutter. Ya hemos aprendido a crear nuevos widgets en capítulos anteriores.

En este capítulo, entendamos el concepto real detrás de la creación de los widgets y los diferentes tipos de widgets disponibles en el marco de Flutter .

Revisemos el widget MyHomePage de la aplicación Hello World . El código para este propósito es el que se indica a continuación:

class MyHomePage extends StatelessWidget { 
   MyHomePage({Key key, this.title}) : super(key: key); 
   
   final String title; 
   @override 
   Widget build(BuildContext context) {
      return Scaffold( 
         appBar: AppBar(title: Text(this.title), ), 
         body: Center(child: Text( 'Hello World',)),
      );
   }
}

Aquí, hemos creado un nuevo widget ampliando StatelessWidget .

Tenga en cuenta que StatelessWidget solo requiere que se implemente una única compilación de método en su clase derivada. El método de construcción obtiene el entorno de contexto necesario para construir los widgets a través del parámetro BuildContext y devuelve el widget que construye.

En el código, hemos usado title como uno de los argumentos del constructor y también usamos Key como otro argumento. El título se usa para mostrar el título y la clave se usa para identificar el widget en el entorno de construcción.

Aquí, el método de construcción llama al método de construcción de Scaffold , que a su vez llama al método de construcción de AppBar y Center para construir su interfaz de usuario.

Finalmente, el método de construcción Center llama al método de construcción Text .

Para una mejor comprensión, a continuación se da la representación visual del mismo:

Visualización de compilación de widgets

En Flutter , los widgets se pueden agrupar en varias categorías según sus características, como se enumeran a continuación:

  • Widgets específicos de la plataforma
  • Diseño de widgets
  • Widgets de mantenimiento de estado
  • Widgets básicos / independientes de la plataforma

Analicemos cada uno de ellos en detalle ahora.

Widgets específicos de la plataforma

Flutter tiene widgets específicos para una plataforma en particular: Android o iOS.

Los widgets específicos de Android están diseñados de acuerdo con las pautas de diseño de materiales del sistema operativo Android. Los widgets específicos de Android se denominan widgets de material .

Los widgets específicos de iOS están diseñados de acuerdo con las pautas de interfaz humana de Apple y se denominan widgets de Cupertino .

Algunos de los widgets de material más utilizados son los siguientes:

  • Scaffold
  • AppBar
  • BottomNavigationBar
  • TabBar
  • TabBarView
  • ListTile
  • RaisedButton
  • FloatingActionButton
  • FlatButton
  • IconButton
  • DropdownButton
  • PopupMenuButton
  • ButtonBar
  • TextField
  • Checkbox
  • Radio
  • Switch
  • Slider
  • Selectores de fecha y hora
  • SimpleDialog
  • AlertDialog

Algunos de los widgets de Cupertino más utilizados son los siguientes:

  • CupertinoButton
  • CupertinoPicker
  • CupertinoDatePicker
  • CupertinoTimerPicker
  • CupertinoNavigationBar
  • CupertinoTabBar
  • CupertinoTabScaffold
  • CupertinoTabView
  • CupertinoTextField
  • CupertinoDialog
  • CupertinoDialogAction
  • CupertinoFullscreenDialogTransition
  • CupertinoPageScaffold
  • CupertinoPageTransition
  • CupertinoActionSheet
  • CupertinoActivityIndicator
  • CupertinoAlertDialog
  • CupertinoPopupSurface
  • CupertinoSlider

Diseño de widgets

En Flutter, se puede crear un widget componiendo uno o más widgets. Para componer varios widgets en un solo widget, Flutter proporciona una gran cantidad de widgets con función de diseño. Por ejemplo, el widget secundario se puede centrar mediante el widget Center .

Algunos de los widgets de diseño más populares son los siguientes:

  • Container- Una caja rectangular decorada con widgets BoxDecoration con fondo, borde y sombra.

  • Center - Centra su widget hijo.

  • Row - Organizar a sus hijos en dirección horizontal.

  • Column - Organizar a sus hijos en dirección vertical.

  • Stack - Colocar uno encima del otro.

Verificaremos los widgets de diseño en detalle en el próximo capítulo Introducción a los widgets de diseño .

Widgets de mantenimiento de estado

En Flutter, todos los widgets se derivan de StatelessWidget o StatefulWidget .

El widget derivado de StatelessWidget no tiene información de estado, pero puede contener un widget derivado de StatefulWidget . La naturaleza dinámica de la aplicación es a través del comportamiento interactivo de los widgets y el estado cambia durante la interacción. Por ejemplo, al tocar un botón de contador aumentará / disminuirá el estado interno del contador en uno y la naturaleza reactiva del widget Flutter volverá a renderizar automáticamente el widget utilizando nueva información de estado.

Aprenderemos el concepto de widgets StatefulWidget en detalle en el próximo capítulo de administración de estado .

Widgets básicos / independientes de la plataforma

Flutter proporciona una gran cantidad de widgets básicos para crear una interfaz de usuario simple y compleja de manera independiente de la plataforma. Veamos algunos de los widgets básicos de este capítulo.

Text

El widget de texto se utiliza para mostrar un trozo de cuerda. El estilo de la cadena se puede establecer mediante la propiedad de estilo y la clase TextStyle . El código de muestra para este propósito es el siguiente:

Text('Hello World!', style: TextStyle(fontWeight: FontWeight.bold))

El widget de texto tiene un constructor especial, Text.rich , que acepta al hijo de tipo TextSpan para especificar la cadena con un estilo diferente. El widget TextSpan es de naturaleza recursiva y acepta TextSpan como sus hijos. El código de muestra para este propósito es el siguiente:

Text.rich( 
   TextSpan( 
      children: <TextSpan>[ 
         TextSpan(text: "Hello ", style:  
         TextStyle(fontStyle: FontStyle.italic)),  
         TextSpan(text: "World", style: 
         TextStyle(fontWeight: FontWeight.bold)),  
      ], 
   ), 
)

Las propiedades más importantes del widget de texto son las siguientes:

  • maxLines, int - Número máximo de líneas para mostrar

  • overflow, TextOverFlow- Especifique cómo se maneja el desbordamiento visual usando la clase TextOverFlow

  • style, TextStyle- Especifique el estilo de la cadena usando la clase TextStyle

  • textAlign, TextAlign- Alineación del texto como derecha, izquierda, justificar, etc., usando la clase TextAlign

  • textDirection, TextDirection - Dirección del texto a fluir, ya sea de izquierda a derecha o de derecha a izquierda

Image

El widget de imagen se utiliza para mostrar una imagen en la aplicación. El widget de imagen proporciona diferentes constructores para cargar imágenes de múltiples fuentes y son los siguientes:

  • Image- Cargador de imágenes genérico usando ImageProvider

  • Image.asset - Cargar imagen de los activos del proyecto flutter

  • Image.file - Cargar imagen de la carpeta del sistema

  • Image.memory - Cargar imagen de la memoria

  • Image.Network - Cargar imagen de la red

La opción más fácil para cargar y mostrar una imagen en Flutter es incluir la imagen como activos de la aplicación y cargarla en el widget a pedido.

  • Cree una carpeta, activos en la carpeta del proyecto y coloque las imágenes necesarias.

  • Especifique los activos en pubspec.yaml como se muestra a continuación:

flutter: 
   assets: 
      - assets/smiley.png
  • Ahora, cargue y muestre la imagen en la aplicación.

Image.asset('assets/smiley.png')
  • El código fuente completo del widget MyHomePage de la aplicación hello world y el resultado se muestra a continuación -.

class MyHomePage extends StatelessWidget {
   MyHomePage({Key key, this.title}) : super(key: key); 
   final String title; 

   @override 
   Widget build(BuildContext context) {
      return Scaffold( 
         appBar: AppBar( title: Text(this.title), ), 
         body: Center( child: Image.asset("assets/smiley.png")),
      ); 
   }
}

La imagen cargada es como se muestra a continuación:

Las propiedades más importantes del widget de imagen son las siguientes:

  • image, ImageProvider - Imagen real para cargar

  • width, double - Ancho de la imagen

  • height, double - Alto de la imagen

  • alignment, AlignmentGeometry - Cómo alinear la imagen dentro de sus límites

Icon

El widget de icono se utiliza para mostrar un glifo de una fuente descrita en la clase IconData . El código para cargar un icono de correo electrónico simple es el siguiente:

Icon(Icons.email)

El código fuente completo para aplicarlo en la aplicación hello world es el siguiente:

class MyHomePage extends StatelessWidget { 
   MyHomePage({Key key, this.title}) : super(key: key); 
   final String title; 

   @override 
   Widget build(BuildContext context) {
      return Scaffold(
         appBar: AppBar(title: Text(this.title),),
         body: Center( child: Icon(Icons.email)),
      );
   }
}

El icono cargado es como se muestra a continuación: