Flutter – Panel de expansión

Cuando queremos expandir y contraer cosas, podemos hacerlo con la ayuda de un panel de expansión. Esta lista de paneles de expansión se usa principalmente en las aplicaciones y proporciona funciones adicionales a la aplicación. Podemos crear una lista de elementos secundarios y envolverla con una lista de paneles de expansión. También podemos crear más de un panel de expansión en nuestra aplicación. Podemos controlar si el panel está abierto o no mediante la propiedad isExpanded. 

Siga los pasos a continuación para implementar el Panel de expansión en Flutter:

Constructor de ExpansionPanel:

ExpansionPanel(
{required ExpansionPanelHeaderBuilder headerBuilder,
required Widget body,
bool isExpanded: false,
bool canTapOnHeader: false,
Color? backgroundColor}
)

Propiedades:

  • headerBuilder : es el generador de widgets para construir el panel de expansión.
  • body : El cuerpo del panel de expansión.
  • isExpanded : Es el valor booleano para verificar si el panel de expansión está expandido o no.
  • canTapOnHeader : es un valor booleano que puede expandir el panel si se da como verdadero.
  • backgroundColor : el color de fondo del panel de expansión.

Ejemplo:

El archivo homePage.dart

Dart

import 'package:flutter/material.dart';
import 'package:sports_app/items.dart';
import 'package:velocity_x/velocity_x.dart';
  
class Homepage extends StatefulWidget {
  @override
  _HomepageState createState() => _HomepageState();
}
  
class _HomepageState extends State<Homepage> {
  bool active = false;
  String exTitle = "Sport Categories";
  
  @override
  Widget build(BuildContext context) {
    return Column(
      children: [
        ExpansionPanelList(
          expansionCallback: (panelIndex, isExpanded) {
            active = !active;
              if(exTitle=="Sport Categories")
                exTitle="Contract";
              else
                exTitle="Sport Categories";
            setState(() {
                
            });
          },
          children: <ExpansionPanel>[
            ExpansionPanel(
                headerBuilder: (context, isExpanded) {
                  return exTitle.text.gray500.make().centered();
                },
                body: Wrap(
                  alignment: WrapAlignment.spaceBetween,
                  spacing: 7,
                  children: [
                    ElevatedButton(
                      style: ButtonStyle(
                        backgroundColor:
                            MaterialStateProperty.resolveWith<Color>(
                          (Set<MaterialState> states) {
                            if (states.contains(MaterialState.pressed))
                              return Colors.red;
                              
                            // Use the component's default.
                            return Colors.black; 
                          },
                        ),
                      ),
                      onPressed: () => null,
                      child: "All".text.make(),
                    ),
                    ElevatedButton(
                      onPressed: null,
                      child: "Basketball".text.black.make(),
                    ),
                    ElevatedButton(
                        onPressed: null, child: "Football".text.black.make()),
                    ElevatedButton(
                        onPressed: null, child: "Tennis".text.black.make()),
                    ElevatedButton(
                        onPressed: null, child: "Fencing".text.black.make()),
                    ElevatedButton(
                        onPressed: null, child: "Swimming".text.black.make()),
                    ElevatedButton(
                        onPressed: null, child: "Hockey".text.black.make()),
                    ElevatedButton(
                        onPressed: null, child: "Karate".text.black.make()),
                  ],
                ),
                isExpanded: active,
                canTapOnHeader: true
                )
          ],
        ),
        for (int i = 0; i < items.length; i++) items[i]
      ],
    );
  }
}

Explicación:

  • El panel de expansión se crea utilizando el generador de encabezados para crear un encabezado del panel de expansión.
  • El panel de expansión está envuelto con una lista de paneles de expansión para crear una lista de paneles de expansión.
  • En el Panel de expansión, el cuerpo está hecho con algunos botones elevados .
  • La propiedad isExpaned se usa para administrar el panel de expansión.
  • canTapOnHeader se establece en True para que el Panel de expansión se pueda abrir tocando el encabezado.

Producción:

  • Si tocamos el botón desplegable o el encabezado , el Panel de expansión se abrirá como se muestra:

Publicación traducida automáticamente

Artículo escrito por singh_teekam y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *