在 Flutter 中无法将参数类型“Icon”分配给参数类型“IconData”

时间:2021-07-22 05:39:38

标签: flutter dart

我是 Flutter 的新手。我的应用程序中有可扩展列表。我在为可扩展列表的标题分配图标时遇到问题。标题分配得很好。我正在使用它来要求所需的数据:

class ExpandableListItem {
  bool isExpanded;
  final String header;
  final String body;
  final Icon icon; // icon problem

  ExpandableListItem(
      {this.isExpanded: false,
      required this.header,
      required this.body,
      required this.icon});
}

之后,我传递了这样所需的参数:

ExpandableListItem(
     header: 'Факультеты',
     body: 'news',
     icon: Icon(
       Icons.ac_unit,
       color: Colors.red,
     ),
   ),

当我用它把它分配给标题时,我用这个:

return Row(
                          mainAxisAlignment: MainAxisAlignment.start,
                          children: [
                            Icon(
                              item.icon
                            ),
                            SizedBox(width: 8),
                            Text(
                              item.header,
                              style: MainTheme.lightTheme.textTheme.headline2,
                            )
                          ],
                        );

问题就在这里。我的错误是

<块引用>

“不能将参数类型‘Icon’分配给参数类型‘IconData?’”。我该如何解决这个错误?

2 个答案:

答案 0 :(得分:1)

这里的问题是,在 ExpandableListItem class 中,您有一个 Icon 类型的字段,并且它已经是一个图标小部件。因此,在您的 Row 小部件中,您不需要添加/创建新的 Icon 小部件。

相反,您可以直接使用 item.icon 作为图标小部件。

return Row(
                      mainAxisAlignment: MainAxisAlignment.start,
                      children: [
                          item.icon
                        ,
                        SizedBox(width: 8),
                        Text(
                          item.header,
                          style: MainTheme.lightTheme.textTheme.headline2,
                        )
                      ],
                    );

答案 1 :(得分:0)


class ExpandableListItem {
  bool isExpanded;
  final String header;
  final String body;
  final Widget icon; 
}
ExpandableListItem(
     header: 'Факультеты',
     body: 'news',
     icon: Icon(
       Icons.ac_unit,
       color: Colors.red,
     ),
   ),
return Row(
  mainAxisAlignment: MainAxisAlignment.start,
  children: [
    item.icon,
    SizedBox(width: 8),
    Text(
      item.header,
      style: MainTheme.lightTheme.textTheme.headline2,
    )
  ],
);