Ошибка при добавлении цвета контейнера: неправильное использование ParentDataWidget

Я пытаюсь добавить цвет фона к своему контейнеру, а затем, возможно, добавить радиус границы с помощью BoxDecoration (). При добавлении color: Colors.red в контейнер он выбрасывает:

Неправильное использование ParentDataWidget. Развернутый виджет необходимо размещать непосредственно внутри виджетов Flex.

Container(
  color: Colors.red,
  child: Expanded(
    child: ListView.builder(
      padding: EdgeInsets.all(0.0),
      itemCount: _clients.length,
      itemBuilder: (context, index) {
        final client = _clients[index];

        return Dismissible(
          key: Key(client),
          direction: DismissDirection.startToEnd,
          onDismissed: (direction) {
            setState(() {
              _clients.removeAt(index);
            });
          },
          background: Container(color: Color(0xff171e24)),
          child: _clientListTile(context, client)
        );
      }
    ),
  ),
)

person Jonathon    schedule 15.07.2019    source источник


Ответы (1)


Эта ошибка указывает на то, что виджет Expanded должен быть помещен в Flex widget. Гибкие виджеты включают в себя строки, столбцы и т. Д. Подумайте, хотите ли вы, чтобы внутри контейнера было несколько элементов, и хотите ли вы, чтобы они были горизонтальными или вертикальными.

Быстрое решение - заключить Expanded в Row или Column, но это зависит от того, что вы хотите.

Вот пример использования вашего кода:

class Test extends StatelessWidget {

  final _clients = ["1","2","3","4","5"];

  @override
  Widget build(BuildContext context) {
    return Container(
      color: Colors.red,
      child: Row(             //or column
        children: <Widget>[
          Expanded(
            child: ListView.builder(
              padding: EdgeInsets.all(0.0),
              itemCount: _clients.length,
              itemBuilder: (context, index) {
                final client = _clients[index];

                return Dismissible(
                  key: Key(client),
                  direction: DismissDirection.startToEnd,
                  onDismissed: (direction) {print(direction);},
                  background: Container(color: Color(0xff171e24)),
                  child: Text("Client: " + client)
                );
              }
            ),
          ),
          //add another item if you want its a row or column after all :-)
        ],
      )
    );
  }
}

Дайте знать, если у вас появятся вопросы!

ИЗМЕНИТЬ

Поскольку вы сказали, что он вложен в столбец, попробуйте использовать Expanded(), чтобы растянуть его по Flex Widget.

Здесь показано:

class Test extends StatelessWidget {

  final _clients = ["1","2","3","4","5"];

  @override
  Widget build(BuildContext context) {
    return Column(
      children: <Widget> [
        Expanded(         //RIGHT HERE
          child: Container(
            color: Colors.red,
            child: Row( //or column
              children: <Widget>[
                Expanded(
                  child: ListView.builder(
                    padding: EdgeInsets.all(0.0),
                    itemCount: _clients.length,
                    itemBuilder: (context, index) {
                      final client = _clients[index];

                      return Dismissible(
                        key: Key(client),
                        direction: DismissDirection.startToEnd,
                        onDismissed: (direction) {print(direction);},
                        background: Container(color: Color(0xff171e24)),
                        child: Text("Client: " + client)
                      );
                    },
                  ),
                ),
                //add another item if you want its a row
              ],
            ),
          ),
        ),
      ],
    );
  }
}
person Anthony Sette    schedule 16.07.2019
comment
Я ценю ответ. По какой-то причине этот метод заставляет ListView полностью исчезать - person Jonathon; 16.07.2019
comment
Я думаю, это сводится к родительскому элементу контейнера, что является родителем? Там мог быть конфликт. - person Anthony Sette; 16.07.2019
comment
Родителем контейнера является другой столбец - person Jonathon; 16.07.2019
comment
Есть ли шанс обновить свой код, чтобы показать, как вы используете столбец? Просто хочу убедиться, что у вас есть атрибут children ‹Widget []. Просто не понимаю, почему не работает, ошибки не вижу. - person Anthony Sette; 16.07.2019
comment
@Jonathon Scratch, я думаю, я понял, добавьте развернутый столбец внутри контейнера, обертывающий контейнер. Отметьте редактирование в ответе :-) - person Anthony Sette; 16.07.2019
comment
Спасибо за помощь, Энтони. Я свяжусь с вами как можно скорее и попробую решение! - person Jonathon; 17.07.2019