web-dev-qa-db-fra.com

comment accéder au bloc de flottement dans la méthode initState?

Dans le code ci-dessous, l'événement de répartition est appelé à partir de la méthode de génération après avoir obtenu l'objet BuildContext. Que se passe-t-il si je souhaite distribuer un événement pendant le traitement au début de la page dans la méthode initState elle-même?

Si j'utilise la méthode didChangeDependencies, je reçois cette erreur: BlocProvider.of() called with a context that does not contain a Bloc of type FileManagerBloc. comment résoudre ce problème?

  @override
  Widget build(BuildContext context) {
    return Scaffold(
        body: BlocProvider<FileManagerBloc>(
          builder: (context)=>FileManagerBloc(),
          child: SafeArea(
      child: Container(
          child: Column(
            children: <Widget>[
              Container(color: Colors.blueGrey, child: TopMenuBar()),
              Expanded(
                child: BlocBuilder<FileManagerBloc,FileManagerState>(
                  builder: (context , state){
                    return GridView.count(
                      scrollDirection: Axis.vertical,
                      physics: ScrollPhysics(),
                      crossAxisCount: 3,
                      crossAxisSpacing: 10,
                      children: getFilesListWidget(context , state),
                    );
                  },
                ),
              )
            ],
          ),
      ),
    ),
        ));
  }

  @override
  void dispose() {
    super.dispose();
  }

  @override
  void didChangeDependencies() {
    logger.i('Did change dependency Called');
    final FileManagerBloc bloc = BlocProvider.of<FileManagerBloc>(context) ;
    Messenger.sendGetHomeDir()
        .then((path) async {
      final files = await Messenger.sendListDir(path);
        bloc.dispatch(SetCurrentWorkingDir(path)) ;
        bloc.dispatch(UpdateFileSystemCacheMapping(path , files)) ;
    });
  }
4
Natesh bhat

vous pouvez l'utiliser dans la méthode didChangeDependencies plutôt que initState.

Exemple

 @override
  void didChangeDependencies() {
    final CounterBloc counterBloc = BlocProvider.of<CounterBloc>(context);
    //do whatever you want with the bloc here.
    super.didChangeDependencies();
  }
0
Karim Elghamry