Fala Guilherme!!!
Primeiramente, gostaria de parabenizar pelo conteúdo e a forma como você o leciona, sou um grande fã seu.
Com base no que você ensinou na vídeo aula (02 - Estados, telas e polimorfismos), da sessão (03. Criando um framework). Gostaria de saber sobre a forma que abordei a gerência de estados. Peguei o que você fez e adicionei um pouco à mais.
Ex:
@immutable
abstract class ContactsListState {
const ContactsListState();
Widget build(BuildContext context);
}
Dessa forma, o próprio estados deve informar qual será o body da tela assim como no código a baixo...
@immutable
class EmptyContactListState extends ContactsListState {
const EmptyContactListState();
@override
Widget build(BuildContext context) {
return Center(
child: Text('There is no contacts!'),
);
}
}
@immutable
class LoadedContactListState extends ContactsListState {
final List<Contact> _contacts;
const LoadedContactListState(this._contacts);
@override
Widget build(BuildContext context) {
return ContactsListView(_contacts);
}
}
Nessa abordagem, não tem mais a necessidade de verificarmos no builder qual widget devemos apresentar.
class ContactsList extends BlocContainer {
final ContactDao _dao;
ContactsList(this._dao);
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Transfer'),
),
body: BlocBuilder<ContactListCubit, ContactsListState>(
builder: (context, state) => state.build(context),
),
floatingActionButton: FloatingActionButton(
onPressed: () {
push(context, ContactFormContainer())
.then((value) => context.bloc<ContactListCubit>().reload(_dao));
},
child: Icon(Icons.add),
),
);
}
}
O que você tem a dizer sobre essa bordagem?