Middle
Para que são utilizados os controladores de widgets no Flutter?
sobes.tech IA
Resposta da IA
Os controladores de widgets no Flutter são utilizados para gerir o estado ou comportamento de um widget específico de fora, bem como para interagir com ele.
Objetivos principais de uso:
- Gestão programática: Alterar as propriedades do widget (por exemplo, rolagem de listas, controlo do cursor num campo de texto) sem interação direta do utilizador.
- Obtenção de informações: Ler o estado atual do widget (por exemplo, posição de rolagem atual, texto inserido).
- Resposta a eventos: Executar ações relacionadas com o widget em resposta a eventos noutras partes da aplicação.
Exemplos de controladores populares:
TextEditingController: Gestão de campos de texto (TextField,TextFormField). Permite obter e definir texto, gerir a seleção e a posição do cursor.final myController = TextEditingController(); // Obter texto do campo final text = myController.text; // Definir texto no campo myController.text = 'Novo texto';ScrollController: Gestão de widgets roláveis (ListView,GridView,SingleChildScrollView). Permite rolar programaticamente, obter a posição de rolagem atual e ouvir eventos de rolagem.final myScrollController = ScrollController(); // Rolar para o início myScrollController.animateTo( 0, duration: Duration(milliseconds: 500), curve: Curves.easeOut, ); // Obter a posição de rolagem atual final position = myScrollController.position.pixels;PageController: Gestão de widgets de páginas (PageView). Permite mudar entre páginas, obter a página atual e ouvir eventos de mudança de página.final myPageController = PageController(); // Ir para a próxima página myPageController.nextPage( duration: Duration(milliseconds: 300), curve: Curves.easeIn, ); // Obter a página atual final currentPage = myPageController.page;
Os controladores geralmente são passados ao widget correspondente através do seu construtor. A gestão do ciclo de vida do controlador (criação e eliminação) deve ocorrer no widget que o utiliza, frequentemente no método initState para criar e dispose para eliminar.
class MyWidget extends StatefulWidget {
@override
_MyWidgetState createState() => _MyWidgetState();
}
class _MyWidgetState extends State<MyWidget> {
late final TextEditingController _textController;
@override
void initState() {
super.initState();
_textController = TextEditingController();
}
@override
void dispose() {
_textController.dispose(); // É importante libertar recursos
super.dispose();
}
@override
Widget build(BuildContext context) {
return TextField(
controller: _textController,
// ... outras propriedades do TextField
);
}
}
O uso de controladores permite separar claramente a lógica de gestão do widget da sua apresentação.