mirror of
				https://gitlab.com/comunic/comunicmobile
				synced 2025-11-04 04:04:18 +00:00 
			
		
		
		
	Can delete conversation messages
This commit is contained in:
		@@ -3,8 +3,8 @@ import 'package:comunic/models/conversation_message.dart';
 | 
			
		||||
import 'package:comunic/models/user.dart';
 | 
			
		||||
import 'package:comunic/ui/widgets/account_image_widget.dart';
 | 
			
		||||
import 'package:comunic/ui/widgets/text_rich_content_widget.dart';
 | 
			
		||||
import 'package:comunic/utils/account_utils.dart';
 | 
			
		||||
import 'package:comunic/utils/date_utils.dart';
 | 
			
		||||
import 'package:comunic/utils/intl_utils.dart';
 | 
			
		||||
import 'package:comunic/utils/ui_utils.dart';
 | 
			
		||||
import 'package:flutter/material.dart';
 | 
			
		||||
 | 
			
		||||
@@ -12,31 +12,48 @@ import 'package:flutter/material.dart';
 | 
			
		||||
///
 | 
			
		||||
/// @author Pierre HUBERT
 | 
			
		||||
 | 
			
		||||
enum _MenuChoices { DELETE }
 | 
			
		||||
 | 
			
		||||
typedef OnRequestMessageDelete = void Function(ConversationMessage);
 | 
			
		||||
 | 
			
		||||
class ConversationMessageTile extends StatelessWidget {
 | 
			
		||||
  final ConversationMessage message;
 | 
			
		||||
  final User userInfo;
 | 
			
		||||
  final bool isLastMessage;
 | 
			
		||||
  final bool isFirstMessage;
 | 
			
		||||
  final OnRequestMessageDelete onRequestMessageDelete;
 | 
			
		||||
 | 
			
		||||
  const ConversationMessageTile(
 | 
			
		||||
      {Key key,
 | 
			
		||||
      @required this.message,
 | 
			
		||||
      @required this.userInfo,
 | 
			
		||||
      @required this.isLastMessage,
 | 
			
		||||
      @required this.isFirstMessage})
 | 
			
		||||
      : assert(message != null),
 | 
			
		||||
  const ConversationMessageTile({
 | 
			
		||||
    Key key,
 | 
			
		||||
    @required this.message,
 | 
			
		||||
    @required this.userInfo,
 | 
			
		||||
    @required this.isLastMessage,
 | 
			
		||||
    @required this.isFirstMessage,
 | 
			
		||||
    @required this.onRequestMessageDelete,
 | 
			
		||||
  })  : assert(message != null),
 | 
			
		||||
        assert(userInfo != null),
 | 
			
		||||
        assert(isLastMessage != null),
 | 
			
		||||
        assert(isFirstMessage != null),
 | 
			
		||||
        assert(onRequestMessageDelete != null),
 | 
			
		||||
        super(key: key);
 | 
			
		||||
 | 
			
		||||
  /// Build account image
 | 
			
		||||
  Widget _buildAccountImage() {
 | 
			
		||||
  Widget _buildAccountImage(BuildContext context) {
 | 
			
		||||
    return Container(
 | 
			
		||||
      margin: EdgeInsets.all(10.0),
 | 
			
		||||
      child: AccountImageWidget(
 | 
			
		||||
        user: userInfo,
 | 
			
		||||
        width: 35.0,
 | 
			
		||||
      child: PopupMenuButton<_MenuChoices>(
 | 
			
		||||
        child: AccountImageWidget(
 | 
			
		||||
          user: userInfo,
 | 
			
		||||
          width: 35.0,
 | 
			
		||||
        ),
 | 
			
		||||
        itemBuilder: (c) => [
 | 
			
		||||
              PopupMenuItem(
 | 
			
		||||
                enabled: message.isOwner,
 | 
			
		||||
                value: _MenuChoices.DELETE,
 | 
			
		||||
                child: Text(tr("Delete")),
 | 
			
		||||
              ),
 | 
			
		||||
            ],
 | 
			
		||||
        onSelected: _menuOptionSelected,
 | 
			
		||||
      ),
 | 
			
		||||
    );
 | 
			
		||||
  }
 | 
			
		||||
@@ -141,7 +158,7 @@ class ConversationMessageTile extends StatelessWidget {
 | 
			
		||||
                  ),
 | 
			
		||||
 | 
			
		||||
                  // Account image
 | 
			
		||||
                  _buildAccountImage()
 | 
			
		||||
                  _buildAccountImage(context)
 | 
			
		||||
                ],
 | 
			
		||||
              ),
 | 
			
		||||
 | 
			
		||||
@@ -180,7 +197,7 @@ class ConversationMessageTile extends StatelessWidget {
 | 
			
		||||
          Row(
 | 
			
		||||
            children: <Widget>[
 | 
			
		||||
              // Account image
 | 
			
		||||
              _buildAccountImage(),
 | 
			
		||||
              _buildAccountImage(context),
 | 
			
		||||
 | 
			
		||||
              Column(
 | 
			
		||||
                children: <Widget>[
 | 
			
		||||
@@ -232,8 +249,19 @@ class ConversationMessageTile extends StatelessWidget {
 | 
			
		||||
 | 
			
		||||
  @override
 | 
			
		||||
  Widget build(BuildContext context) {
 | 
			
		||||
    return userID() == message.userID
 | 
			
		||||
    return message.isOwner
 | 
			
		||||
        ? _buildRightMessage(context)
 | 
			
		||||
        : _buildLeftMessage(context);
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  /// Process menu choice
 | 
			
		||||
  void _menuOptionSelected(_MenuChoices value) {
 | 
			
		||||
 | 
			
		||||
    switch(value){
 | 
			
		||||
      case _MenuChoices.DELETE:
 | 
			
		||||
        onRequestMessageDelete(message);
 | 
			
		||||
        break;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user