添加容器颜色时出错:ParentDataWidget 的使用不正确

Posted

技术标签:

【中文标题】添加容器颜色时出错:ParentDataWidget 的使用不正确【英文标题】:Error when adding container color: Incorrect use of 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)
        );
      
    ),
  ),
)

【问题讨论】:

【参考方案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 我想我明白了,在包装容器的列内添加扩展。检查答案中的编辑:-)

以上是关于添加容器颜色时出错:ParentDataWidget 的使用不正确的主要内容,如果未能解决你的问题,请参考以下文章

将自定义主题添加到应用程序时出错

如何为容器添加背景颜色,包括 Flutter 中的 Expanded

连接到 Azure 容器时出错

在laravel excel导出中将颜色应用于excel单元格时出错

尝试从 Spring Boot Docker 容器连接到 mongo Docker 容器时验证 MongoCredential 时出错?

构建 Docker 容器时出错