mirror of
https://gitlab.com/comunic/comunicmobile
synced 2024-11-22 21:09:21 +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/conversations_helper.dart';
|
||||||
import 'package:comunic/helpers/events_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/helpers/users_helper.dart';
|
||||||
import 'package:comunic/lists/conversation_messages_list.dart';
|
import 'package:comunic/lists/conversation_messages_list.dart';
|
||||||
import 'package:comunic/lists/users_list.dart';
|
import 'package:comunic/lists/users_list.dart';
|
||||||
@ -436,11 +437,16 @@ class _ConversationScreenState extends SafeState<ConversationScreen> {
|
|||||||
/// Request message content update
|
/// Request message content update
|
||||||
Future<void> _updateMessage(ConversationMessage message) async {
|
Future<void> _updateMessage(ConversationMessage message) async {
|
||||||
final newContent = await askUserString(
|
final newContent = await askUserString(
|
||||||
context: context,
|
context: context,
|
||||||
title: tr("Update message"),
|
title: tr("Update message"),
|
||||||
message: tr("Please enter new message content:"),
|
message: tr("Please enter new message content:"),
|
||||||
defaultValue: message.message.content,
|
defaultValue: message.message.content,
|
||||||
hint: tr("New message"));
|
hint: tr("New message"),
|
||||||
|
minLength:
|
||||||
|
ServerConfigurationHelper.config.conversationsPolicy.minMessageLen,
|
||||||
|
maxLength:
|
||||||
|
ServerConfigurationHelper.config.conversationsPolicy.maxMessageLen,
|
||||||
|
);
|
||||||
|
|
||||||
if (newContent == null) return;
|
if (newContent == null) return;
|
||||||
|
|
||||||
|
@ -93,6 +93,7 @@ Future<String> askUserString({
|
|||||||
@required String defaultValue,
|
@required String defaultValue,
|
||||||
@required String hint,
|
@required String hint,
|
||||||
int maxLength = 200,
|
int maxLength = 200,
|
||||||
|
int minLength = 1,
|
||||||
}) async {
|
}) async {
|
||||||
assert(context != null);
|
assert(context != null);
|
||||||
assert(title != null);
|
assert(title != null);
|
||||||
@ -105,35 +106,13 @@ Future<String> askUserString({
|
|||||||
|
|
||||||
final confirm = await showDialog<bool>(
|
final confirm = await showDialog<bool>(
|
||||||
context: context,
|
context: context,
|
||||||
builder: (c) => AlertDialog(
|
builder: (c) => _InputTextDialog(
|
||||||
title: Text(title),
|
title: title,
|
||||||
content: AutoSizeDialogContentWidget(
|
message: message,
|
||||||
child: Column(
|
controller: controller,
|
||||||
children: <Widget>[
|
maxLength: maxLength,
|
||||||
Text(message),
|
minLength: minLength,
|
||||||
TextField(
|
hint: hint,
|
||||||
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),
|
|
||||||
),
|
|
||||||
],
|
|
||||||
));
|
));
|
||||||
|
|
||||||
if (confirm == null || !confirm) return null;
|
if (confirm == null || !confirm) return null;
|
||||||
@ -141,6 +120,65 @@ Future<String> askUserString({
|
|||||||
return controller.text;
|
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
|
/// Show an alert dialog to get user confirmation for something
|
||||||
///
|
///
|
||||||
/// Return value of this function is never null
|
/// Return value of this function is never null
|
||||||
|
Loading…
Reference in New Issue
Block a user