断言失败:第 24 行 pos 15:'color != null && color.alpha == 0xFF':不正确

Posted

技术标签:

【中文标题】断言失败:第 24 行 pos 15:\'color != null && color.alpha == 0xFF\':不正确【英文标题】: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 不透明,它应该总是完全不透明的。 【参考方案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),

我的错误消失了。

【讨论】:

以上是关于断言失败:第 24 行 pos 15:'color != null && color.alpha == 0xFF':不正确的主要内容,如果未能解决你的问题,请参考以下文章

错误:未布置 RenderBox,断言失败:第 1940 行 pos 12:'hasSize'

断言失败:第 551 行 pos 12:'child.hasSize':不正确

断言失败:第 6075 行 pos 12:'child == _child':不正确

断言失败:第 22 行 pos 14: 'url != null': is not true

断言行 5120 pos 12 失败:'child = _child' 不正确

断言失败:第 125 行第 12 行:'assertMidButtonStyles(navBarStyle, items!.length)'