在blocprovider中替换Bloc的实例

时间:2020-10-16 17:58:37

标签: flutter flutter-bloc

我正试图找到一种方法来创建一个新的bloc实例,并将其反映在multibloc提供程序中。

当前我有以下内容:

Scaffold(
        appBar: AppBar(),
        body: MultiBlocProvider(
          providers: [
            BlocProvider<BlocABloc>(
              create: (BuildContext context) => _aBloc,
            ),
            BlocProvider<BlocBBloc>(
              create: (BuildContext context) => _bBloc,
            ),
          ]...

然后,我尝试创建一个新的BlocABloc实例,以及另一个BlocBBloc实例:

generateNew(){
setState(() {
 _aBloc = BlocABloc();
 _bBloc = BlocBBloc();
});
}

我期望构建函数重新执行,并且BlocProvider中使用了新实例。但是,我发现BlocBuilder仍在从Bloc的先前实例获取状态。

有没有办法处理这种情况?

2 个答案:

答案 0 :(得分:1)

我不知道您为什么要这样做。但是您可以使用if (likes == 0 && dislike == 0) { setLikePercentage(50); setDislikePercentage(50); } else if (likes == 0) { setLikePercentage(0); setDislikePercentage(100); } else if (dislikes == 0) { setLikePercentage(100); setDislikePercentage(0); } else { setLikePercentage((likes / (dislikes + likes)) * 100); setDislikePercentage((dislikes / (dislikes + likes)) * 100); } 强制再次执行BlocProvider create方法。这是一个示例,您可以如何做。

key

答案 1 :(得分:0)

您遇到与重新执行和创建新实例有关的问题。您需要像这样使用它:

  BlocProvider.of<BlocABloc>(context);

您可以阅读more