Ao tentar abrir a tela de transferências é apresentado o erro abaixo:
Ao tentar abrir a tela de transferências é apresentado o erro abaixo:
O meu codigo da lista de transferencias esta assim:
class ContactsList extends StatefulWidget {
@override
_ContactsListState createState() => _ContactsListState();
}
class _ContactsListState extends State<ContactsList> {
final ContactDao _dao = ContactDao();
final List<Contact> contacts = [];
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Transfer'),
),
body: FutureBuilder<List<Contact>>(
initialData: this.contacts,
future: _dao.findAll(),
builder: (context, snapshot) {
switch (snapshot.connectionState) {
case ConnectionState.none:
break;
case ConnectionState.waiting:
return Progress();
break;
case ConnectionState.active:
break;
case ConnectionState.done:
final List<Contact>? contacts = snapshot.data;
return ListView.builder(
itemBuilder: (context, index) {
final Contact? contact = contacts![index]; return _ContactItem(
contact!,
onClick: () {
Navigator.of(context).push(
MaterialPageRoute(
builder: (context) => TransactionForm(contact),
),
);
},
);
},
itemCount: contacts?.length,
);
break;
}
return Text('Unknown error');
},
),
floatingActionButton: FloatingActionButton(
onPressed: () {
Navigator.of(context).push(
MaterialPageRoute(
builder: (context) => ContactForm(),
),
).then((value) => setState(() {}));
},
child: Icon(
Icons.add,
),
),
);
}
}
class _ContactItem extends StatelessWidget {
final Contact contact;
final Function onClick;
_ContactItem(
this.contact, {
required this.onClick,
});
@override
Widget build(BuildContext context) {
return Card(
child: ListTile(
onTap: () => onClick(),
title: Text(
contact.name,
style: TextStyle(
fontSize: 24.0,
),
),
subtitle: Text(
contact.accountNumber.toString(),
style: TextStyle(
fontSize: 16.0,
),
),
),
);
}
}
Seu código está quase lá, mas tá dando um erro chato quando você tenta abrir a tela de transferências, né? Esse "Unexpected null value." geralmente aparece quando tentamos acessar algo que tá como nulo.
Vamos dar uma olhada:
Inicialização da lista de contatos:
No início do _ContactsListState
, você tá começando a lista contacts
com final List<Contact> contacts = [];
, certo? Confirma se isso tá tudo certinho para evitar problemas.
Acessando os contatos:
Dentro do FutureBuilder
, você tá acessando os contatos com contacts![index]
. Isso tá certo se contacts
não for nulo, mas garante que contacts
não tá nulo antes de tentar acessar.
final Contact? contact = contacts![index];
Só confirma se contacts
não é nulo antes de tentar mexer nele.
Tratando o FutureBuilder:
Quando usa o FutureBuilder
, você já especifica initialData: this.contacts
, o que significa que a lista inicial é this.contacts
. Checa se essa lista não tá nula desde o começo e se ela tá sendo atualizada direito depois que a operação assíncrona é feita.
initialData: this.contacts,
Arruma essas coisinhas de inicialização nula ou acesso estranho à lista contacts
. Isso deve resolver o problema do "Unexpected null value".