【问题标题】:Error when adding container color: Incorrect use of ParentDataWidget添加容器颜色时出错:ParentDataWidget 的使用不正确
【发布时间】:2019-11-24 16:02:25
【问题描述】:

我正在尝试为我的容器添加背景颜色,然后可能会使用 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)
        );
      }
    ),
  ),
)

【问题讨论】:

    标签: flutter dart flutter-layout flutter-listview


    【解决方案1】:

    这个错误说明的是小部件Expanded 必须放在Flex widget 中。 Flex 小部件包括行、列等。考虑您是否希望在容器内拥有多个项目,以及您希望它们是水平的还是垂直的。

    快速解决方法是将Expanded 包装为RowColumn,但这取决于您想要什么。

    这是使用您的代码的示例:

    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
                  ],
                ),
              ),
            ),
          ],
        );
      }
    }
    

    【讨论】:

    • 感谢您的回复。由于某种原因,此方法使 ListView 完全消失
    • 我认为这归结为容器的父级,父级是什么?那里可能会发生冲突。
    • 容器的父级是另一个Column
    • 您是否有机会更新您的代码以显示您如何使用该列?只是想确保你有属性 children
    • @Jonathon Scratch 我想我明白了,在包装容器的列内添加扩展。检查答案中的编辑:-)
    猜你喜欢
    • 1970-01-01
    • 2021-10-04
    • 1970-01-01
    • 1970-01-01
    • 2021-06-21
    • 2021-01-20
    • 2020-11-18
    • 2021-04-14
    • 2022-06-12
    相关资源
    最近更新 更多