【问题标题】:Get the built child of an existant StreamBuilder()获取现有 StreamBuilder() 的已构建子项
【发布时间】:2020-01-17 12:01:18
【问题描述】:

我是 Flutter 的新手,几天来我一直在尝试弄清楚如何让 StreamBuilder 的已构建小部件子级对小部件的外观进行一些更改。

我有一些这样的小部件,已经构建并保存到列表中:

GestureDetector(
    child: StreamBuilder(
        stream: (bloc as HomeBloc).outCategoriesCardsColors,
        builder: (context, snapshot) {
          if (snapshot.hasData) {
            return CardSmallSquare(
              title: key,
              size: CardSmallSquare.defaultCardSize,
              iconUrl: categories[key],
              borderColor: snapshot.data[index + 1] ?? Colors.red,
            );
          } else {
            return CardSmallSquare.buildLoadingCard(context);
          }
        }),
    onTap: () {},
  ));

稍后我尝试使用这些小部件访问我的列表并访问由 StreamBuilder 返回的 CardSmallSquare(),因此我可以在运行时更改一些外观属性。这个想法是在做这样的事情(这个 sn-p 不起作用):

int index = _widgets.indexWhere((widget) {
  CardSmallSquare card = (((widget as GestureDetector).child as StreamBuilder).child as CardSmallSquare);
  if (card.title == "Title") {
    return true;
  }
  return false;
});

StreamBuilder.child 不存在。到目前为止,我已经尝试了很多东西(方法、技巧等),但都没有奏效。

你能帮帮我吗?

【问题讨论】:

    标签: mobile flutter layout dart stream-builder


    【解决方案1】:

    您可以访问 StreamBuilder 的子级,但这是与框架而不是使用它进行斗争。

    您可以通过改变小部件的状态并在您的 StreamBuilder 的子级中对这种变化做出反应来轻松地创建这个逻辑。

    此外,您可以在您的集团内部执行此操作以保持一切清洁。

    Google IO 的这次演讲很有帮助 https://youtu.be/d_m5csmrf7I

    【讨论】:

    • 其实我猜你不能制作 StreamBuilder.child (StreamBuilder 没有这个子属性)。我真的很想能够做到这一点,顺便说一句,这就是我想要做的。我试图以这种方式访问​​ CardSmallSquare 因为我想在许多其他地方使用这个小部件,所以我不想例如,通过构造函数传递特定参数。
    猜你喜欢
    • 2020-09-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-20
    • 2017-04-07
    • 2021-12-25
    • 1970-01-01
    • 2021-08-03
    相关资源
    最近更新 更多