mirror of
				https://gitlab.com/comunic/comunicmobile
				synced 2025-11-04 12:14:11 +00:00 
			
		
		
		
	Display text messages
This commit is contained in:
		@@ -22,6 +22,8 @@ class ConversationMessage implements Comparable {
 | 
				
			|||||||
        assert(timeInsert != null),
 | 
					        assert(timeInsert != null),
 | 
				
			||||||
        assert(message != null);
 | 
					        assert(message != null);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  DateTime get date => DateTime.fromMillisecondsSinceEpoch(timeInsert * 1000);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  @override
 | 
					  @override
 | 
				
			||||||
  int compareTo(other) {
 | 
					  int compareTo(other) {
 | 
				
			||||||
    return id.compareTo(other.id);
 | 
					    return id.compareTo(other.id);
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -151,6 +151,12 @@ class _ConversationScreenState extends State<ConversationScreen> {
 | 
				
			|||||||
    });
 | 
					    });
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  // Check if a message is the last message of a user or not
 | 
				
			||||||
 | 
					  bool _isLastMessage(int index) {
 | 
				
			||||||
 | 
					    return index == 0 ||
 | 
				
			||||||
 | 
					        (index > 0 && _messages[index - 1].userID == _messages[index].userID);
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  /// Error handling
 | 
					  /// Error handling
 | 
				
			||||||
  Widget _buildError() {
 | 
					  Widget _buildError() {
 | 
				
			||||||
    return buildErrorCard(tr("Could not load the list of messages!"));
 | 
					    return buildErrorCard(tr("Could not load the list of messages!"));
 | 
				
			||||||
@@ -165,6 +171,7 @@ class _ConversationScreenState extends State<ConversationScreen> {
 | 
				
			|||||||
            return ConversationMessageTile(
 | 
					            return ConversationMessageTile(
 | 
				
			||||||
              message: _messages.elementAt(i),
 | 
					              message: _messages.elementAt(i),
 | 
				
			||||||
              userInfo: _usersInfo.getUser(_messages[i].userID),
 | 
					              userInfo: _usersInfo.getUser(_messages[i].userID),
 | 
				
			||||||
 | 
					              isLastMessage: _isLastMessage(i),
 | 
				
			||||||
            );
 | 
					            );
 | 
				
			||||||
          }),
 | 
					          }),
 | 
				
			||||||
    );
 | 
					    );
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,5 +1,7 @@
 | 
				
			|||||||
import 'package:comunic/models/conversation_message.dart';
 | 
					import 'package:comunic/models/conversation_message.dart';
 | 
				
			||||||
import 'package:comunic/models/user.dart';
 | 
					import 'package:comunic/models/user.dart';
 | 
				
			||||||
 | 
					import 'package:comunic/utils/account_utils.dart';
 | 
				
			||||||
 | 
					import 'package:comunic/utils/date_utils.dart';
 | 
				
			||||||
import 'package:flutter/material.dart';
 | 
					import 'package:flutter/material.dart';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/// Conversation message tile
 | 
					/// Conversation message tile
 | 
				
			||||||
@@ -9,14 +11,101 @@ import 'package:flutter/material.dart';
 | 
				
			|||||||
class ConversationMessageTile extends StatelessWidget {
 | 
					class ConversationMessageTile extends StatelessWidget {
 | 
				
			||||||
  final ConversationMessage message;
 | 
					  final ConversationMessage message;
 | 
				
			||||||
  final User userInfo;
 | 
					  final User userInfo;
 | 
				
			||||||
 | 
					  final bool isLastMessage;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  const ConversationMessageTile({Key key, this.message, this.userInfo})
 | 
					  const ConversationMessageTile(
 | 
				
			||||||
 | 
					      {Key key,
 | 
				
			||||||
 | 
					      @required this.message,
 | 
				
			||||||
 | 
					      @required this.userInfo,
 | 
				
			||||||
 | 
					      @required this.isLastMessage})
 | 
				
			||||||
      : assert(message != null),
 | 
					      : assert(message != null),
 | 
				
			||||||
        assert(userInfo != null),
 | 
					        assert(userInfo != null),
 | 
				
			||||||
 | 
					        assert(isLastMessage != null),
 | 
				
			||||||
        super(key: key);
 | 
					        super(key: key);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  /// Build message date
 | 
				
