【问题标题】:calling setState in flutter Bloc listener在flutter Bloc监听器中调用setState
【发布时间】:2020-10-14 07:35:12
【问题描述】:

我在 Flutter BlocListener 中调用 setState。这样做有什么问题吗?

....
return BlocListener<XBloc, XState>(
      listener: (context, state) {
        if (state is XLoadedState) {
          setState(() {
            name = state.name;
          });
        }....
....

【问题讨论】:

  • 这不是问题,但你为什么要这样做呢?为什么在你的集团之外有一个州是你在集团内的州的副本?
  • @nvoigt 如果我在同一个屏幕上有三个单独的 ListView 并且这三个 ListView 的数据将从单一来源(数据库/服务)获得,该怎么办。在为这些 ListView 加载数据时,我需要显示一个空状态。在这种情况下,在 BlocListener 中调用 setState 是否不明智,因为需要刷新全屏并显示加载的数据?

标签: flutter dart setstate bloc


【解决方案1】:

这不是问题,但它有点无用和反模式。使用setState,即使没有必要,您也会强制重建所有内容。

您可以将使用name 的小部件包装成BlocBuilder&lt;XBloc,XState&gt;,例如这样:

BlocBuilder<XBloc,XState>(
  builder: (context, state){
    if (state is XLoadedState){
      return Text(state.name);
    }else{
      //return something for when state.name is null, I guess
    }
  }
)

你可以查看更多关于这个here

【讨论】:

    猜你喜欢
    • 2021-02-17
    • 2020-03-26
    • 2023-03-29
    • 2021-02-20
    • 2020-02-18
    • 2020-03-27
    • 2019-10-24
    • 2022-10-23
    • 2020-04-29
    相关资源
    最近更新 更多