Флаттер Будущее и сет - PullRequest
0 голосов
/ 15 мая 2018

Я пытаюсь добавить виджет изображения, когда получаю результаты вызова 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,
    );
  }
}

Что я не могу понять, так это то, что setState не обновляет представление. Если я уберу setState из оператора then и жестко закодирую изображение src, то оно будет работать нормально.

1 Ответ

0 голосов
/ 15 мая 2018

bodyContent объявлено внутри build()

  @override
  Widget build(BuildContext context) {

    final menu = new MyMenuBar();

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

и setState() вызывает повторное выполнение build, что означает, что bodyContent, содержащий изображение, отбрасывается и создается новый.

Переместите List<Widget> bodyContent = [menu]; из метода build() и сделайте его полем уровня класса, и вы должны получить желаемый результат.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...