Flutter - Usando o widget TextField - II
Hoje veremos o widget TextField que permite a entrada do usuário em aplicações Flutter. |
|
O Flutter é um SDK de aplicativo móvel do Google que ajuda a criar aplicativos móveis modernos para iOS e Android usando uma única (quase) base de código.
Se você não conhece o Flutter veja o meu artigo : Flutter - Primeiros contatos e impressões
Continuando o artigo anterior...
Retornando o valor de um TextField
Como os TextFields não têm um ID como no Android, o texto não pode ser recuperado sob demanda e deve ser armazenado em uma variável ao alterar ou então usar um controlador. Temos assim duas abordagens para recuperar o valor de um TextField:
1 - A maneira mais fácil de fazer isso é usar o callback onChanged e armazenar o valor atual em uma variável simples. Aqui está o código de exemplo para isso:
String valor = ""; TextField( onChanged: (text) { valor = text;
print("TextField: $text");} ) |
Sempre que o texto mudar, o callback é invocado. Uma desvantagem dessa abordagem é que ela não funciona com widgets TextFormField.
2 - A segunda maneira de fazer isso é usar um TextEditingController. O controlador é anexado ao TextField e nos permite ouvir e controlar o texto do TextField também.
TextEditingController controller = TextEditingController();
TextField(
controller: controller,
)
|
Obs: No flutter, os controladores são um meio de dar controle ao widget pai sobre o estado do seu filho.
Vejamos esta abordagem com mais detalhes.
Usando um TextEditingController
Para retornar o valor informado em um TextField usando um TextEditingController temos que cumprir as seguintes etapas:
Então para criar e fornecer o TextEditingController para o TextField vamos criar um StatefulWidgtet para WidgetsBasicos da mesma forma que fizemos no artigo anterior.
class WidgetsBasicos extends StatefulWidget {
@override
_WidgetsBasicosState createState() => _WidgetsBasicosState();
}
class _WidgetsBasicosState extends State<WidgetsBasicos> {
final myController = TextEditingController();
@override
void dispose() {
// limpa o controller quando for liberado
myController.dispose();
super.dispose();
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Retorna o valor de TextField'),
),
body: _widgetTextField(),
floatingActionButton: FloatingActionButton(
// quando o usuário pressionar o botão
// exibe um alerta contendo o texto que
// foi informado no TextField
onPressed: () {
return showDialog(
context: context,
builder: (context) {
return AlertDialog(
// Retorna o texto que foi informado
// usando o TextEditingController.
content: Text(myController.text),
);
},
);
},
tooltip: 'Exibir o valor!',
child: Icon(Icons.text_fields),
),
);
}
|
Criamos um controlador TextEditingController e definimos o método dispose() para liberá-lo.
A seguir no widget Scaffold , na propriedade body criamos o método _widgetTextField onde vamos criar o TextField.
No botão floatingActionButton do Scaffold, no callback onPressed, definimos um AlertDialog para exibir o valor informado no TextField quando o botão for pressionado.
A seguir temos o código do método _widgetTextField:
Padding _widgetTextField() {
return Padding(
padding: const EdgeInsets.all(16.0),
child: TextField(
controller: myController,
),
);
}
|
O widget TextField esta envolvido por um Padding que incluir espaços e atribui o TextEditingController - myController - ao controller.
O resultado pode ser visto abaixo:
Em outro artigo veremos outros recursos do TextField.
Pegue o arquivo main.dart aqui: main_dart_RetornaValor.zip
Veja os
Destaques e novidades do SUPER DVD Visual Basic
(sempre atualizado) : clique e confira !
Quer migrar para o VB .NET ?
Quer aprender C# ??
Quer aprender os conceitos da Programação Orientada a objetos ? Quer aprender o gerar relatórios com o ReportViewer no VS 2013 ? |
Referências:
Super DVD Vídeo Aulas - Vídeo Aula sobre VB .NET, ASP .NET e C#
Super DVD C# - Recursos de aprendizagens e vídeo aulas para C#
Curso Fundamentos da Programação Orientada a Objetos com VB .NET
Flutter - Lista Básica - Macoratti
Flutter - Apresentando o widget MaterialApp - Macoratti
Flutter - Apresentando Flutter Studio - Macoratti
Flutter - Apresentando Widgets - Macoratti
Flutter - Criando uma tela de login - Macoratti