Fix cannot focus recipients, subject and open popup menu when code view is enabled and focused
This commit is contained in:
@@ -3,6 +3,8 @@ import 'package:custom_pop_up_menu/custom_pop_up_menu.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:pointer_interceptor/pointer_interceptor.dart';
|
||||
|
||||
typedef OnMenuChanged = void Function(bool isShowing);
|
||||
|
||||
class PopupMenuOverlayWidget extends StatelessWidget {
|
||||
|
||||
final List<Widget> listButtonAction;
|
||||
@@ -14,6 +16,7 @@ class PopupMenuOverlayWidget extends StatelessWidget {
|
||||
final bool arrangeAsList;
|
||||
final PreferredPosition? position;
|
||||
final EdgeInsetsGeometry? padding;
|
||||
final OnMenuChanged? onMenuChanged;
|
||||
|
||||
const PopupMenuOverlayWidget({
|
||||
Key? key,
|
||||
@@ -26,6 +29,7 @@ class PopupMenuOverlayWidget extends StatelessWidget {
|
||||
this.position = PreferredPosition.bottom,
|
||||
this.arrangeAsList = false,
|
||||
this.padding,
|
||||
this.onMenuChanged,
|
||||
}) : super(key: key);
|
||||
|
||||
@override
|
||||
@@ -59,6 +63,7 @@ class PopupMenuOverlayWidget extends StatelessWidget {
|
||||
barrierColor: Colors.transparent,
|
||||
arrowSize: 0.0,
|
||||
verticalMargin: 2.0,
|
||||
menuOnChange: onMenuChanged,
|
||||
child: iconButton,
|
||||
);
|
||||
}
|
||||
|
||||
@@ -1551,6 +1551,17 @@ class ComposerController extends BaseController
|
||||
replyToRecipientState.value = PrefixRecipientState.disabled;
|
||||
}
|
||||
|
||||
void clearFocusRecipients() {
|
||||
toAddressFocusNode?.unfocus();
|
||||
ccAddressFocusNode?.unfocus();
|
||||
bccAddressFocusNode?.unfocus();
|
||||
replyToAddressFocusNode?.unfocus();
|
||||
}
|
||||
|
||||
void clearFocusSubject() {
|
||||
subjectEmailInputFocusNode?.unfocus();
|
||||
}
|
||||
|
||||
void _closeSuggestionBox() {
|
||||
if (toEmailAddressController.text.isEmpty) {
|
||||
keyToEmailTagEditor.currentState?.closeSuggestionBox();
|
||||
@@ -1899,8 +1910,12 @@ class ComposerController extends BaseController
|
||||
}
|
||||
|
||||
void handleOnFocusHtmlEditorWeb() {
|
||||
clearFocusRecipients();
|
||||
clearFocusSubject();
|
||||
FocusManager.instance.primaryFocus?.unfocus();
|
||||
richTextWebController?.editorController.setFocus();
|
||||
if (richTextWebController?.codeViewEnabled != true) {
|
||||
richTextWebController?.editorController.setFocus();
|
||||
}
|
||||
richTextWebController?.closeAllMenuPopup();
|
||||
if (menuMoreOptionController?.menuIsShowing == true) {
|
||||
menuMoreOptionController?.hideMenu();
|
||||
@@ -2428,4 +2443,11 @@ class ComposerController extends BaseController
|
||||
void onCompleteSetupComposer() {
|
||||
initEmailDraftHash();
|
||||
}
|
||||
|
||||
void onPopupMenuChanged(bool isShowing) {
|
||||
if (isShowing) {
|
||||
clearFocusRecipients();
|
||||
clearFocusSubject();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -619,6 +619,7 @@ class ComposerView extends GetWidget<ComposerController> {
|
||||
isEmailChanged: controller.isEmailChanged.isTrue,
|
||||
toggleCodeViewAction: controller.richTextWebController!.toggleCodeView,
|
||||
menuMoreOptionController: controller.menuMoreOptionController!,
|
||||
onPopupMenuChanged: controller.onPopupMenuChanged,
|
||||
printDraftAction: () => controller.printDraft(context),
|
||||
toggleRequestReadReceiptAction: () => controller.toggleRequestReadReceipt(context),
|
||||
toggleMarkAsImportantAction: () => controller.toggleMarkAsImportant(context),
|
||||
@@ -940,6 +941,7 @@ class ComposerView extends GetWidget<ComposerController> {
|
||||
isEmailChanged: controller.isEmailChanged.isTrue,
|
||||
toggleCodeViewAction: controller.richTextWebController!.toggleCodeView,
|
||||
menuMoreOptionController: controller.menuMoreOptionController!,
|
||||
onPopupMenuChanged: controller.onPopupMenuChanged,
|
||||
printDraftAction: () => controller.printDraft(context),
|
||||
toggleRequestReadReceiptAction: () => controller.toggleRequestReadReceipt(context),
|
||||
toggleMarkAsImportantAction: () => controller.toggleMarkAsImportant(context),
|
||||
|
||||
@@ -30,6 +30,7 @@ class BottomBarComposerWidget extends StatelessWidget {
|
||||
final VoidCallback printDraftAction;
|
||||
final VoidCallback toggleMarkAsImportantAction;
|
||||
final VoidCallback saveAsTemplateAction;
|
||||
final OnMenuChanged? onPopupMenuChanged;
|
||||
|
||||
const BottomBarComposerWidget({
|
||||
super.key,
|
||||
@@ -51,6 +52,7 @@ class BottomBarComposerWidget extends StatelessWidget {
|
||||
required this.printDraftAction,
|
||||
required this.toggleMarkAsImportantAction,
|
||||
required this.saveAsTemplateAction,
|
||||
this.onPopupMenuChanged,
|
||||
});
|
||||
|
||||
@override
|
||||
@@ -182,6 +184,7 @@ class BottomBarComposerWidget extends StatelessWidget {
|
||||
],
|
||||
arrangeAsList: true,
|
||||
position: null,
|
||||
onMenuChanged: onPopupMenuChanged,
|
||||
),
|
||||
const Spacer(),
|
||||
TMailButtonWidget.fromIcon(
|
||||
|
||||
Reference in New Issue
Block a user