dart 无法将参数类型color?赋给参数类型Color

bnlyeluc  于 2022-12-25  发布在  其他
关注(0)|答案(1)|浏览(162)

'我想将边框颜色设置为红色,但出现错误
无法将参数类型"Color?"赋给参数类型"Color"。

ListTileWidget(title: "Home", subtitle: "The home is here",iconColor: Colors.red,)
class ListTileWidget extends StatelessWidget {

  Color? listTileColor, iconColor;

  ListTileWidget({Key? key, 
    this.iconColor,
  }) : super(key: key);

  @override
  Widget build(BuildContext context) {
    return Padding(
      padding: const EdgeInsets.all(10.0),
      child: ListTile(
        tileColor: listTileColor,
        shape: ContinuousRectangleBorder(
          borderRadius: BorderRadius.circular(15),
          side: BorderSide(color: iconColor,
          width: 1.0),
        ),
      ),
    );
  }
}
s3fp2yjn

s3fp2yjn1#

此问题与空值安全有关,因此请阅读https://dart.dev/null-safety
您正在使用Color?声明iconColor,这意味着它可以为null。但BorderSidecolor参数要求Color不可为null,因此您不能为您分配可为null的iconColor

解决方案1

使iconColor不可为空,因此它不能为空。

class ListTileWidget extends StatelessWidget {
  const ListTileWidget({
    Key? key,
    required this.iconColor,
    this.listTileColor,
  }) : super(key: key);

  final Color? listTileColor;
  final Color iconColor;

  @override
  Widget build(BuildContext context) {
    return Padding(
      padding: const EdgeInsets.all(10.0),
      child: ListTile(
        tileColor: listTileColor,
        shape: ContinuousRectangleBorder(
          borderRadius: BorderRadius.circular(15),
          side: BorderSide(color: iconColor, width: 1.0),
        ),
      ),
    );
  }
}

解决方案2

iconColor保留为空,如果为空,则使用默认颜色。

class ListTileWidget extends StatelessWidget {
  const ListTileWidget({
    Key? key,
    this.iconColor,
    this.listTileColor,
  }) : super(key: key);

  final Color? listTileColor;
  final Color? iconColor;

  @override
  Widget build(BuildContext context) {
    return Padding(
      padding: const EdgeInsets.all(10.0),
      child: ListTile(
        tileColor: listTileColor,
        shape: ContinuousRectangleBorder(
          borderRadius: BorderRadius.circular(15),
          side: BorderSide(
            color: iconColor ?? Colors.black,
            width: 1.0,
          ),
        ),
      ),
    );
  }
}

您可以找到更多的解决方案,例如,如果iconColor为null,则不使用Border

备注:

StatelessWidget是不可变的,因此使用关键字final来声明小部件变量,并在构造函数之前使用const

相关问题