FormatException: недопустимый номер radix-16 (в символе 1) - PullRequest
0 голосов
/ 05 марта 2020

Мне удалось точно определить проблему с помощью этой функции, но я не уверен, как ее исправить.

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): ^

1 Ответ

0 голосов
/ 05 марта 2020

В этой строке:

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

i будет содержать значения от 0 до 2 (включительно).

Таким образом, когда i=1 или i=2, startIndex будет будет равно или больше, чем endIndex, и подстрока вернется пустой.

Из документации:

Возвращает подстроку этой строки, которая начинается с startIndex. , включительно, до endIndex, эксклюзив.

(Второй параметр - это endIndex, не длина)

Поэтому вы должны использовать:

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

Чтобы извлечь значения r / g / b отдельно от шестнадцатеричного кода.

...