From a23b76b55253f06a24149a2dac7b1b0ddd713aca Mon Sep 17 00:00:00 2001 From: Pierre HUBERT Date: Wed, 10 Mar 2021 18:04:29 +0100 Subject: [PATCH] Parse correctly conversation color --- lib/helpers/conversations_helper.dart | 3 ++- lib/models/conversation.dart | 7 ++++--- lib/ui/tiles/conversation_tile.dart | 6 +++--- lib/utils/dart_color.dart | 14 ++++++++++++++ 4 files changed, 23 insertions(+), 7 deletions(-) create mode 100644 lib/utils/dart_color.dart diff --git a/lib/helpers/conversations_helper.dart b/lib/helpers/conversations_helper.dart index 4615b9f..6684260 100644 --- a/lib/helpers/conversations_helper.dart +++ b/lib/helpers/conversations_helper.dart @@ -17,6 +17,7 @@ import 'package:comunic/models/new_conversation_message.dart'; import 'package:comunic/models/new_conversation_settings.dart'; import 'package:comunic/models/unread_conversation.dart'; import 'package:comunic/utils/account_utils.dart'; +import 'package:comunic/utils/dart_color.dart'; import 'package:meta/meta.dart'; /// Conversation helper @@ -190,7 +191,7 @@ class ConversationsHelper { id: map["id"], lastActivity: map["last_activity"], name: map["name"], - color: map["color"], + color: map["color"] == null ? null : HexColor(map["color"]), logoURL: map["logo"], groupID: map["group_id"], members: map["members"] diff --git a/lib/models/conversation.dart b/lib/models/conversation.dart index 08d496e..0bfe197 100644 --- a/lib/models/conversation.dart +++ b/lib/models/conversation.dart @@ -1,6 +1,7 @@ import 'package:comunic/helpers/serialization/base_serialization_helper.dart'; import 'package:comunic/models/conversation_member.dart'; import 'package:comunic/utils/account_utils.dart'; +import 'package:flutter/material.dart'; import 'package:meta/meta.dart'; /// Conversation model @@ -13,7 +14,7 @@ class Conversation extends SerializableElement { final int id; final int lastActivity; final String name; - final String color; + final Color color; final String logoURL; final int groupID; final List members; @@ -61,7 +62,7 @@ class Conversation extends SerializableElement { Conversation.fromJson(Map map) : id = map["id"], name = map["name"], - color = map["color"], + color = map["color"] == null ? null : Color(map["color"]), logoURL = map["logoURL"], groupID = map["groupID"], lastActivity = map["lastActivity"], @@ -78,7 +79,7 @@ class Conversation extends SerializableElement { return { "id": id, "name": name, - "color": color, + "color": color?.value, "logoURL": logoURL, "groupID": groupID, "lastActivity": lastActivity, diff --git a/lib/ui/tiles/conversation_tile.dart b/lib/ui/tiles/conversation_tile.dart index ac974be..3f2a105 100644 --- a/lib/ui/tiles/conversation_tile.dart +++ b/lib/ui/tiles/conversation_tile.dart @@ -71,7 +71,7 @@ class ConversationTile extends StatelessWidget { conversation.sawLastMessage ? Icons.check_circle : Icons.lens, color: conversation.sawLastMessage ? (darkTheme() ? darkAccentColor : null) - : Colors.blue, + : conversation.color ?? Colors.blue, ), // Conversation information @@ -79,8 +79,8 @@ class ConversationTile extends StatelessWidget { subtitle: Column( crossAxisAlignment: CrossAxisAlignment.stretch, children: [ - _buildSubInformation( - Icons.access_time, diffTimeFromNowToStr(conversation.lastActivity)), + _buildSubInformation(Icons.access_time, + diffTimeFromNowToStr(conversation.lastActivity)), _buildSubInformation( Icons.group, conversation.members.length == 1 diff --git a/lib/utils/dart_color.dart b/lib/utils/dart_color.dart new file mode 100644 index 0000000..5280799 --- /dev/null +++ b/lib/utils/dart_color.dart @@ -0,0 +1,14 @@ +// https://stackoverflow.com/a/53905427 +import 'package:flutter/material.dart'; + +class HexColor extends Color { + static int _getColorFromHex(String hexColor) { + hexColor = hexColor.toUpperCase().replaceAll("#", ""); + if (hexColor.length == 6) { + hexColor = "FF" + hexColor; + } + return int.parse(hexColor, radix: 16); + } + + HexColor(final String hexColor) : super(_getColorFromHex(hexColor)); +}