首页 > 解决方案 > ParentDataWidget 的错误使用 - 行和容器

问题描述

我正在尝试构建一个带有一行的容器。在这一行中,我想要 4 个图标。

如果我这样做了,我的问题是我收到错误“不正确使用 ParentDataWidget”。

我找不到问题出在哪里。如果您能帮我解决这个问题,我们将不胜感激。非常感谢。

 Card(
                        child:
                        Container(
                          // color: Colors.red,
                          alignment: Alignment.center,
                          child: Row(
                            mainAxisAlignment: MainAxisAlignment.center,
                            children:[
                              //Time
                              FlatButton(
                                child:
                                InkWell(
                                  child: Container(
                                    //  color: Colors.white,
                                      child: Column(
                                        mainAxisAlignment: MainAxisAlignment.center,
                                        children: [
                                          Icon(Icons.timer),
                                          Text('Time'),
                                        ],
                                      )
                                  ),
                                  onTap: () {
                                    print("Tapped on Time");
                                  },
                                ),
                              ),

                              //Energy
                              FlatButton(
                                child:
                                InkWell(
                                  child: Expanded(
                                    child: Container(
                                      //   color: Colors.white,
                                        child: Column(
                                          mainAxisAlignment: MainAxisAlignment.center,
                                          children: [
                                            Icon(Icons.battery_charging_full),
                                            Text('Energy'),
                                          ],
                                        )
                                    ),
                                  ),
                                  onTap: () { },
                                ),
                              ),

                              //Important
                              FlatButton(
                                child:
                                InkWell(
                                  child: Expanded(
                                    child: Container(
                                      //   color: Colors.white,
                                        child: Column(
                                          mainAxisAlignment: MainAxisAlignment.center,
                                          children: [
                                            isImportant =="true" ? Icon(Icons.star,color: Colors.orange,) :
                                            Icon(Icons.star_border, color: Colors.grey,),
                                            // Icon(Icons.battery_charging_full),
                                            Text('Important'),
                                          ],
                                        )
                                    ),
                                  ),
                                  onTap: () {
                                    setState(() {
                                      if (isImportant=='true'){
                                        isImportant = 'false';}
                                      else
                                      {isImportant= 'true';
                                      }
                                    });
                                  },
                                ),
                              ),

                              //Urgent
                              FlatButton(
                                child:
                                InkWell(
                                  child: Expanded(
                                    child: Container(
                                      //   color: Colors.white,
                                        child: Column(
                                          mainAxisAlignment: MainAxisAlignment.center,
                                          children: [
                                            isUrgent =="true" ? Icon(Icons.flag,color: Colors.red,) :
                                            Icon(Icons.outlined_flag, color: Colors.grey,),
                                            // Icon(Icons.battery_charging_full),
                                            Text('Urgent'),
                                          ],
                                        )
                                    ),
                                  ),
                                  onTap: () {
                                    setState(() {
                                      if (isUrgent=='true'){
                                        isUrgent = 'false';}
                                      else
                                      {isUrgent= 'true';
                                      }
                                    });
                                  },
                                ),
                              ),
                            ],
                          ),

                        )),

标签: fluttericons

解决方案


您正在使用无法使用的扩展小部件。Expanded 小部件的父级只能是 Flex 小部件。展开的小部件必须是 Row、Column 或 Flex 小部件的子级。

因此,您必须从扩展小部件的父级不是行、列或 Flex 的所有地方删除扩展小部件。例如,在下面的代码中,Expanded 小部件是 FlatButton 的子组件,因此您必须从此处删除 Expanded。

                          FlatButton(
                            child:
                            InkWell(
                >>>>>>>>>     child: Expanded(     <<<<< REMOVE FROM HERE 
                                child: Container(
                                  //   color: Colors.white,
                                    child: Column(
                                      mainAxisAlignment: MainAxisAlignment.center,
                                      children: [
                                        Icon(Icons.battery_charging_full),
                                        Text('Energy'),
                                      ],
                                    )
                                ),
                              ),
                              onTap: () { },
                            ),
                          ),

请参考 Flutter 文档:扩展类

展开

扩展 Row、Column 或 Flex 的子项以使子项填充可用空间的小部件。

使用 Expanded 小部件使 Row、Column 或 Flex 的子项展开以填充沿主轴的可用空间(例如,水平的 Row 或垂直的 Column)。如果展开多个子节点,则可用空间根据弹性因子在它们之间分配。

Expanded 小部件必须是 Row、Column 或 Flex 的后代,并且从 Expanded 小部件到其封闭的 Row、Column 或 Flex 的路径必须仅包含 StatelessWidget 或 StatefulWidget(而不是其他类型的小部件,如 RenderObjectWidgets)。


推荐阅读