Ошибка флаттера Тип элемента «Список» не может быть присвоен типу списка «Виджет»

#flutter #dart #flutter-dependencies

Вопрос:

Я хочу показать два поля размера в условии if, подобном этому коду.

   body: Center(
    child: Column(
      mainAxisAlignment: MainAxisAlignment.center,
      children: <Widget>[
        Flexible(
          child: Row(
            mainAxisAlignment: MainAxisAlignment.spaceAround,
            children: <Widget>[
              if (randomNumber == 1)[
              
                SizedBox(
                  child: TextButton(
                    child: Image.asset('images/test1.jpg'),
                  ),
                ),

                SizedBox(
                  child: TextButton(
                    child: Image.asset('images/test2.jpg'),
                  ),
                ),
            ]
 

[ В строке if (randomNumber == 1)[ это показывает ошибку, подобную этой.

 The element type 'List<SizedBox>' can't be assigned to the list type 'Widget'.dart(list_element_type_not_assignable)
 

Как использовать два размерных ящика в состоянии if ?

Ответ №1:

Правильный ответ заключается в том, что внутри списков виджетов, если вы хотите добавить больше списков элементов, вам нужно использовать оператор»…». В этом случае это будет:

  Row(
    mainAxisAlignment: MainAxisAlignment.spaceAround,
    children: <Widget>[
      if (randomNumber == 1) ...[
          
        SizedBox(
          child: TextButton(
            child: Image.asset('images/test1.jpg'),
          ),
        ),

        SizedBox(
          child: TextButton(
            child: Image.asset('images/test2.jpg'),
          ),
        ),
    ],
)
 

Комментарии:

1. Спасибо, я раньше думал, что dart был близок к языку с, Теперь мне снова нужно изучать dart.

2. «…»- это эквивалент «Аддалла», и именно поэтому он работает. Вы также можете связать списки внутри списков, выполнив [ элемент, элемент, элемент ] [ элемент, элемент ], и массивы или объединят все вместе

Ответ №2:

Просто измените «если() []» на «если() {}». Оператор If else должен использовать фигурные скобки ({}). Не скобка/массив []

Комментарии:

1. фигурные скобки не работают внутри массивов виджетов

Ответ №3:

Вы возвращаете список списка. В операторе if есть [], удалите его и используйте вместо него {}.