Dart 扑动未来与设定状态

Dart 扑动未来与设定状态,dart,flutter,Dart,Flutter,当我得到API调用的结果时,我试图添加一个图像小部件。我的代码是: class AnimalDetailsPage extends StatefulWidget { final selection; _AnimalDetailsPage createState() => new _AnimalDetailsPage(); AnimalDetailsPage({Key key, this.selection}) : super(key: key); } class _Anim

当我得到API调用的结果时,我试图添加一个图像小部件。我的代码是:

class AnimalDetailsPage extends StatefulWidget {
  final selection;

  _AnimalDetailsPage createState() => new _AnimalDetailsPage();
  AnimalDetailsPage({Key key, this.selection}) : super(key: key);
}

class _AnimalDetailsPage extends State<AnimalDetailsPage> {

  Future<List> getphotos(horseId) async {
    http.Response response = await http.get(
        Uri.encodeFull(
            "http://myhorses.com/api/getHorsePhotos?horse_id=" +
                horseId));
    return JSON.decode(response.body);
  }

  @override
  Widget build(BuildContext context) {

    final menu = new MyMenuBar();

    List<Widget> bodyContent = [menu];
    dynamic body = new Column(
      crossAxisAlignment: CrossAxisAlignment.stretch,
      children: bodyContent,
    );

    if (widget.selection != null) {
      final horse = widget.selection;
      getphotos(horse['id'].toString()).then((res) {
        setState(() {
          bodyContent.add(new Image.network(res[0]['image']));
        });
      });

    } 

    return Scaffold(
      body: body,
    );
  }
}
class AnimalDetailsPage扩展了StatefulWidget{
最终选择;
_AnimalDetailsPage createState()=>新建;
动物细节({Key,this.selection}):超级(Key:Key);
}
类_AnimalDetailsPage扩展状态{
未来getphotos(horseId)异步{
http.Response-Response=等待http.get(
Uri.encodeFull(
"http://myhorses.com/api/getHorsePhotos?horse_id=" +
霍赛德);
返回JSON.decode(response.body);
}
@凌驾
小部件构建(构建上下文){
最终菜单=新建MyMenuBar();
列表bodyContent=[菜单];
动态主体=新列(
crossAxisAlignment:crossAxisAlignment.stretch,
儿童:身体内容,
);
if(widget.selection!=null){
最终马=小部件。选择;
getphotos(horse['id'].toString())。然后((res){
设置状态(){
添加(新的Image.network(res[0]['Image']);
});
});
} 
返回脚手架(
身体:身体,,
);
}
}

我无法理解的是setState不会更新视图。如果我将setState移出then语句并硬编码图像src,那么它工作正常。

bodyContent
build()中声明。

@覆盖
小部件构建(构建上下文){
最终菜单=新建MyMenuBar();
列表bodyContent=[菜单];
...
添加(新的Image.network(res[0]['Image']);
...
setState()
导致再次执行
build
,这意味着保存图像的
bodyContent
将被丢弃,而新创建的图像将被丢弃


List bodyContent=[menu];
移出
build()
方法,将其设置为类级字段,您应该会得到所需的结果。

非常感谢Gunter!
  @override
  Widget build(BuildContext context) {

    final menu = new MyMenuBar();

    List<Widget> bodyContent = [menu];
    ...
    bodyContent.add(new Image.network(res[0]['image']));
    ...