mirror of
				https://gitlab.com/famedly/fluffychat.git
				synced 2025-10-31 20:17:28 +01:00 
			
		
		
		
	Enhanced UX and clean up
This commit is contained in:
		
							parent
							
								
									7b2f4c0163
								
							
						
					
					
						commit
						e665f4adc3
					
				| @ -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<ChatSettingsPopupMenu> { | ||||
|       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( | ||||
|  | ||||
| @ -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: <Widget>[ | ||||
|         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); | ||||
|           }, | ||||
|         ), | ||||
|       ], | ||||
|     ); | ||||
|   } | ||||
| } | ||||
| @ -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: <Widget>[ | ||||
|           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: <Widget>[ | ||||
|           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; | ||||
|  | ||||
| @ -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: <Widget>[ | ||||
|                 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: <Widget>[ | ||||
|                           Container( | ||||
|                             height: 20, | ||||
|                             width: 20, | ||||
|                             child: CircularProgressIndicator(strokeWidth: 2), | ||||
|                           ), | ||||
|                           SizedBox(width: 8), | ||||
|                           Text(I18n.of(context).loadingPleaseWait), | ||||
|                         ], | ||||
|                       ), | ||||
|                     ), | ||||
|                   ), | ||||
|                 ), | ||||
|                 if (_loadingHistory) LinearProgressIndicator(), | ||||
|                 Expanded( | ||||
|                   child: FutureBuilder<bool>( | ||||
|                     future: getTimeline(), | ||||
|  | ||||
| @ -58,7 +58,7 @@ class _ChatDetailsState extends State<ChatDetails> { | ||||
|       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; | ||||
|  | ||||
| @ -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<ChatEncryptionSettings> { | ||||
|             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( | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user
	 Christian Pauly
						Christian Pauly