Flutter null 安全性 - 参数类型“颜色?”不能分配给参数类型“颜色”
Posted
技术标签:
【中文标题】Flutter null 安全性 - 参数类型“颜色?”不能分配给参数类型“颜色”【英文标题】:Flutter null safety - The argument type 'Color?' can't be assigned to the parameter type 'Color' 【发布时间】:2021-06-16 17:54:03 【问题描述】:我将 Flutter 的 SDK 版本更改为 min ,以便我可以修复我的代码以确保 null 安全。
有一个问题我不明白, 此行产生以下错误:
The argument type 'Color?' can't be assigned to the parameter type 'Color'
border: Border.all(color: Colors.grey[300], width: 1),
但是,如果我将 Colors.grey[300]
更改为不使用 []
的任何值,它将起作用,
所以Colors.grey
工作得很好。
我应该在此处更改什么以继续使用grey[300]
?
【问题讨论】:
【参考方案1】:问题:
Color color = Colors.grey[300]; // Error in null-safe mode
当您使用Colors.grey[300]
时,您实际上是从Map
获取颜色,Dart(在空安全模式下)会警告您,因为该值可能是null
。 See more
解决方案:
有两种解决方案。一种是通用的,一种是针对这种情况的。
使用 Bang 运算符 (!
)
Color color = Colors.grey[300]! // Added '!', error gone
在Color
上使用shadeXXX
Color color = Colors.grey.shade300;
【讨论】:
试过了,现在我得到“无效的常量值” @giorgio79 虽然不相关但是你用的是什么颜色? 是的,尝试使用其中一种色调。原来这些不是恒定的,所以必须使用十六进制代码颜色(#123456 ...)哈哈。 Flutter 中较大的粪堆之一 @giorgio79 但我的回答与它无关。在使用此答案之前,您必须已经收到相同的错误。例如:Colors.grey[300]
一开始就已经是非常量了。【参考方案2】:
您可以将0xFFE0E0E0
用于灰色[300]。
要选择材质颜色,您可以使用此tool。
要从其中一个色板中选择特定颜色,请使用所需特定颜色的整数索引色板,如下所示:
Color selection = Colors.green[400]!; // Selects a mid-range green.
每个 ColorSwatch 常量都是一种颜色,可以直接使用。例如:
Container(
color: Colors.blue, // same as Colors.blue[500] or Colors.blue.shade500
)
【讨论】:
是的,我注意到了,但这是否意味着不再允许使用带有 [x] 的特定颜色深浅,因为 Flutter 2 中的安全性为零? 好吧,你可以在这里查看问题github.com/flutter/flutter/issues/71591#issue-755539014【参考方案3】:像使用 shade300 颜色color = Colors.grey.shade300;
【讨论】:
以上是关于Flutter null 安全性 - 参数类型“颜色?”不能分配给参数类型“颜色”的主要内容,如果未能解决你的问题,请参考以下文章
Flutter 使用合理的 null 安全性将多级 JSON 解析为类
在 2.7.0 之前的 sdk 版本中,是不是需要 Flutter 来保证 null 安全性?