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

Acessar o context passado pelo BlocProvider de dentro do showdialog()

Boa noite pessoal. Fiquei horas mas não consegui arrumar um jeito de acessar um método da minha classe TransactionFormCubit de dentro do ShowDialog, o context se perde, já tentei quase de tudo da documentação do bloc para passar o context mas não achei a solução.

showDialog(
                          context: context,
                            builder: (contextDialog) {
                              return TransactionAuthDialog(
                                onConfirm: (String password) {
                                  BlocProvider.of<TransactionFormCubit>(context)
                                      ._send(
                                      transactionCreated, password, context);
                                },
                              );
                            }
                        );

Estou passando o blocProvider pela classe TransactionFormContainer e também já tentei usar o BlocBuilder e o BlocProvier.value e nada dá certo. Agora no código do curso original essa chamada funciona pra acessar o método save que praticamente é a mesma coisa que eu quero fazer.

2 respostas

Bom dia Hillan, só o ouro?

Mano, vou pedir um pouco mais de detalhes, por exemplo os erros que aparecem no Log.

Mas antes, eu preciso dizer que o ideal é chamar a função save, e ela chama a função send:

showDialog(
                    context: context,
                    builder: (contextDialog) {
                    return TransactionsAuthDialog(
                    onConfirm: (String password) {
                    BlocProvider.of<TransactionFormCubit>
                    (context).save(transactionCreated, password, context);
                                    },
                                  );
                                });
solução!

boa noite Kako depois de apanhar um pouco eu conseguir achar onde eu estava errando. Na minha class ContactList eu estava chamando pelo Navigator a TransactionForm no lugar da TransactionFormContainer que é a class que passa o context pelo BlocProvider para a classe TransactionForm. Por isso eu não tinha acesso, mas um bug do flutter acabou me atrapalhando porque de fora do ShowDialog eu tinha acesso ao BlocProvider.of<TransactionFormCubit>. mas depois que eu fechei e abri a IDE no dia seguinte, nem fora do ShowDialog eu consegui pegar o context foi ai que eu descobri o erro analisando o log de falhas.

// No lugar de TransactionFormContainer estava TransactionForm. 
Navigator.of(context).push(MaterialPageRoute(builder: (context) => TransactionFormContainer(contact),);

Resolvi implementar o Bloc de uma forma diferenciada para o TransactionForm por isso não chamo a função save implementei de uma forma diferente onde mantive meus dialogs de erro, só usei o state mesmo para fazer o handle da tela de loading, pra mim foi o que fez mais sentido. e agora eu tenho um dialog de loading bem bacaninha que eu vou reutilizar em outros projetos com certeza ;)..

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software