Я хочу использовать шестнадцатеричный код из firebase во Flutter

Я новичок в Firebase, и я, наконец, получил данные из Firebase для флаттера. Я работаю с цветами, и на каждой карточке есть цвет и номер цвета.

У меня есть в Firebase: поле colorCode, которое является строкой и имеет значение «0xFFFFB142».

Во Flutter я пытался сделать это так:

final int colorCode = list[index]['colorCode'].hashCode;

                            Container(
                              height: 25.0,
                              width: 25.0,
                              color: Color(colorCode),
                            ),

У меня нет провала, но я не вижу цвета.

Это должно быть целое число, но в строковом коде это шестнадцатеричное число. Когда я пытаюсь ввести int в Firebase, я получаю ошибку, потому что это шестнадцатеричный формат.

Обновление: Спасибо всем за вашу помощь! Я сам ввел код в Firebase. Это то же самое, что вы обычно указываете в этом месте, например, color: Color(0xFFFFB142), где FFB142 — это цвет #FFB142. В Firebase я использовал строку, потому что int или обычный код не разрешены. С моим кодом, когда я его печатаю: он получил 171924876, это неправильный код цвета.

Я пробовал это:

                    final dynamic colorCode =
                        list[index]['colorCode'].toString();

                    print(colorCode); // the right color code is printend: 0xFFFFB142

И когда я вставил это:

                            Container(
                              height: 25.0,
                              width: 25.0,
                              color: Color(0xFFFFB142),

Он отлично работает, но у меня есть для каждого элемента другой colorCode в Firebase.

Мне очень странно, что я получил это сообщение об ошибке, потому что мне нужен не int, а цветовой код, например 0xFFFFB142.

 type 'String' is not a subtype of type 'int'

Надеюсь, вы можете мне помочь!


person Margriet    schedule 23.02.2020    source источник
comment
Каков результат вывода переменной colorCode в консоль?   -  person Gabe    schedule 23.02.2020
comment
Конструктор Color, упомянутый в (Color Class), принимает значение типа int: Color(значение типа int), поэтому вместо него нельзя использовать строку. этот не будет работать Color(your_color).   -  person Abdelbaki Boukerche    schedule 23.02.2020
comment
Если конечный результат вам нужен и int, то перед сохранением в firebase преобразуйте Hex в и Int и сохраните его как int.   -  person Jay    schedule 24.02.2020
comment
Спасибо. Я отредактировал свой вопрос. Странно, что er является значением int, потому что обычно я использую не int, а шестнадцатеричный код.   -  person Margriet    schedule 24.02.2020
comment
Hex — это всего лишь один из способов представления int, как и десятичный (это то, что вы напечатали). Однако число 171924876 не очень хороший цвет. Где вы его взяли и как вы вставили его в Firebase?   -  person Richard Heap    schedule 24.02.2020
comment
Число 171924876 — это то, что я получаю, когда печатаю colorCode после кода: list[index]['colorCode'].hashCode; кажется, что он преобразует исходный код: 0xFFFFB142. Поэтому я удалил .hashCode, а затем распечатал код 0xFFFFB142. Это хороший colorCode, и когда я помещаю colorCode как 0xFFFFB142 в Color (0xFFFFB142), тогда все работает нормально. Но когда я ставлю Color(colorCode), я получаю ошибку.   -  person Margriet    schedule 24.02.2020
comment
Итак, добавьте код из ответа, а затем, где бы вы использовали Color(colorCode), используйте convertToColor(colorCode)   -  person Richard Heap    schedule 24.02.2020


Ответы (2)


Вы можете использовать функцию, которая усекает 0x и анализирует остальные как шестнадцатеричные.

Color convertToColor(String prefixedHex) => Color(int.parse(
      prefixedHex.substring(2),
      radix: 16,
    ));
person Richard Heap    schedule 23.02.2020
comment
Он создает новую строку, начинающуюся с третьего символа, то есть FFFFB142 - person Richard Heap; 24.02.2020
comment
Спасибо за помощь. Полный код - это то, что я заполняю сам. То есть я должен вводить код без первых двух символов? - person Margriet; 24.02.2020
comment
Я отредактировал свой вопрос, надеюсь, теперь я более понятен. Спасибо! - person Margriet; 24.02.2020

Я нашел простое решение для преобразования строкового кода «#FFB142» в цветовой код с помощью пакета: Flutter_Color.

https://pub.dev/packages/flutter_color

Код, который я использовал:

import 'package:flutter_color/flutter_color.dart';

final String colorCode = list[index]['colorCode'];

                            Container(
                              height: 25.0,
                              width: 25.0,
                              color: HexColor(colorCode),

Поэтому я импортировал пакет, пусть цветовой код будет строкой и использовал HexColor вместо Color.

Надеюсь, что это простое решение поможет и другим. Спасибо всем остальным за то, что указали мне правильное направление. В конце концов, речь шла не о firebase, а о преобразовании строки в цветовой код, поэтому я погуглил этот пакет.

person Margriet    schedule 24.02.2020
comment
Или вы можете сделать это в несколько строк, например: "flutter dart convert hex color string to color"> stackoverflow.com/questions/50381968/ Из вашего вопроса не было ясно, что у вас есть код #RRGGBB - person Richard Heap; 25.02.2020
comment
Спасибо, Ричард, за всю вашу помощь! Честно говоря, решение с этим пакетом для новичка вроде меня проще. - person Margriet; 25.02.2020