mirror of
https://gitlab.com/comunic/comunicmobile
synced 2025-06-19 08:15:16 +00:00
Can update a conversation message
This commit is contained in:
@ -289,6 +289,7 @@ class _ConversationScreenState extends State<ConversationScreen> {
|
||||
userInfo: _usersInfo.getUser(_messages[i].userID),
|
||||
isLastMessage: _isLastMessage(i),
|
||||
isFirstMessage: _isFirstMessage(i),
|
||||
onRequestMessageUpdate: _updateMessage,
|
||||
onRequestMessageDelete: _deleteMessage,
|
||||
);
|
||||
}),
|
||||
@ -389,6 +390,33 @@ class _ConversationScreenState extends State<ConversationScreen> {
|
||||
);
|
||||
}
|
||||
|
||||
/// Request message content update
|
||||
Future<void> _updateMessage(ConversationMessage message) async {
|
||||
final newContent = await askUserString(
|
||||
context: context,
|
||||
title: tr("Update message"),
|
||||
message: tr("Please enter new message content:"),
|
||||
defaultValue: message.message,
|
||||
hint: tr("New message"));
|
||||
|
||||
if (newContent == null) return;
|
||||
|
||||
if (!await _conversationsHelper.updateMessage(message.id, newContent)) {
|
||||
showSimpleSnack(context, tr("Could not update message content!"));
|
||||
return;
|
||||
}
|
||||
|
||||
// Get the new version of the conversation message
|
||||
final newMessage =
|
||||
await _conversationsHelper.getSingleMessageFromCache(message.id);
|
||||
|
||||
setState(() {
|
||||
final index = _messages.indexOf(message);
|
||||
_messages.insert(index, newMessage);
|
||||
_messages.removeAt(index + 1);
|
||||
});
|
||||
}
|
||||
|
||||
/// Request message deletion
|
||||
Future<void> _deleteMessage(ConversationMessage message) async {
|
||||
final choice = await showDialog<bool>(
|
||||
@ -417,11 +445,10 @@ class _ConversationScreenState extends State<ConversationScreen> {
|
||||
),
|
||||
);
|
||||
|
||||
if(choice == null || !choice)
|
||||
return;
|
||||
if (choice == null || !choice) return;
|
||||
|
||||
// Execute the request
|
||||
if(!await _conversationsHelper.deleteMessage(message.id))
|
||||
if (!await _conversationsHelper.deleteMessage(message.id))
|
||||
showSimpleSnack(context, tr("Could not delete conversation message!"));
|
||||
|
||||
// Remove the message from the list
|
||||
|
@ -12,8 +12,9 @@ import 'package:flutter/material.dart';
|
||||
///
|
||||
/// @author Pierre HUBERT
|
||||
|
||||
enum _MenuChoices { DELETE }
|
||||
enum _MenuChoices { DELETE, REQUEST_UPDATE_CONTENT }
|
||||
|
||||
typedef OnRequestMessageUpdate = void Function(ConversationMessage);
|
||||
typedef OnRequestMessageDelete = void Function(ConversationMessage);
|
||||
|
||||
class ConversationMessageTile extends StatelessWidget {
|
||||
@ -21,6 +22,7 @@ class ConversationMessageTile extends StatelessWidget {
|
||||
final User userInfo;
|
||||
final bool isLastMessage;
|
||||
final bool isFirstMessage;
|
||||
final OnRequestMessageUpdate onRequestMessageUpdate;
|
||||
final OnRequestMessageDelete onRequestMessageDelete;
|
||||
|
||||
const ConversationMessageTile({
|
||||
@ -29,11 +31,13 @@ class ConversationMessageTile extends StatelessWidget {
|
||||
@required this.userInfo,
|
||||
@required this.isLastMessage,
|
||||
@required this.isFirstMessage,
|
||||
@required this.onRequestMessageUpdate,
|
||||
@required this.onRequestMessageDelete,
|
||||
}) : assert(message != null),
|
||||
assert(userInfo != null),
|
||||
assert(isLastMessage != null),
|
||||
assert(isFirstMessage != null),
|
||||
assert(onRequestMessageUpdate != null),
|
||||
assert(onRequestMessageDelete != null),
|
||||
super(key: key);
|
||||
|
||||
@ -47,6 +51,14 @@ class ConversationMessageTile extends StatelessWidget {
|
||||
width: 35.0,
|
||||
),
|
||||
itemBuilder: (c) => [
|
||||
// Update message content
|
||||
PopupMenuItem(
|
||||
enabled: message.isOwner,
|
||||
value: _MenuChoices.REQUEST_UPDATE_CONTENT,
|
||||
child: Text(tr("Update")),
|
||||
),
|
||||
|
||||
// Delete the message
|
||||
PopupMenuItem(
|
||||
enabled: message.isOwner,
|
||||
value: _MenuChoices.DELETE,
|
||||
@ -256,12 +268,14 @@ class ConversationMessageTile extends StatelessWidget {
|
||||
|
||||
/// Process menu choice
|
||||
void _menuOptionSelected(_MenuChoices value) {
|
||||
switch (value) {
|
||||
case _MenuChoices.REQUEST_UPDATE_CONTENT:
|
||||
onRequestMessageUpdate(message);
|
||||
break;
|
||||
|
||||
switch(value){
|
||||
case _MenuChoices.DELETE:
|
||||
onRequestMessageDelete(message);
|
||||
break;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user