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 安全性?

Flutter null 安全条件小部件

Flutter - 参数类型“Object”不能分配给参数类型“Map<String, dynamic>”

Flutter intl 生成文件,null 安全问题

库 'package:flutter/material.dart' 是遗留的,不应导入到 null 安全库中