Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

Após salvar o contato, ele não aparece na lista, sendo que tenho que voltar na pagina inicial para atualizar a lista

O código está abaixo. Há outros tópicos relacionados a este problema, mas nenhum deles foi efetivo para mim. Transformei o widget para StatefulWidget, mas também não obtive êxito.

O que está errado?

import 'package:bytebank/database/app_database.dart';
import 'package:bytebank/models/contato.dart';
import 'package:bytebank/screens/contatos_form.dart';
import 'package:flutter/material.dart';

class Contatos extends StatefulWidget {
  @override
  _ContatosState createState() => _ContatosState();
}

class _ContatosState extends State<Contatos> {

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Contatos'),
      ),
      body: FutureBuilder<List<Contato>>(
        initialData: List(),
        future: Future.delayed(Duration(seconds: 1)).then((value) {
          return buscarTodos();
        }),
        builder: (context, AsyncSnapshot<List<Contato>> snapshot) {
          switch (snapshot.connectionState) {
            case ConnectionState.none:
              break;
            case ConnectionState.waiting:
              return Center(
                child: Column(
                  mainAxisAlignment: MainAxisAlignment.center,
                  children: <Widget>[
                    CircularProgressIndicator(),
                    Text('Carregando...'),
                  ],
                ),
              );
              break;
            case ConnectionState.active:
              break;
            case ConnectionState.done:
              final List<Contato> contatos = snapshot.data;
              return ListView.builder(
                //itemBuilder é usado para lista dinâmica
                itemBuilder: (context, index) {
                  final Contato contato = contatos[index];
                  return _ContatoItem(contato);
                },
                itemCount: contatos.length,
              );
              break;
          }
          return Text('Ocorreu um erro desconhecido.');
        },
      ),
      floatingActionButton: FloatingActionButton(
        child: Icon(Icons.add),
        onPressed: () {
          Navigator.of(context).push(MaterialPageRoute(
            builder: (context) {
              return ContatosForm();
            },
          ));
        },
      ),
    );
  }
}

class _ContatoItem extends StatelessWidget {
  final Contato contato;

  _ContatoItem(this.contato);

  @override
  Widget build(BuildContext context) {
    return Card(
      child: ListTile(
        title: Text(
          contato.nome,
          style: TextStyle(
            fontSize: 24.0,
          ),
        ),
        leading: Text(
          contato.conta.toString(),
          style: TextStyle(
            fontSize: 16.0,
            fontWeight: FontWeight.w900,
          ),
        ),
      ),
    );
  }
}
2 respostas

Também transformei para stateful e não resolveu. Consegui resolver colocando o setState no action button, mas não sei se é a abordagem correta.

Segue o meu código:

  floatingActionButton: FloatingActionButton(
    onPressed:() {
      Navigator.of(context).push(
          MaterialPageRoute(
              builder: (context) => ContactForm()
          )
      ).then((value) {
        setState(() {
          widget.createState();
        });
      });
    },
    child: Icon(
      Icons.add,
    ),
  ),
solução!

Oi, Hugo.

Resolveu o problema!

Obrigada!