ฉันต้องการใช้รหัสฐานสิบหกจาก 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 แต่เป็นเลขฐานสิบหกในโค้ดสตริง เมื่อฉันลอง int ใน Firebase ฉันพบความล้มเหลวเพราะมันเป็นเลขฐานสิบหก

อัปเดต: ขอบคุณทุกท่านสำหรับความช่วยเหลือของคุณจนถึงตอนนี้! ฉันป้อนรหัสด้วยตัวเองใน Firebase มันเหมือนกับที่คุณใส่ตามปกติในตำแหน่งนั้น เช่น color: Color(0xFFFFB142) โดยที่ FFB142 คือสี #FFB142 ใน Firebase ฉันใช้ String เนื่องจากไม่อนุญาตให้ใช้รหัส 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),

มันใช้งานได้ดี แต่ฉันมีรหัสสีอื่นใน 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
ตัวสร้างสีตามที่กล่าวไว้ใน (คลาสสี) เข้ามา ค่า int: สี(int value) ดังนั้นคุณ ไม่สามารถใช้สตริงได้ แทน นี้จะไม่ทำงาน 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 ที่พิมพ์ออกมา นั่นคือรหัสสีที่ดีและเมื่อฉันใส่รหัสสีเป็น 0xFFFFB142 ในสี (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 แต่เป็นการแปลงสตริงเป็นรหัสสี ดังนั้นฉันจึงค้นหาแพ็คเกจนี้ใน Google

person Margriet    schedule 24.02.2020
comment
หรือคุณสามารถทำได้ในสองสามบรรทัดเช่น: stackoverflow.com/questions/50381968/ จากคำถามของคุณไม่ชัดเจนว่าคุณมีรหัส #RRGGBB - person Richard Heap; 25.02.2020
comment
ขอบคุณริชาร์ดสำหรับความช่วยเหลือทั้งหมดของคุณ! พูดตามตรง วิธีแก้ปัญหาของแพ็คเกจนี้เหมาะสำหรับมือใหม่อย่างฉันง่ายกว่า - person Margriet; 25.02.2020