Middle
O que é InheritedWidget e como usá-lo no Flutter?
sobes.tech IA
Resposta da IA
InheritedWidget é um tipo especial de widget no Flutter que permite distribuir informações de forma eficiente para baixo na árvore de widgets. É utilizado para fornecer dados e serviços às subárvores de widgets sem necessidade de passá-los explicitamente através dos construtores de cada widget intermédio.
Características principais do InheritedWidget:
- Distribuição eficiente de dados: Quando o InheritedWidget muda, o Flutter reconstrói automaticamente apenas os widgets na subárvore que dependem dele.
- Acesso fácil aos dados: Os widgets filhos podem acessar os dados do InheritedWidget usando o método estático
of(). - Gestão de dependências: O método
updateShouldNotifypermite controlar quando os widgets dependentes devem ser reconstruídos.
Como usar o InheritedWidget:
-
Criar uma classe que herde de
InheritedWidget:class MyInheritedWidget extends InheritedWidget { const MyInheritedWidget({ Key? key, required this.data, required Widget child, }) : super(key: key, child: child); final String data; // Dados que serão distribuídos // Método para obter a instância do InheritedWidget static MyInheritedWidget of(BuildContext context) { final MyInheritedWidget? result = context.dependOnInheritedWidgetOfExactType<MyInheritedWidget>(); assert(result != null, 'Nenhum MyInheritedWidget encontrado no contexto'); return result!; } // Define se os widgets dependentes devem ser notificados sobre mudanças @override bool updateShouldNotify(MyInheritedWidget oldWidget) { return data != oldWidget.data; // Notifica se os dados mudaram } } -
Inserir o
InheritedWidgetna árvore de widgets:class MyApp extends StatelessWidget { const MyApp({super.key}); @override Widget build(BuildContext context) { return MyInheritedWidget( // Envolver a subárvore de widgets data: 'Olá do InheritedWidget', child: MaterialApp( title: 'Demo InheritedWidget', home: Scaffold( appBar: AppBar( title: const Text('Demo InheritedWidget'), ), body: const Center( child: MyDependentWidget(), // Widget que usará os dados ), ), ), ); } } -
Acessar os dados de um widget filho:
class MyDependentWidget extends StatelessWidget { const MyDependentWidget({super.key}); @override Widget build(BuildContext context) { // Acessa os dados usando o método of() final String receivedData = MyInheritedWidget.of(context).data; return Text( receivedData, style: Theme.of(context).textTheme.headlineMedium, ); } }
O InheritedWidget é a base para muitas soluções de gerenciamento de estado no Flutter, como Provider, Bloc. Ele fornece uma maneira eficiente e declarativa de trocar dados na árvore de widgets.