【问题标题】:Failed assertion: line 24 pos 15: 'color != null && color.alpha == 0xFF': is not true断言失败:第 24 行 pos 15:'color != null && color.alpha == 0xFF':不正确
【发布时间】:2020-08-31 22:58:06
【问题描述】:

当 RGBO 块中的不透明度为 1 时,它可以正常工作。但是,如果我尝试增加或减少原色的不透明度,则会在 Flutter 中引发错误

return MaterialApp(
      debugShowCheckedModeBanner: false,
      title: 'Savay',
      theme: ThemeData(
          fontFamily: 'sen',
          primaryColor: Color.fromRGBO(49, 67, 89, 0.8),
          accentColor: Color.fromRGBO(248, 248, 248, 1)),
      home: Filters(),
    );

【问题讨论】:

  • 你不能给 primaryColor 不透明,它应该总是完全不透明的。

标签: flutter flutter-web


【解决方案1】:

正如之前在 cmets 中提到的,theme 中设置的颜色应该始终是不透明的。您可能希望单独为小部件单独设置颜色不透明度。除了使用Colors.fromRGBO,您还可以使用Colors.{COLOR}.withOpacity(0.5) 设置不透明度。

【讨论】:

    【解决方案2】:

    我得到了这个错误,为什么要尝试将 rgba 转换为 argb,但我用这段代码解决了它

     int hexOfRGBA(int r,int g,int b,{double opacity=1})
     {
      var  value=((((opacity * 0xff ~/ 1) & 0xff) << 24) |
       ((r                    & 0xff) << 16) |
       ((g                    & 0xff) << 8)  |
       ((b                    & 0xff) << 0)) & 0xFFFFFFFF;
      return value;
     }
    

    我是从这里得到的https://api.flutter.dev/flutter/dart-ui/Color/Color.fromRGBO.html 我认为您可以将 rgbo 传递为十六进制值,并将其作为材质颜色添加到主题数据中,如下所示

    首先,为您的材质颜色创建贴图

       Map<int, Color> color =
      {
        50:primaryColor.withOpacity(0.1),
        100:primaryColor.withOpacity(0.2),
        200:primaryColor.withOpacity(0.3),
        300:primaryColor.withOpacity(0.4),
        400:primaryColor.withOpacity(0.5),
        500:primaryColor.withOpacity(0.6),
        600:primaryColor.withOpacity(0.7),
        700:primaryColor.withOpacity(0.8),
        800:primaryColor.withOpacity(0.9),
        900:primaryColor.withOpacity(1.0),
      };
    

    其中primaryColor =Color.fromRGBO(49, 67, 89, 0.8); // 主题数据中的一种颜色, 然后创建一个函数将其转换为十六进制代码

        int hexOfRGBA(int r,int g,int b,{double opacity=1})
     {
      var  value=((((opacity * 0xff ~/ 1) & 0xff) << 24) |
       ((r                    & 0xff) << 16) |
       ((g                    & 0xff) << 8)  |
       ((b                    & 0xff) << 0)) & 0xFFFFFFFF;
      return value;
     }
    

    现在不再像这样直接传递 rgbo 代码,而是将每个 rgbo 作为材质颜色传递

    theme: ThemeData(
                 primarySwatch: MaterialColor(hexOfRGBA(49, 67, 89,  opacity:0.8),color )
                ),
    

    其中颜色,是我们早期创建的颜色映射,十六进制颜色来自函数,里面的 rgbo 是我们放入映射中的 rgbo。 您可以对两种颜色都执行此操作,并将它们作为材质颜色而不是 rgbo 传递到主题数据中

    【讨论】:

      【解决方案3】:

      我遇到了同样的错误

      我只是去了 C:\src\flutter\packages\flutter\lib\src\widgets\title.dart 然后到第 24 行 并简单地将== 更改为 Not= 即

      assert(color != null && color.alpha **!=** 0xFF),
      

      我的错误消失了。

      【讨论】:

        猜你喜欢
        • 2019-06-24
        • 2021-05-12
        • 1970-01-01
        • 2019-05-24
        • 1970-01-01
        • 1970-01-01
        • 2020-12-14
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多