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