-3
Good morning, you guys. I am in trouble when I upgraded to Flutter 2. I am taking the course of Alura and the project was done with the previous Flutter. When registering a transfer in Formulatransfer, when returning to Transfers, Listview does not show the transfer performed. In the previous project, the Raisedbutton was changed to Elevatedbutton, as the Raised was deprecated. and tb changed the use of List() (deprecated) on _transfer startup to []. It is worth noting that when using Flutter 1.12 it runs normally, already in 2.0 it happens that Listview does not show transfers. I performed a debug and saw that the List is being populated normal, but what does not update and shows the new state on the Downloads screen. Follow the code below:
import 'package:flutter/material.dart';
void main() => runApp(ByteBankApp());
class ByteBankApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
body: ListaTransferencias(),
),
);
}
}
class FormularioTransferencia extends StatelessWidget {
final TextEditingController _controladorCampoNumeroConta =
TextEditingController();
final TextEditingController _controladorCampoValor = TextEditingController();
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Criando Transferência'),
),
body: Column(
children: <Widget>[
Editor(
controlador: _controladorCampoNumeroConta,
rotulo: 'Número da conta',
dica: '0000'),
Editor(
controlador: _controladorCampoValor,
rotulo: 'Valor',
dica: '0.00',
icone: Icons.monetization_on),
TextButton(
style: TextButton.styleFrom(
backgroundColor: Colors.blue,
),
onPressed: () => _criaTransferencia(context),
child: Text(
'Confirmar',
style: TextStyle(
color: Colors.white,
),
),
)
],
));
}
void _criaTransferencia(BuildContext context) {
final int numeroConta = int.tryParse(_controladorCampoNumeroConta.text);
final double valor = double.tryParse(_controladorCampoValor.text);
if (numeroConta != null && valor != null) {
final transferenciaCriada = Transferencia(valor, numeroConta);
debugPrint('Criando transferência');
Navigator.pop(context, transferenciaCriada);
}
}
}
class Editor extends StatelessWidget {
final TextEditingController controlador;
final String rotulo;
final String dica;
final IconData icone;
Editor({
this.controlador,
this.rotulo,
this.dica,
this.icone,
});
@override
Widget build(BuildContext context) {
return Padding(
padding: const EdgeInsets.all(16.0),
child: TextField(
controller: controlador,
style: TextStyle(
fontSize: 24.0,
),
decoration: InputDecoration(
icon: icone != null ? Icon(icone) : null,
labelText: rotulo,
hintText: dica,
),
keyboardType: TextInputType.number,
),
);
}
}
class ListaTransferencias extends StatefulWidget {
final List<Transferencia> _transferencias = [];
@override
State<StatefulWidget> createState() {
return ListaTransferenciasState();
}
}
class ListaTransferenciasState extends State<ListaTransferencias> {
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Transferências'),
),
body: ListView.builder(
itemCount: widget._transferencias.length,
itemBuilder: (context, indice) {
final transferencia = widget._transferencias[indice];
return ItemTransferencia(transferencia);
},
),
floatingActionButton: FloatingActionButton(
child: Icon(Icons.add),
onPressed: () {
final Future<Transferencia> future =
Navigator.push(context, MaterialPageRoute(builder: (context) {
return FormularioTransferencia();
}));
future.then((tranferenciaRecebida) {
debugPrint('chegou no then do future');
debugPrint('$tranferenciaRecebida');
widget._transferencias.add(tranferenciaRecebida);
});
},
),
);
}
}
class ItemTransferencia extends StatelessWidget {
final Transferencia _transferencia;
ItemTransferencia(this._transferencia);
@override
Widget build(BuildContext context) {
return Card(
child: ListTile(
leading: Icon(Icons.monetization_on),
title: Text(_transferencia.valor.toString()),
subtitle: Text(_transferencia.numeroConta.toString()),
),
);
}
}
class Transferencia {
final double valor;
final int numeroConta;
Transferencia(this.valor, this.numeroConta);
@override
String toString() =>
'A Transferencia foi de $valor na Conta de número $numeroConta)';
}
Thanks Matheus Ribeiro. That’s right. With its implementation it worked well! Excellent!
– Marcos Maciel