Флаттер как реорганизовать список виджетов - PullRequest
0 голосов
/ 18 сентября 2018

Я пытаюсь визуализировать виджеты на Stack, и есть enum, и в этом состоянии я хочу отображать разные виджеты, кроме фонового изображения, подобного этому.enter image description here.

Stack теперь выглядит так

new Stack(
    children: <Widget>[
      new Image.network(
        'https://images.unsplash.com/photo-1536226078409-fb25e1ed23b9?ixlib=rb-0.3.5&ixid=eyJhcHBfaWQiOjEyMDd9&s=51ea5572bb7bbdf19e616f3550fccd9d&auto=format&fit=crop&w=500&q=60',
         fit: BoxFit.cover,
         height: MediaQuery.of(context).size.height,
         width: MediaQuery.of(context).size.width,
      ),
      // render widgets here.
    ],
  ),

Затем я хочу выполнить рендеринг на основе состояния enum.Итак, код будет таким.

 List<Widget> listOfWidget() {
    return [];
  }

 new Stack(
        children: <Widget>[
          new Image.network(
            'https://images.unsplash.com/photo-1536226078409-fb25e1ed23b9?ixlib=rb-0.3.5&ixid=eyJhcHBfaWQiOjEyMDd9&s=51ea5572bb7bbdf19e616f3550fccd9d&auto=format&fit=crop&w=500&q=60',
             fit: BoxFit.cover,
             height: MediaQuery.of(context).size.height,
             width: MediaQuery.of(context).size.width,
          ),
          listOfWidget(),
        ],
      ),

Однако ошибка говорит о том, что

Тип элемента "Список" нельзя назначить типу списка "Виджет".

Iполностью понимаю, что происходит, но я не знаю, как это исправить.Как я могу рефакторинг это?

1 Ответ

0 голосов
/ 18 сентября 2018

Свойство children в Stack представляет собой List<Widget>.

Вы задаете ему значение [Widget, List<Widget>], которое представляет собой список с разнородными элементами (первый - Widget, второй -элементы это List).Таким образом, ваше заданное значение не List<Widget>, как это необходимо, а List<dynamic>.Второй элемент в вашем List<dynamic> - это List<Widget>, который должен быть назначен на Widget, что невозможно, поэтому возникает ошибка.

Вы можете сделать что-то вроде этого:

List<Widget> listOfWidget() {
    return [];
}

new Stack(
    children: <Widget>[
        [new Image.network(
        'https://images.unsplash.com/photo-1536226078409-fb25e1ed23b9?ixlib=rb-0.3.5&ixid=eyJhcHBfaWQiOjEyMDd9&s=51ea5572bb7bbdf19e616f3550fccd9d&auto=format&fit=crop&w=500&q=60',
            fit: BoxFit.cover,
            height: MediaQuery.of(context).size.height,
            width: MediaQuery.of(context).size.width,
        )],
        listOfWidget(),
    ].expand((list) => list).toList();,
),

Обратите внимание, что вы также поместили оригинальное изображение в список.Так что в основном это сгладит ваш список, чтобы создать окончательный List<Widget>.

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