			||||||
 | 
					  Widget _buildMessageDate() {
 | 
				
			||||||
 | 
					    return isLastMessage
 | 
				
			||||||
 | 
					        ? Container(
 | 
				
			||||||
 | 
					            margin: EdgeInsets.only(top: 5.0),
 | 
				
			||||||
 | 
					            child: Text(
 | 
				
			||||||
 | 
					              dateTimeToString(message.date),
 | 
				
			||||||
 | 
					              style: TextStyle(color: Colors.black54, fontSize: 12.0),
 | 
				
			||||||
 | 
					            ),
 | 
				
			||||||
 | 
					          )
 | 
				
			||||||
 | 
					        : Container();
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  /// Build a message of the current user
 | 
				
			||||||
 | 
					  Widget _buildRightMessage() {
 | 
				
			||||||
 | 
					    return Container(
 | 
				
			||||||
 | 
					      margin: EdgeInsets.only(right: 10.0, bottom: isLastMessage ? 20.0 : 10.0),
 | 
				
			||||||
 | 
					      child: Row(
 | 
				
			||||||
 | 
					        mainAxisAlignment: MainAxisAlignment.end,
 | 
				
			||||||
 | 
					        children: <Widget>[
 | 
				
			||||||
 | 
					          Column(
 | 
				
			||||||
 | 
					            children: <Widget>[
 | 
				
			||||||
 | 
					              // Text message
 | 
				
			||||||
 | 
					              Container(
 | 
				
			||||||
 | 
					                child: Text(
 | 
				
			||||||
 | 
					                  message.message,
 | 
				
			||||||
 | 
					                  textAlign: TextAlign.justify,
 | 
				
			||||||
 | 
					                  style: TextStyle(color: Colors.white),
 | 
				
			||||||
 | 
					                ),
 | 
				
			||||||
 | 
					                padding: EdgeInsets.fromLTRB(15.0, 10.0, 15.0, 10.0),
 | 
				
			||||||
 | 
					                width: 200.0,
 | 
				
			||||||
 | 
					                decoration: BoxDecoration(
 | 
				
			||||||
 | 
					                  color: Colors.blueAccent,
 | 
				
			||||||
 | 
					                  borderRadius: BorderRadius.circular(8.0),
 | 
				
			||||||
 | 
					                ),
 | 
				
			||||||
 | 
					              ),
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					              // Date
 | 
				
			||||||
 | 
					              _buildMessageDate()
 | 
				
			||||||
 | 
					            ],
 | 
				
			||||||
 | 
					          ),
 | 
				
			||||||
 | 
					        ],
 | 
				
			||||||
 | 
					      ),
 | 
				
			||||||
 | 
					    );
 | 
				
			||||||
 | 
					    // Text
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  /// Build a message of a peer user
 | 
				
			||||||
 | 
					  Widget _buildLeftMessage() {
 | 
				
			||||||
 | 
					    return Container(
 | 
				
			||||||
 | 
					      margin: EdgeInsets.only(left: 10.0, bottom: isLastMessage ? 20.0 : 10.0),
 | 
				
			||||||
 | 
					      child: Row(
 | 
				
			||||||
 | 
					        mainAxisAlignment: MainAxisAlignment.start,
 | 
				
			||||||
 | 
					        children: <Widget>[
 | 
				
			||||||
 | 
					          Column(
 | 
				
			||||||
 | 
					            children: <Widget>[
 | 
				
			||||||
 | 
					              // Text message
 | 
				
			||||||
 | 
					              Container(
 | 
				
			||||||
 | 
					                child: Text(
 | 
				
			||||||
 | 
					                  message.message,
 | 
				
			||||||
 | 
					                  textAlign: TextAlign.justify,
 | 
				
			||||||
 | 
					                ),
 | 
				
			||||||
 | 
					                padding: EdgeInsets.fromLTRB(15.0, 10.0, 15.0, 10.0),
 | 
				
			||||||
 | 
					                width: 200.0,
 | 
				
			||||||
 | 
					                decoration: BoxDecoration(
 | 
				
			||||||
 | 
					                  color: Colors.black12,
 | 
				
			||||||
 | 
					                  borderRadius: BorderRadius.circular(8.0),
 | 
				
			||||||
 | 
					                ),
 | 
				
			||||||
 | 
					              ),
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					              // Date
 | 
				
			||||||
 | 
					              _buildMessageDate()
 | 
				
			||||||
 | 
					            ],
 | 
				
			||||||
 | 
					          ),
 | 
				
			||||||
 | 
					        ],
 | 
				
			||||||
 | 
					      ),
 | 
				
			||||||
 | 
					    );
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  @override
 | 
					  @override
 | 
				
			||||||
  Widget build(BuildContext context) {
 | 
					  Widget build(BuildContext context) {
 | 
				
			||||||
    return Text(message.message);
 | 
					    return userID() == message.userID
 | 
				
			||||||
 | 
					        ? _buildRightMessage()
 | 
				
			||||||
 | 
					        : _buildLeftMessage();
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -46,3 +46,9 @@ String diffTimeToStr(int amount) {
 | 
				
			|||||||
String diffTimeFromNowToStr(int date) {
 | 
					String diffTimeFromNowToStr(int date) {
 | 
				
			||||||
  return diffTimeToStr(time() - date);
 | 
					  return diffTimeToStr(time() - date);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/// Return properly formatted date and time
 | 
				
			||||||
 | 
					String dateTimeToString(DateTime time) {
 | 
				
			||||||
 | 
					  return "${time.day}:${time.month}:${time.year} ${time.hour}:${time.minute}";
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
		Reference in New Issue
	
	Block a user