diff --git a/lib/pages/new_private_chat/new_private_chat.dart b/lib/pages/new_private_chat/new_private_chat.dart index 8a355da8..6a75175b 100644 --- a/lib/pages/new_private_chat/new_private_chat.dart +++ b/lib/pages/new_private_chat/new_private_chat.dart @@ -18,14 +18,34 @@ class NewPrivateChat extends StatefulWidget { } class NewPrivateChatController extends State { - TextEditingController controller = TextEditingController(); + final TextEditingController controller = TextEditingController(); + final FocusNode textFieldFocus = FocusNode(); final formKey = GlobalKey(); bool loading = false; + bool hideFab = false; static const Set supportedSigils = {'@', '!', '#'}; static const String prefix = 'https://matrix.to/#/'; + void setHideFab() { + if (textFieldFocus.hasFocus != hideFab) { + setState(() => hideFab = textFieldFocus.hasFocus); + } + } + + @override + void initState() { + super.initState(); + textFieldFocus.addListener(setHideFab); + } + + @override + void dispose() { + textFieldFocus.removeListener(setHideFab); + super.dispose(); + } + void submitAction([_]) async { controller.text = controller.text.trim(); if (!formKey.currentState.validate()) return; diff --git a/lib/pages/new_private_chat/new_private_chat_view.dart b/lib/pages/new_private_chat/new_private_chat_view.dart index 15cf447e..51dd3a63 100644 --- a/lib/pages/new_private_chat/new_private_chat_view.dart +++ b/lib/pages/new_private_chat/new_private_chat_view.dart @@ -81,6 +81,7 @@ class NewPrivateChatView extends StatelessWidget { controller: controller.controller, autocorrect: false, textInputAction: TextInputAction.go, + focusNode: controller.textFieldFocus, onFieldSubmitted: controller.submitAction, validator: controller.validateForm, decoration: InputDecoration( @@ -105,7 +106,7 @@ class NewPrivateChatView extends StatelessWidget { ], ), ), - floatingActionButton: PlatformInfos.isMobile + floatingActionButton: PlatformInfos.isMobile && !controller.hideFab ? FloatingActionButton.extended( onPressed: controller.openScannerAction, label: Text(L10n.of(context).scanQrCode),