Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Não está adicionando o item do formulário na lista

Criei o mesmo app, porém com alguns detalhes diferentes. Não apresenta nenhum erro no código, já revisei 5x a forma de adição do Stateful e nada. Até esse ponto da aula está tudo ok e rodando exatamente como o do professor, mas no momento de adição do item para a lista de transferência ele não vai, mesmo o debugPrint aparecendo normalmente, ou seja, ele está captando os dados mas não está fazendo essa ação e não consegui entender o motivo :( .

import 'package:flutter/material.dart';

void main() => runApp(Cizino());

class Cizino extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        body: ListaTransferencia(),
      ),
    );
  }
}

class FormularioTransferencia extends StatelessWidget {

  final TextEditingController _controladorCampoTitulo = TextEditingController();
  final TextEditingController _controladorCampoDescricao = TextEditingController();

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(title: Text('N O V A   T A R E F A '),),
        body: Column(
          children: <Widget> [
            Editor(controlador: _controladorCampoTitulo, rotulo: "Título", icone: Icons.edit),
            Editor(controlador: _controladorCampoDescricao, rotulo: "Descrição", icone: Icons.short_text_rounded),
            RaisedButton(
              child: Text('Criar'),
              onPressed:() {
                _criaTransferencia(context);
              },
            ),
          ],
        ));
  }

  void _criaTransferencia(BuildContext context) {
    final titulo = _controladorCampoTitulo.text;
    final descricao = _controladorCampoDescricao.text;
    if (titulo != null && descricao != null) {
      final transferenciaCriada = Transferencia(titulo, descricao);
      Navigator.pop(context, transferenciaCriada);
    }
  }
}

class Editor extends StatelessWidget {

  final TextEditingController controlador;
  final String rotulo;
  final IconData icone;

  Editor({this.controlador, this.rotulo, this.icone});

  @override
  Widget build(BuildContext context) {
    return Padding(
      padding: const EdgeInsets.fromLTRB(16.0, 8.0, 16.0, 8.0),
      child: TextField(
        controller: controlador,
        style: TextStyle(
          fontSize: 22,
          fontFamily: 'Serif',
        ),
        decoration: InputDecoration (
          icon: icone != null ? Icon(icone) : null,
          labelText: rotulo,
        ),
        keyboardType: TextInputType.text,
      ),
    );
  }
}


class ListaTransferencia extends StatefulWidget {
  final List<Transferencia> _transferencias = List();

  @override
  State<StatefulWidget> createState() {
    return ListaTransferenciaState();
  }
}

class ListaTransferenciaState extends State<ListaTransferencia> {

  @override
  Widget build(BuildContext context) {
    widget._transferencias.add(Transferencia('Testando', 'Som'));
    return Scaffold(
      appBar: AppBar(
        title: Text('C I Z I N O'),
      ),
      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((transferenciaRecebida) {
            debugPrint('Chegou no then do future');
            debugPrint('$transferenciaRecebida');
            widget._transferencias.add(transferenciaRecebida);
          });
        },
      ),
    );
  }
}

class Transferencia {
  final String titulo;
  final String descricao;

  Transferencia(this.titulo, this.descricao);

  @override
  String toString() {
    debugPrint('Criando transferência');
    return 'Transferencia{titulo: $titulo, descricao: $descricao}';
  }
}

class ItemTransferencia extends StatelessWidget {
  final Transferencia _transferencia;

  ItemTransferencia(this._transferencia);

  @override
  Widget build(BuildContext context) {
    return Card(
      child: ListTile(
        leading: Icon(Icons.account_circle),
        title: Text(_transferencia.titulo.toString()),
        subtitle: Text(_transferencia.descricao.toString()),
        isThreeLine: true,
      ),
    );
  }

}
1 resposta
solução!

Estava com o mesmo problema. Encontrei assistindo o próximo vídeo a aula.

Altere sua class ListaTransferenciaState o future.then

       future.then((transferenciaRecebida){
              debugPrint('chegou no then do future');
              debugPrint('$transferenciaRecebida');
              if(transferenciaRecebida != null) {
                setState(() {
                  widget._transferencias.add(transferenciaRecebida);
                });
              }
          });

Infelizmente revisei o código várias vezes até desistir e ir para a próxima aula. No computador do instrutor teve que simular um delay para resolver o problema, mas no meu não precisou.