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