0

我是 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(),因此我可以在运行时更改一些外观属性。这个想法是在做这样的事情(这个片段不起作用):

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 不存在。到目前为止,我已经尝试了很多东西(方法、技巧等),但都没有奏效。

请问你能帮帮我吗?

4

1 回答 1

0

您可以找到 StreamBuilder 的孩子,但这是与框架而不是使用它进行斗争。

您可以通过改变小部件的状态并在 StreamBuilder 的子项中对这种更改做出反应来轻松实现此逻辑。

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

来自 Google IO 的这次谈话可以帮助很多 https://youtu.be/d_m5csmrf7I

于 2019-09-16T16:00:37.443 回答