Flutter Futurebuilder使用两个不同的值

时间:2019-08-06 16:33:56

标签: flutter

我必须根据两组不同的文章来更新查询。内部的构建器使用两个不同的快照值。 ArticleFragmentWidget查询其他文章详细信息。它应该获得与上面的文本小部件相同的ID,但事实并非如此。

Text(snapshot.data.articleIds[index].toString()),
ArticleFragmentWidget(snapshot.data.articleIds[index])

这两行在相同的上下文中站在一起,应该获得相同的ID,但事实并非如此。

无论如何,如果我将语句扩展到

if (snapshot.hasData && snapshot.connectionState == ConnectionState.done)

它们都获得相同的值。但为什么? 在另一个示例中,我使用TextEditingControllers侦听器更新Future,并且按预期方式工作。

代码如下:

class ArticleSearchSimpleState extends State<ArticleSearchSimple> {
String _search;
bool _onStockOnly;
Future<ArticleIdList> _articleIds;

ArticleSearchSimpleState(this._search) {
  _articleIds = Request().queryArticleSearch(_search);
}

void _onStockOnlyChanged(bool value) {
  setState(() {
    _onStockOnly = value;
    _articleIds = Request().queryArticleSearch(_search, onStockOnly: value);
  });
}

@override
Widget build(BuildContext context) {
  return ListView(
    physics: ClampingScrollPhysics(),
    shrinkWrap: true,
    children: <Widget>[
      Row(
        children: <Widget>[
          Radio(
              value: false,
              groupValue: _onStockOnly,
              onChanged: _onStockOnlyChanged),
          Text('Alle Artikel'),
          Spacer(),
          Radio(
              value: true,
              groupValue: _onStockOnly,
              onChanged: _onStockOnlyChanged),
          Text('Lagerartikel')
        ],
      ),
      FutureBuilder<ArticleIdList>(
          future: this._articleIds,
          builder: (context, snapshot) {
            if (snapshot.hasData) {
              return ListView.separated(
                  separatorBuilder: (ctx, index) => const Divider(height: 1),
                  shrinkWrap: true,
                  physics: ClampingScrollPhysics(),
                  itemCount: snapshot.data.articleIds.length,
                  itemBuilder: (context, index) {
                    return Column(
                      children: <Widget>[
                        Text(snapshot.data.articleIds[index].toString()),
                        ArticleFragmentWidget(snapshot.data.articleIds[index])
                      ],
                    );
                  });
            } else if (snapshot.hasError) {
              return Text('${snapshot.error}');
            }
            return Center(child: CircularProgressIndicator());
          }),
    ],
  );
}
}

0 个答案:

没有答案