Flutter – método dispose() con ejemplo

Dispose es un método que se activa cada vez que el objeto creado a partir del widget con estado se elimina de forma permanente del árbol de widgets. Por lo general, se anula y se llama solo cuando se destruye el objeto de estado. Dispose libera la memoria asignada a las variables existentes del estado. Solo se usa en un widget con estado porque no puede cambiar el estado de un widget sin estado.

Sintaxis:

void dispose(){
    //...
    super.dispose();
    //...
}

Si crea objetos y no libera la memoria utilizada por ellos antes de su destrucción, habrá posibilidades de que su aplicación sufra una fuga de memoria en la tienda de aplicaciones o en la tienda de juegos. Es el punto de salida del Stateful Widget. La ejecución del método de eliminación se realiza al final cuando el objeto de estado se ha construido suficientes veces y ahora no es necesario que se vuelva a construir. Es la última etapa del ciclo de vida de un widget, después de esto, un objeto de estado se destruye por completo. Las situaciones en las que necesita llamar a su método dispose() podrían ser desactivar las notificaciones, cancelar la suscripción, desactivar las animaciones, etc.

Implementación:

Dart

// ignore_for_file: avoid_unnecessary_containers
 
import 'package:flutter/material.dart';
 
void main() {
  runApp(const MyApp());
}
 
class MyApp extends StatefulWidget {
  const MyApp({Key? key}) : super(key: key);
 
  @override
  State<MyApp> createState() => _MyAppState();
}
 
class _MyAppState extends State<MyApp> {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
        debugShowCheckedModeBanner: false,
        home: Scaffold(
            appBar: AppBar(
              title: const Text('GeeksforGeeks'),
              backgroundColor: Colors.green,
            ),
            body: const FirstScreen()));
  }
}
 
class FirstScreen extends StatelessWidget {
  const FirstScreen({Key? key}) : super(key: key);
 
  @override
  Widget build(BuildContext context) {
    // Avoide unnecessary constainers
    return Container(
        child: Center(
            child: ElevatedButton(
      onPressed: () => Navigator.of(context)
          .push(MaterialPageRoute(builder: (context) => const NewScreen())),
      child: const Text('Move to the next screen'),
    )
 
            // RaidedButton is deprecated and would be removed in the coming versions.
            // Use ElevatedButton instead.
 
            // child: RaisedButton(
            //   color: Colors.green,
            //   onPressed: () => Navigator.of(context)
            //       .push(MaterialPageRoute(builder: (context) => const NewScreen())),
            //   child: const Text('Move to next screen'),
            // ),
            ));
  }
}
 
class NewScreen extends StatefulWidget {
  const NewScreen({Key? key}) : super(key: key);
 
  @override
  State<NewScreen> createState() => _NewScreenState();
}
 
class _NewScreenState extends State<NewScreen> {
  TextEditingController textEditingController = TextEditingController();
 
  @override
  void dispose() {
    textEditingController.dispose();
    // ignore: avoid_print
    print('Dispose used');
    super.dispose();
  }
 
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: const Text('New Screen'),
        backgroundColor: Colors.green,
      ),
      // Avoide unnsessary constainers
      body: Container(
          child: const Center(
        child: Padding(
            padding: EdgeInsets.symmetric(horizontal: 20.0),
            child: Text('This is the new screen')),
      )),
    );
  }
}

Producción:

En el ejemplo anterior, el método dispose se llama solo y solo una vez que salimos de la nueva pantalla.
 

 

Publicación traducida automáticamente

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