Olá! Eu estou fazendo algumas mudanças no projeto por conta própria para aprender mais e me deparei com um problema, estou tentanto fazer um Text() aparecer/desaparecer quando eu clico em um TextField(), no entanto, no curso fizemos o TextField() em um classe separada e a variável (essa variável é um bool que vai fazer a mudança que eu quero, aparecer/desaparecer) está em outra classe! Eu procurei bastante e nao achei uma resposta pro meu problema! Eu até pensei em mudar alguns Widgets para Stateful e tentar usar widget.nomeDaVariável
mas como eu nao tenho tanto conhecimento preferi nao mexer! Alguém consegue me ajudar?
Segue o código:
Classe onde está localizada a variável que eu preciso mudar:
class FormularioTransferenciaState extends State<FormularioTransferencia> {
final TextEditingController _accNumberController = TextEditingController();
final TextEditingController _valueController = TextEditingController();
bool _incorrectForm = false;
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Criar transferencia'),
),
body: SingleChildScrollView(
child: Column(
children: [
TextEditor(
myController: _accNumberController,
myLabel: 'Acc. number',
myHint: '0000',
myIcon: Icons.account_circle,
),
TextEditor(
myController: _valueController,
myLabel: 'Value',
myHint: '0.00',
myIcon: Icons.monetization_on,
),
ConstrainedBox(
constraints: BoxConstraints.tightFor(width: 120, height: 60),
child: ElevatedButton(
onPressed: () => criarTransferencia(context),
child: Text('CONFIRMAR'),
style: ButtonStyle(
textStyle:
MaterialStateProperty.all(TextStyle(fontSize: 16.0))),
),
),
if (_incorrectForm)
Padding(
padding: EdgeInsets.only(top: 10),
child: Text(
"Something is missing...",
style: TextStyle(
fontWeight: FontWeight.bold,
color: Colors.red,
fontSize: 15,
),
),
)
],
),
),
);
}
void criarTransferencia(BuildContext context) {
final int? accNumber = int.tryParse(_accNumberController.text);
final double? value = double.tryParse(_valueController.text);
if (accNumber != null && value != null) {
final transferencia = Transferencia(value, accNumber);
setState(() {
_incorrectForm = false;
});
Navigator.pop(context, transferencia);
} else {
setState(() {
_incorrectForm = true;
});
}
}
}
Classe que tem o TextField():
class TextEditor extends StatelessWidget {
final IconData? myIcon;
final String myLabel;
final String myHint;
final TextEditingController myController;
TextEditor({
this.myIcon,
required this.myLabel,
required this.myHint,
required this.myController,
});
@override
Widget build(BuildContext context) {
return Padding(
padding: const EdgeInsets.all(24.0),
child: TextField(
decoration: InputDecoration(
icon: myIcon != null ? Icon(myIcon) : null,
labelText: myLabel,
hintText: myHint,
),
style: TextStyle(
fontSize: 24.0,
),
keyboardType: TextInputType.number,
controller: myController,
),
);
}
}