No final, ao tentar retornar para a lista de contatos (variável contactsListBack) o comando verify(mockContactDao.findAll()); falha na execução do teste. O erro mostrado é o seguinte:
══╡ EXCEPTION CAUGHT BY FLUTTER TEST FRAMEWORK ╞════════════════════════════════════════════════════
The following TestFailure object was thrown running a test:
No matching calls. All calls: [VERIFIED] MockContactDao.findAll(), [VERIFIED]
MockContactDao.save(Contact{id: 0, name: fernando, accountNumber: 1000})
(If you called verify(...).called(0);
, please instead use verifyNever(...);
.)
Além do erro ao executar o teste de fluxo, percebi que ao executar a aplicação a lista de contatos parou de ser atualizada automaticamente, ou seja, ao se cadastrar um novo contato a lista de contato não é mais atualizada com este novo contato. Mas se eu for para o Dasboard e retornar para a lista aí este novo contato aparece.
Favor, o que eu fiz de errado no código abaixo?
segue o meu código: arquivo: contacts_list.dart
import 'package:bytebank/components/progress.dart';
import 'package:bytebank/database/dao/contact_dao.dart';
import 'package:bytebank/models/contact.dart';
import 'package:bytebank/screens/contact_form.dart';
import 'package:bytebank/screens/transaction_form.dart';
import 'package:flutter/material.dart';
class ContactsList extends StatefulWidget {
final ContactDao contactDao;
const ContactsList({@required this.contactDao});
@override
_ContactsListState createState() => _ContactsListState();
}
class _ContactsListState extends State<ContactsList> {
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Transfer'),
),
body: FutureBuilder<List<Contact>>(
initialData: List(),
future: widget.contactDao.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(contactDao: widget.contactDao,),
),
);
},
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,
),
),
),
);
}
}