Flutter: botón indicador de progreso de carga

En este artículo, aprenderemos sobre el botón indicador de progreso de carga en Flutter.

¿Qué es el botón indicador de progreso de carga?

El indicador de progreso informa a los clientes y usuarios que utilizan la aplicación sobre el proceso en curso, como cargar una aplicación , enviar un formulario o cargar un documento en línea. A medida que la carga se completa con éxito, obtenemos un estado de éxito.

Implementemos el botón indicador de progreso de carga: 

Implementación:

Siga los siguientes pasos para implementar el botón indicador de progreso de carga en Flutter:

Paso 1: creamos un nuevo proyecto y luego creamos un widget con estado. Habíamos creado un widget con estado porque nuestra aplicación no es estática y cada vez que construimos o ejecutamos la aplicación tendrá lugar una nueva actividad.

Dart

import 'package:flutter/material.dart';
  
void main() {
  runApp(const MyApp());
}
  
class MyApp extends StatelessWidget {
  const MyApp({Key? key}) : super(key: key);
  
  // This widget is the root of your application.
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      theme: ThemeData(
        primarySwatch: Colors.green,
      ),
      home: const MyHomePage(),
    );
  }
}
  
class MyHomePage extends StatefulWidget {
  const MyHomePage({
    Key? key,
  }) : super(key: key);
  @override
  State<MyHomePage> createState() => _MyHomePageState();
}

Paso 2: En este paso, hemos creado una Appbar con color de fondo verde y texto de color blanco. Entonces habíamos inicializado una variable del tipo bool .

Dart

class _MyHomePageState extends State<MyHomePage> {
  
  bool isLoading = false;
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        backgroundColor: Colors.green,
        title: const Text('GeeksforGeeks',style: TextStyle(color: Colors.white),),
        centerTitle: true,
      ),

Paso 3 : en el cuerpo de nuestra aplicación, habíamos creado un botón elevado . El botón elevado está dentro del contenedor y le hemos dado padding , width y height a nuestro botón elevado. También le habíamos dado la propiedad de color a nuestro botón. Ahora, al hacer clic en este botón, veremos que el valor de isLoading se vuelve verdadero. En el texto del botón «Cargando…» aparece un indicador de progreso circular y con la ayuda de future.delayed , la carga se detendrá después de 3 segundos y luego el valor de isLoading se cambiará a falso. nosotros habíamos usadoalineación del eje principal al centro, para mantener nuestro botón de carga en el centro. A medida que la carga se completa en 3 segundos, veremos el texto «Enviar» en la pantalla.

Dart

body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: [
            Container(
              padding: const EdgeInsets.only(left: 10, right: 10),
              width: MediaQuery.of(context).size.width,
              height: 60,
              child: ElevatedButton(
                style: ElevatedButton.styleFrom(
                primary: Colors.green
                ),
                onPressed: () {
                setState(() {
                  isLoading = true;
                });
                Future.delayed(const Duration(seconds: 3), (){
                    setState(() {
                  isLoading = false;
                });
                }
                );
              }, child:  isLoading? Row(
                mainAxisAlignment: MainAxisAlignment.center,
                    
                // ignore: prefer_const_literals_to_create_immutables
                children: [
                 const Text('Loading...', style: TextStyle(fontSize: 20),),
                 const SizedBox(width: 10,),
                  const CircularProgressIndicator(color: Colors.white,),
                ],
              ) : const Text('Submit'),
                
              )
              )
          ],
        ),
      ),
    );
  }
}

Código fuente completo:

Dart

import 'package:flutter/material.dart';
  
void main() {
  runApp(const MyApp());
}
  
class MyApp extends StatelessWidget {
  const MyApp({Key? key}) : super(key: key);
  
  // This widget is the root of your application.
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      theme: ThemeData(
        primarySwatch: Colors.green,
      ),
      home: const MyHomePage(),
    );
  }
}
  
class MyHomePage extends StatefulWidget {
  const MyHomePage({
    Key? key,
  }) : super(key: key);
  @override
  State<MyHomePage> createState() => _MyHomePageState();
}
  
class _MyHomePageState extends State<MyHomePage> {
  
  bool isLoading = false;
  @override
  Widget build(BuildContext context) {
    return Scaffold(
  
      // created an Appbar with GeeksforGeeks written on it.
      appBar: AppBar(
        backgroundColor: Colors.green,
        title: const Text('GeeksforGeeks',style: TextStyle(color: Colors.white),),
        centerTitle: true,
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: [
            Container(
              padding: const EdgeInsets.only(left: 10, right: 10),
              width: MediaQuery.of(context).size.width,
              height: 60,
  
              // elevated button created and given style
              // and decoration properties
              child: ElevatedButton(
                style: ElevatedButton.styleFrom(
                primary: Colors.green
                ),
                onPressed: () {
                setState(() {
                  isLoading = true;
                });
  
                // we had used future delayed to stop loading after
                // 3 seconds and show text "submit" on the screen.
                Future.delayed(const Duration(seconds: 3), (){
                    setState(() {
                  isLoading = false;
                });
                }
                );
              }, child:  isLoading? Row(
                mainAxisAlignment: MainAxisAlignment.center,
                  
                // as elevated button gets clicked we will see text"Loading..."
                // on the screen with circular progress indicator white in color.
                //as loading gets stopped "Submit" will be displayed
                children: const [
                  Text('Loading...', style: TextStyle(fontSize: 20),),
                  SizedBox(width: 10,),
                   CircularProgressIndicator(color: Colors.white,),
                ],
              ) : const Text('Submit'),
                
              )
              )
          ],
        ),
      ),
    );
  }
}

Producción:

Publicación traducida automáticamente

Artículo escrito por ayurishchandnacs18 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 *