1
0
mirror of https://gitlab.com/comunic/comunicmobile synced 2024-10-23 06:53:23 +00:00

Improve update message dialog

This commit is contained in:
Pierre HUBERT 2021-03-12 16:37:21 +01:00
parent f70717a987
commit ec4ca238de
2 changed files with 78 additions and 34 deletions

View File

@ -2,6 +2,7 @@ import 'dart:async';
import 'package:comunic/helpers/conversations_helper.dart';
import 'package:comunic/helpers/events_helper.dart';
import 'package:comunic/helpers/server_config_helper.dart';
import 'package:comunic/helpers/users_helper.dart';
import 'package:comunic/lists/conversation_messages_list.dart';
import 'package:comunic/lists/users_list.dart';
@ -436,11 +437,16 @@ class _ConversationScreenState extends SafeState<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.content,
hint: tr("New message"));
context: context,
title: tr("Update message"),
message: tr("Please enter new message content:"),
defaultValue: message.message.content,
hint: tr("New message"),
minLength:
ServerConfigurationHelper.config.conversationsPolicy.minMessageLen,
maxLength:
ServerConfigurationHelper.config.conversationsPolicy.maxMessageLen,
);
if (newContent == null) return;

View File

@ -93,6 +93,7 @@ Future<String> askUserString({
@required String defaultValue,
@required String hint,
int maxLength = 200,
int minLength = 1,
}) async {
assert(context != null);
assert(title != null);
@ -105,35 +106,13 @@ Future<String> askUserString({
final confirm = await showDialog<bool>(
context: context,
builder: (c) => AlertDialog(
title: Text(title),
content: AutoSizeDialogContentWidget(
child: Column(
children: <Widget>[
Text(message),
TextField(
controller: controller,
maxLines: null,
maxLength: maxLength,
keyboardType: TextInputType.text,
decoration: InputDecoration(
labelText: hint,
alignLabelWithHint: true,
),
)
],
),
),
actions: <Widget>[
FlatButton(
child: Text(tr("Cancel").toUpperCase()),
onPressed: () => Navigator.pop(c, false),
),
FlatButton(
child: Text(tr("OK")),
onPressed: () => Navigator.pop(c, true),
),
],
builder: (c) => _InputTextDialog(
title: title,
message: message,
controller: controller,
maxLength: maxLength,
minLength: minLength,
hint: hint,
));
if (confirm == null || !confirm) return null;
@ -141,6 +120,65 @@ Future<String> askUserString({
return controller.text;
}
class _InputTextDialog extends StatefulWidget {
final String title;
final String message;
final TextEditingController controller;
final int maxLength;
final int minLength;
final String hint;
const _InputTextDialog({
Key key,
@required this.title,
@required this.message,
@required this.controller,
@required this.maxLength,
@required this.minLength,
@required this.hint,
}) : super(key: key);
@override
__InputTextDialogState createState() => __InputTextDialogState();
}
class __InputTextDialogState extends State<_InputTextDialog> {
@override
Widget build(BuildContext c) => AlertDialog(
title: Text(widget.title),
content: AutoSizeDialogContentWidget(
child: Column(
children: <Widget>[
Text(widget.message),
TextField(
controller: widget.controller,
maxLines: null,
maxLength: widget.maxLength,
keyboardType: TextInputType.text,
onChanged: (s) => setState(() {}),
decoration: InputDecoration(
labelText: widget.hint,
alignLabelWithHint: true,
),
)
],
),
),
actions: <Widget>[
FlatButton(
child: Text(tr("Cancel").toUpperCase()),
onPressed: () => Navigator.pop(c, false),
),
FlatButton(
child: Text(tr("OK")),
onPressed: widget.controller.text.length >= widget.minLength
? () => Navigator.pop(c, true)
: null,
),
],
);
}
/// Show an alert dialog to get user confirmation for something
///
/// Return value of this function is never null