Middle
¿Qué es InheritedWidget y cómo se usa en Flutter?
sobes.tech AI
Respuesta de la IA
InheritedWidget es un tipo especial de widget en Flutter que permite distribuir información de manera eficiente hacia abajo en el árbol de widgets. Se utiliza para proporcionar datos y servicios a las subárboles de widgets sin necesidad de pasarlos explícitamente a través de los constructores de cada widget intermedio.
Características clave de InheritedWidget:
- Distribución eficiente de datos: Cuando cambia InheritedWidget, Flutter reconstruye automáticamente solo los widgets en el subárbol que dependen de él.
- Acceso sencillo a los datos: Los widgets hijos pueden acceder a los datos de InheritedWidget mediante el método estático
of(). - Gestión de dependencias: El método
updateShouldNotifypermite controlar cuándo los widgets dependientes deben ser reconstruidos.
Cómo usar InheritedWidget:
-
Crear una clase que herede de
InheritedWidget:class MyInheritedWidget extends InheritedWidget { const MyInheritedWidget({ Key? key, required this.data, required Widget child, }) : super(key: key, child: child); final String data; // Datos que se distribuirán // Método para obtener la instancia de InheritedWidget static MyInheritedWidget of(BuildContext context) { final MyInheritedWidget? result = context.dependOnInheritedWidgetOfExactType<MyInheritedWidget>(); assert(result != null, 'No se encontró MyInheritedWidget en el contexto'); return result!; } // Define si se deben notificar los cambios a los widgets dependientes @override bool updateShouldNotify(MyInheritedWidget oldWidget) { return data != oldWidget.data; // Notifica si los datos cambian } } -
Insertar
InheritedWidgeten el árbol de widgets:class MyApp extends StatelessWidget { const MyApp({super.key}); @override Widget build(BuildContext context) { return MyInheritedWidget( // Envuelve el subárbol de widgets data: 'Hola desde InheritedWidget', child: MaterialApp( title: 'Demo InheritedWidget', home: Scaffold( appBar: AppBar( title: const Text('Demo InheritedWidget'), ), body: const Center( child: MyDependentWidget(), // Widget que usará los datos ), ), ), ); } } -
Acceder a los datos desde un widget hijo:
class MyDependentWidget extends StatelessWidget { const MyDependentWidget({super.key}); @override Widget build(BuildContext context) { // Accede a los datos usando el método of() final String receivedData = MyInheritedWidget.of(context).data; return Text( receivedData, style: Theme.of(context).textTheme.headlineMedium, ); } }
InheritedWidget es la base para muchas soluciones de gestión de estado en Flutter, como Provider, Bloc. Proporciona una forma eficiente y declarativa de intercambiar datos en el árbol de widgets.