Flutter null 安全 - 参数类型“颜色?” 不能分配给参数类型“颜色”

AJ9*_*989 8 flutter dart-null-safety

我将 flutter 的 SDK 版本更改为 min ,以便我可以修复我的代码以确保空值安全。

有一个我不明白的问题,这一行产生了以下错误:

The argument type 'Color?' can't be assigned to the parameter type 'Color'

border: Border.all(color: Colors.grey[300], width: 1),
Run Code Online (Sandbox Code Playgroud)

但是如果我改变Colors.grey[300]任何不使用的值[],它就会工作,所以Colors.grey工作得很好。

我应该在这里更改什么以继续使用grey[300]

Cop*_*oad 11

问题:

Color color = Colors.grey[300]; // Error in null-safe mode
Run Code Online (Sandbox Code Playgroud)

当您使用 时Colors.grey[300],您实际上是从MapDart(在空安全模式下)警告您的颜色中获取颜色,因为该值可能是null. 查看更多


解决方案:

有两种解决方案。一种是通用的,一种仅针对这种情况。

  1. 使用 Bang 运算符 ( !)

    Color color = Colors.grey[300]!  // Added '!', error gone 
    
    Run Code Online (Sandbox Code Playgroud)
  2. 使用shadeXXXColor

    Color color = Colors.grey.shade300;
    
    Run Code Online (Sandbox Code Playgroud)


Sim*_*Sot 8

您可以用于0xFFE0E0E0灰色[300]。

要选择材质颜色,您可以使用此工具

要从样本之一中选择特定颜色,请使用所需特定颜色的整数对样本进行索引,如下所示:

Color selection = Colors.green[400]!; // Selects a mid-range green.
Run Code Online (Sandbox Code Playgroud)

每个 ColorSwatch 常量都是一种颜色,可以直接使用。例如:

Container(
  color: Colors.blue, // same as Colors.blue[500] or Colors.blue.shade500
)
Run Code Online (Sandbox Code Playgroud)

  • 是的,您可以在这里检查问题 https://github.com/flutter/flutter/issues/71591#issue-755539014 (2认同)