【问题标题】:UI doesn't fully update when receive bloc informations接收 bloc 信息时 UI 未完全更新
【发布时间】:2019-12-02 11:41:41
【问题描述】:

我有一个奇怪的问题:我想在单击项目网格时更新它。我使用 BLoC 模式来管理更改,因此视图只接收一个列表并且必须显示它。我的问题是视图没有完全更新。

在我进一步解释之前,这里是我的代码

body: BlocEventStateBuilder<ShopEvent, ShopState>(
  bloc: bloc,
  builder: (BuildContext context, ShopState state) {
    staggeredTile.clear();
    cards.clear();

    staggeredTile.add(StaggeredTile.count(4, 0.1));
    cards.add(Container());

    if (state.products != null) {
      state.products.forEach((item) {
        staggeredTile.add(StaggeredTile.count(2, 2));
        cards.add(
          Card(
            child: InkWell(
              child: Column(
                children: <Widget>[
                  Image.network(
                    item.picture,
                    height: 140,
                  ),
                  Container(margin: EdgeInsets.only(top: 8.0)),
                  Text(item.title)
                ],
              ),
              onTap: () {
                bloc.emitEvent(ClickShopEvent(item.id));
              },
            ),
          ),
        );
    });
  }
  return StaggeredGridView.count(
    crossAxisCount: 4,
    staggeredTiles: staggeredTile,
    children: cards,
  );
}),

所以,我有两个项目。当我单击第一个时,我想有一个具有不同名称和图片的项目。但是当我点击时,我有一个符合预期的项目,但具有相同的文本和图像。当我打印这些值时,它已正确更新,但视图未显示。

你对我的问题有任何线索吗?

【问题讨论】:

    标签: flutter dart state bloc


    【解决方案1】:

    由于我无法解释的原因,当我更换时

    staggeredTile.clear();
    cards.clear();
    

    通过

    staggeredTile = new List<StaggeredTile>();
    cards = new List<Widget>();
    

    效果很好。

    如果有人能解释一下原因,我将不胜感激。

    【讨论】:

    • 我认为这是因为 BlocBuilder 监视状态,但在状态中您只有对列表的引用。当您执行 List.clear() 时,您正在更改列表,而不是引用,并且构建器不会将其记录为更改。但是,当您为其分配一个新对象时,它会记录更改并重建 UI。
    猜你喜欢
    • 2017-12-28
    • 2021-07-04
    • 2021-01-19
    • 2021-05-10
    • 2020-09-03
    • 2011-12-13
    • 2021-03-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多