【问题标题】:FormatException: Invalid radix-16 number (at character 1)FormatException:无效的 radix-16 数字(在字符 1 处)
【发布时间】:2020-03-05 18:15:17
【问题描述】:

我能够查明此功能的问题,但我不确定如何解决。

Color colorLuminance(String hex, double lum){
  // Verifying & extending hex length
  if (hex.length < 6) {
    hex = hex[0]+hex[0]+hex[1]+hex[1]+hex[2]+hex[2];
  }

  // Convert to decimal and change luminosity
  var rgb = "", i;
    for (i = 0; i < 3; i++) {
        String x = hex.substring(i*2, 2);
        var c = int.parse(x, radix: 16);
        double a = c + (c * lum);
        double y = min(max(0, a), 255);
        x = y.round().toRadixString(16);
        rgb += ("00"+x).substring(x.length);
    }

  return Color(int.parse(rgb.substring(0, 7), radix: 16) + 0xFF000000);
}

它与var c = int.parse(x, radix: 16); 行遇到FormatException: Invalid radix-16 number (at character 1)

我目前正在使用此函数传入Color(0xFFffffff)

String colorToString(Color c){
  String colorString = c.toString();
  String valueString = colorString.substring(10, colorString.length - 1);
  return valueString;
}

这是我尝试flutter run时的输出:

I/flutter ( 7991): ══╡ EXCEPTION CAUGHT BY WIDGETS LIBRARY ╞═══════════════════════════════════════════════════════════
I/flutter ( 7991): The following FormatException was thrown building _BodyBuilder:
I/flutter ( 7991): Invalid radix-16 number (at character 1)
I/flutter ( 7991):
I/flutter ( 7991): ^

【问题讨论】:

    标签: flutter formatexception radix


    【解决方案1】:

    在这一行:

    String x = hex.substring(i*2, 2);
    

    i 将包含从 0 到 2(含)的值。

    所以,当i=1i=2时,startIndex将等于或大于endIndex,substring将返回空。

    来自文档:

    返回此字符串的子字符串,该子字符串从 startIndex(包括)延伸到 endIndex(不包括)。

    (第二个参数是endIndex,不是长度)

    所以你应该使用:

    String x = hex.substring(i*2, (i*2)+2);

    从十六进制代码中分别提取 r/g/b 值。

    【讨论】:

      【解决方案2】:

      有时我们必须使用基数格式的字符串。 Dart int parse() 方法还支持将字符串转换为基数在 2..36 范围内的数字:

      例如,我们将一个Hex字符串转换为int:

      var n_16 = int.parse('FF', radix: 16);
      // 255
      

      【讨论】:

        猜你喜欢
        • 2021-04-07
        • 2021-06-11
        • 1970-01-01
        • 2021-05-30
        • 2021-07-18
        • 2022-11-14
        • 1970-01-01
        • 2019-09-04
        • 1970-01-01
        相关资源
        最近更新 更多