diff --git a/lib/components/chat_settings_popup_menu.dart b/lib/components/chat_settings_popup_menu.dart index 5ede546..b4f3573 100644 --- a/lib/components/chat_settings_popup_menu.dart +++ b/lib/components/chat_settings_popup_menu.dart @@ -7,6 +7,7 @@ import 'package:fluffychat/views/chat_details.dart'; import 'package:fluffychat/views/chat_list.dart'; import 'package:flutter/material.dart'; +import 'dialogs/simple_dialogs.dart'; import 'matrix.dart'; class ChatSettingsPopupMenu extends StatefulWidget { @@ -66,11 +67,16 @@ class _ChatSettingsPopupMenuState extends State { onSelected: (String choice) async { switch (choice) { case "leave": - await Matrix.of(context) - .tryRequestWithLoadingDialog(widget.room.leave()); - await Navigator.of(context).pushAndRemoveUntil( - AppRoute.defaultRoute(context, ChatListView()), - (Route r) => false); + bool confirmed = await SimpleDialogs(context).askConfirmation(); + if (confirmed) { + final success = await Matrix.of(context) + .tryRequestWithLoadingDialog(widget.room.leave()); + if (success != false) { + await Navigator.of(context).pushAndRemoveUntil( + AppRoute.defaultRoute(context, ChatListView()), + (Route r) => false); + } + } break; case "mute": await Matrix.of(context).tryRequestWithLoadingDialog( diff --git a/lib/components/dialogs/confirm_dialog.dart b/lib/components/dialogs/confirm_dialog.dart deleted file mode 100644 index 42477e2..0000000 --- a/lib/components/dialogs/confirm_dialog.dart +++ /dev/null @@ -1,36 +0,0 @@ -import 'package:fluffychat/i18n/i18n.dart'; -import 'package:flutter/material.dart'; - -class ConfirmDialog extends StatelessWidget { - const ConfirmDialog( - this.text, - this.confirmText, - this.onConfirmed, - ); - final String text; - final String confirmText; - final Function(BuildContext) onConfirmed; - - @override - Widget build(BuildContext context) { - return AlertDialog( - title: Text(text), - actions: [ - FlatButton( - child: Text(I18n.of(context).close.toUpperCase(), - style: TextStyle(color: Colors.blueGrey)), - onPressed: () => Navigator.of(context).pop(), - ), - FlatButton( - child: Text( - confirmText.toUpperCase(), - ), - onPressed: () { - Navigator.of(context).pop(); - onConfirmed(context); - }, - ), - ], - ); - } -} diff --git a/lib/components/dialogs/simple_dialogs.dart b/lib/components/dialogs/simple_dialogs.dart index 0f3842d..b45bf6d 100644 --- a/lib/components/dialogs/simple_dialogs.dart +++ b/lib/components/dialogs/simple_dialogs.dart @@ -37,18 +37,23 @@ class SimpleDialogs { labelText: labelText, prefixText: prefixText, suffixText: suffixText, + prefixStyle: TextStyle(color: Theme.of(context).primaryColor), + suffixStyle: TextStyle(color: Theme.of(context).primaryColor), border: OutlineInputBorder(), ), ), actions: [ FlatButton( - child: Text(cancelText ?? I18n.of(context).close.toUpperCase(), + child: Text( + cancelText?.toUpperCase() ?? + I18n.of(context).close.toUpperCase(), style: TextStyle(color: Colors.blueGrey)), onPressed: () => Navigator.of(context).pop(), ), FlatButton( child: Text( - confirmText ?? I18n.of(context).confirm.toUpperCase(), + confirmText?.toUpperCase() ?? + I18n.of(context).confirm.toUpperCase(), ), onPressed: () { input = controller.text; @@ -70,16 +75,19 @@ class SimpleDialogs { await showDialog( context: context, builder: (c) => AlertDialog( - title: Text(I18n.of(context).areYouSure ?? titleText), + title: Text(titleText ?? I18n.of(context).areYouSure), actions: [ FlatButton( - child: Text(cancelText ?? I18n.of(context).close.toUpperCase(), + child: Text( + cancelText?.toUpperCase() ?? + I18n.of(context).close.toUpperCase(), style: TextStyle(color: Colors.blueGrey)), onPressed: () => Navigator.of(context).pop(), ), FlatButton( child: Text( - confirmText ?? I18n.of(context).confirm.toUpperCase(), + confirmText?.toUpperCase() ?? + I18n.of(context).confirm.toUpperCase(), ), onPressed: () { confirmed = true; diff --git a/lib/views/chat.dart b/lib/views/chat.dart index 83b81e7..33f8cb0 100644 --- a/lib/views/chat.dart +++ b/lib/views/chat.dart @@ -5,7 +5,7 @@ import 'package:famedlysdk/famedlysdk.dart'; import 'package:file_picker/file_picker.dart'; import 'package:fluffychat/components/adaptive_page_layout.dart'; import 'package:fluffychat/components/chat_settings_popup_menu.dart'; -import 'package:fluffychat/components/dialogs/confirm_dialog.dart'; +import 'package:fluffychat/components/dialogs/simple_dialogs.dart'; import 'package:fluffychat/components/list_items/message.dart'; import 'package:fluffychat/components/matrix.dart'; import 'package:fluffychat/components/reply_content.dart'; @@ -234,13 +234,9 @@ class _ChatState extends State<_Chat> { } void redactEventsAction(BuildContext context) async { - bool confirmed = false; - await showDialog( - context: context, - builder: (context) => ConfirmDialog( - I18n.of(context).messageWillBeRemovedWarning, - I18n.of(context).remove, - (c) => confirmed = true), + bool confirmed = await SimpleDialogs(context).askConfirmation( + titleText: I18n.of(context).messageWillBeRemovedWarning, + confirmText: I18n.of(context).remove, ); if (!confirmed) return; for (Event event in selectedEvents) { @@ -280,6 +276,7 @@ class _ChatState extends State<_Chat> { replyEvent = selectedEvents.first; selectedEvents.clear(); }); + inputFocus.requestFocus(); } @override @@ -400,28 +397,7 @@ class _ChatState extends State<_Chat> { SafeArea( child: Column( children: [ - Material( - elevation: 1, - color: Theme.of(context).scaffoldBackgroundColor, - child: AnimatedContainer( - duration: Duration(milliseconds: 300), - height: _loadingHistory ? 40 : 0, - child: Center( - child: Row( - mainAxisSize: MainAxisSize.min, - children: [ - Container( - height: 20, - width: 20, - child: CircularProgressIndicator(strokeWidth: 2), - ), - SizedBox(width: 8), - Text(I18n.of(context).loadingPleaseWait), - ], - ), - ), - ), - ), + if (_loadingHistory) LinearProgressIndicator(), Expanded( child: FutureBuilder( future: getTimeline(), diff --git a/lib/views/chat_details.dart b/lib/views/chat_details.dart index f8c1756..c494d9d 100644 --- a/lib/views/chat_details.dart +++ b/lib/views/chat_details.dart @@ -58,7 +58,7 @@ class _ChatDetailsState extends State { labelText: I18n.of(context).setInvitationLink, hintText: I18n.of(context).alias.toLowerCase(), prefixText: "#", - suffixText: widget.room.client.userID.domain, + suffixText: ":" + widget.room.client.userID.domain, ); if (s == null) return; final String domain = widget.room.client.userID.domain; diff --git a/lib/views/chat_encryption_settings.dart b/lib/views/chat_encryption_settings.dart index 4bbb1d6..268e60b 100644 --- a/lib/views/chat_encryption_settings.dart +++ b/lib/views/chat_encryption_settings.dart @@ -2,7 +2,7 @@ import 'dart:async'; import 'package:famedlysdk/famedlysdk.dart'; import 'package:fluffychat/components/adaptive_page_layout.dart'; -import 'package:fluffychat/components/dialogs/confirm_dialog.dart'; +import 'package:fluffychat/components/dialogs/simple_dialogs.dart'; import 'package:fluffychat/components/matrix.dart'; import 'package:fluffychat/utils/beautify_string_extension.dart'; import 'package:fluffychat/i18n/i18n.dart'; @@ -62,23 +62,21 @@ class _ChatEncryptionSettingsState extends State { subtitle: Text(room.encryptionAlgorithm ?? I18n.of(context).none), trailing: Icon(room.encrypted ? Icons.lock : Icons.lock_open, color: room.encrypted ? Colors.green : Colors.red), - onTap: () { + onTap: () async { if (room.encrypted) return; if (!room.client.encryptionEnabled) { Toast.show(I18n.of(context).needPantalaimonWarning, context, duration: 8); return; } - showDialog( - context: context, - builder: (BuildContext context) => ConfirmDialog( - I18n.of(context).enableEncryptionWarning, - I18n.of(context).yes, - (context) => Matrix.of(context).tryRequestWithLoadingDialog( - room.enableEncryption(), - ), - ), - ); + if (await SimpleDialogs(context).askConfirmation( + titleText: I18n.of(context).enableEncryptionWarning, + confirmText: I18n.of(context).yes) == + true) { + await Matrix.of(context).tryRequestWithLoadingDialog( + room.enableEncryption(), + ); + } }, ), ListTile(