mirror of
https://gitlab.com/comunic/comunicmobile
synced 2024-12-26 12:58:51 +00:00
Improve update message dialog
This commit is contained in:
parent
f70717a987
commit
ec4ca238de
@ -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;
|
||||
|
||||
|
@ -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
|
||||
|
Loading…
Reference in New Issue
Block a user