1
resposta

Erro no Bloc.observer

Já vi que algumas pessoas reclamaram do mesmo erro, mas o problema é que quando utilizo a versão 6.0.0 do flutter_bloc, ela se mostrar incompatível com o null safety. Ou seja, tenho que usar a versão atual de qualquer forma. Fico decepcionado o quão defasado está esse curso de flutter da alura. Não tem null safety e todas as libs estão extremamente desatualizadas, gasto mais tempo atualizando as libs e buscando soluções atuais para o que o professor ensina do que realmente aprendendo. Mas enfim, vamos lá:

class LogObserver extends BlocObserver {
  @override
  void onChange(BlocBase bloc, Change change){
    print("${bloc.runtimeType} > $change");
    super.onChange(bloc, change);
  }
}

class BytebankApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {

    Bloc.observer = LogObserver();
    return MaterialApp(
     theme: bytebankTheme,
      home: NameContainer(),
    );
  }
}

Estou com um erro no Bloc.observer = LogObserver();

O erro é:

The setter 'observer' isn't defined for the type 'Bloc'. Try importing the library that defines 'observer', correcting the name to the name of an existing setter, or defining a setter or field named 'observer'.

Ele não reconhece o bloc.observer. Não consegui achar a informação de como resolver isso. Alguém pode me ajudar?

1 resposta

E aí Wanderley. Tive o mesmo problema, e o que resolveu pra mim foi chamar um método dentro da main function, que é o BlockOverrides.runZoned. Dentro da lambda dessa função você chama o runApp e no parâmetro blocObserver você passa o LogObserver()

O meu código ficou assim:

class LogBloc extends BlocObserver {
  @override
  void onChange(BlocBase bloc, Change change) {
    debugPrint('${bloc.runtimeType} > $change');
    super.onChange(bloc, change);
  }
}

void main() {
  BlocOverrides.runZoned(
    () {
      runApp(BytebankApp());
    },
    blocObserver: LogBloc(),
  );
}

class BytebankApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      theme: appTheme,
      home: ContadorContainer(),
    );
  }
}