【问题标题】:Flutter null safety - The argument type 'Color?' can't be assigned to the parameter type 'Color'Flutter null 安全性 - 参数类型“颜色?”不能分配给参数类型“颜色”
【发布时间】: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]

【问题讨论】:

    标签: flutter dart-null-safety


    【解决方案1】:

    问题:

    Color color = Colors.grey[300]; // Error in null-safe mode
    

    当您使用Colors.grey[300] 时,您实际上是从Map 获取颜色,Dart(在空安全模式下)会警告您,因为该值可能是nullSee more


    解决方案:

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

    1. 使用 Bang 运算符 (!)

      Color color = Colors.grey[300]!  // Added '!', error gone 
      
    2. 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
    )
    

    【讨论】:

    【解决方案3】:

    像使用 shade300 颜色color = Colors.grey.shade300;

    【讨论】:

      猜你喜欢
      • 2021-06-05
      • 2021-08-15
      • 2022-01-16
      • 2021-12-14
      • 2020-11-29
      • 2021-08-27
      • 2021-08-18
      • 2023-04-09
      • 2021-12-22
      相关资源
      最近更新 更多