2
respostas

Gerência de estados com Bloc

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?

2 respostas

Oi Elias, tudo bom? O Gui normalmente não acompanha o Fórum de dúvidas, mas vou ver se ele pode dar uma olhadinha :3

Enquanto isso gostaria de dizer que eu gostei bastante da sua abordagem, muito inteligente e simplificou bastante.

Só tome cuidado com códigos complexos e extensos que tendem a confundir outros desenvolvedores, apesar de ser redundante o ser humano entende melhor quando sabe qual widget está sendo usado!

Obrigado pelo retorno Caio!!!

A intensão dessa abordagem é simplesmente remover a sequência de if/else para cada estado que adicionarmos em nossa page.