FormatException:无效的 radix-16 数字(在字符 1 处)
FormatException: Invalid radix-16 number (at character 1)
我能够查明此函数的问题,但我不确定如何解决它。
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);
}
它 运行 变成 FormatException: Invalid radix-16 number (at character 1)
行 var c = int.parse(x, radix: 16);
我目前正在使用此函数传入 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): ^
这一行:
String x = hex.substring(i*2, 2);
i
将包含从 0 到 2(含)的值。
因此,当i=1
或i=2
时,startIndex 将等于或高于endIndex,并且substring 将return 为空。
来自文档:
Returns the substring of this string that extends from startIndex, inclusive, to endIndex, exclusive.
(第二个参数是endIndex,不是长度)
所以你应该使用:
String x = hex.substring(i*2, (i*2)+2);
从十六进制代码中单独提取 r/g/b 值。
有时我们必须使用基数格式的字符串。 Dart int parse()
方法还支持将字符串转换为基数在 2..36:
范围内的数字
比如我们把一个十六进制字符串转成整型:
var n_16 = int.parse('FF', radix: 16);
// 255
我能够查明此函数的问题,但我不确定如何解决它。
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);
}
它 运行 变成 FormatException: Invalid radix-16 number (at character 1)
行 var c = int.parse(x, radix: 16);
我目前正在使用此函数传入 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): ^
这一行:
String x = hex.substring(i*2, 2);
i
将包含从 0 到 2(含)的值。
因此,当i=1
或i=2
时,startIndex 将等于或高于endIndex,并且substring 将return 为空。
来自文档:
Returns the substring of this string that extends from startIndex, inclusive, to endIndex, exclusive.
(第二个参数是endIndex,不是长度)
所以你应该使用:
String x = hex.substring(i*2, (i*2)+2);
从十六进制代码中单独提取 r/g/b 值。
有时我们必须使用基数格式的字符串。 Dart int parse()
方法还支持将字符串转换为基数在 2..36:
比如我们把一个十六进制字符串转成整型:
var n_16 = int.parse('FF', radix: 16);
// 255