O que são GlobalKeys no Flutter e como são usadas?
sobes.tech IA
Resposta da IA
GlobalKey é uma chave única que identifica um widget em toda a hierarquia da aplicação.
Usado para:
-
Acesso ao estado do widget: Permite aceder ao estado de um StatefulWidget de qualquer lugar na árvore de widgets.
GlobalKey<_MyWidgetState> myWidgetKey = GlobalKey(); // ... class MyWidget extends StatefulWidget { MyWidget({Key? key}) : super(key: key); @override _MyWidgetState createState() => _MyWidgetState(); } class _MyWidgetState extends State<MyWidget> { String _text = "Initial"; void updateText(String newText) { setState(() { _text = newText; }); } @override Widget build(BuildContext context) { return Text(_text); } } // ... noutro lugar: myWidgetKey.currentState?.updateText("Updated"); -
Guardar o estado do widget ao mover a sua posição na árvore: Útil quando precisa mover um widget para outra parte da UI, mantendo o seu estado.
GlobalKey keyForMovableWidget = GlobalKey(); // ... Widget movableWidget = Container( key: keyForMovableWidget, color: Colors.blue, width: 100, height: 100, ); // Ao mover o movableWidget para outro lugar na árvore, // o seu estado será preservado graças ao GlobalKey. -
Chamar métodos do widget: Permite chamar métodos públicos do widget de fora.
GlobalKey<ScaffoldState> scaffoldKey = GlobalKey<ScaffoldState>(); // ... Scaffold( key: scaffoldKey, // ... ); // ... noutro lugar: scaffoldKey.currentState?.openDrawer();
É importante lembrar que o uso frequente de GlobalKey pode complicar a árvore de widgets e dificultar a depuração. Na maioria dos casos, é preferível usar outros mecanismos de gestão de estado, como Provider, Riverpod ou Bloc. O GlobalKey deve ser usado apenas quando outras abordagens não forem aplicáveis.