TF-1513 Fix rich text toolbar lost on mobile
This commit is contained in:
@@ -314,6 +314,17 @@ class ComposerController extends BaseController {
|
|||||||
void createFocusNodeInput() {
|
void createFocusNodeInput() {
|
||||||
toAddressFocusNode = FocusNode();
|
toAddressFocusNode = FocusNode();
|
||||||
subjectEmailInputFocusNode = FocusNode();
|
subjectEmailInputFocusNode = FocusNode();
|
||||||
|
|
||||||
|
subjectEmailInputFocusNode?.addListener(() {
|
||||||
|
log('ComposerController::createFocusNodeInput():subjectEmailInputFocusNode: ${subjectEmailInputFocusNode?.hasFocus}');
|
||||||
|
if (subjectEmailInputFocusNode?.hasFocus == true) {
|
||||||
|
if (!BuildUtils.isWeb) {
|
||||||
|
htmlEditorApi?.unfocus();
|
||||||
|
}
|
||||||
|
_collapseAllRecipient();
|
||||||
|
_autoCreateEmailTag();
|
||||||
|
}
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
void initRichTextForMobile(BuildContext context, HtmlEditorApi editorApi) {
|
void initRichTextForMobile(BuildContext context, HtmlEditorApi editorApi) {
|
||||||
@@ -322,14 +333,8 @@ class ComposerController extends BaseController {
|
|||||||
editorApi,
|
editorApi,
|
||||||
onEnterKeyDown: _onEnterKeyDown,
|
onEnterKeyDown: _onEnterKeyDown,
|
||||||
context: context,
|
context: context,
|
||||||
|
onFocus: _onEditorFocusOnMobile
|
||||||
);
|
);
|
||||||
|
|
||||||
richTextMobileTabletController.htmlEditorApi?.onFocus = () {
|
|
||||||
FocusManager.instance.primaryFocus?.unfocus();
|
|
||||||
|
|
||||||
_collapseAllRecipient();
|
|
||||||
_autoCreateEmailTag();
|
|
||||||
};
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void _initEmail() {
|
void _initEmail() {
|
||||||
@@ -1170,15 +1175,6 @@ class ComposerController extends BaseController {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void onSubjectEmailFocusChange(bool isFocus) {
|
|
||||||
log('ComposerController::onSubjectEmailFocusChange(): Focus: $isFocus');
|
|
||||||
if (isFocus) {
|
|
||||||
_collapseAllRecipient();
|
|
||||||
htmlEditorApi?.unfocus();
|
|
||||||
_autoCreateEmailTag();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void onEditorFocusChange(bool isFocus) {
|
void onEditorFocusChange(bool isFocus) {
|
||||||
log('ComposerController::onEditorFocusChange(): Focus: $isFocus');
|
log('ComposerController::onEditorFocusChange(): Focus: $isFocus');
|
||||||
if (isFocus) {
|
if (isFocus) {
|
||||||
@@ -1312,6 +1308,9 @@ class ComposerController extends BaseController {
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
_closeSuggestionBox();
|
_closeSuggestionBox();
|
||||||
|
if (!BuildUtils.isWeb) {
|
||||||
|
htmlEditorApi?.unfocus();
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
if (!BuildUtils.isWeb) {
|
if (!BuildUtils.isWeb) {
|
||||||
_collapseAllRecipient();
|
_collapseAllRecipient();
|
||||||
@@ -1507,6 +1506,13 @@ class ComposerController extends BaseController {
|
|||||||
popBack();
|
popBack();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void _onEditorFocusOnMobile() {
|
||||||
|
if (Platform.isAndroid) {
|
||||||
|
_collapseAllRecipient();
|
||||||
|
_autoCreateEmailTag();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void _onEnterKeyDown() {
|
void _onEnterKeyDown() {
|
||||||
if(scrollController.position.pixels < scrollController.position.maxScrollExtent) {
|
if(scrollController.position.pixels < scrollController.position.maxScrollExtent) {
|
||||||
scrollController.animateTo(
|
scrollController.animateTo(
|
||||||
|
|||||||
@@ -337,14 +337,7 @@ class ComposerView extends GetWidget<ComposerController>
|
|||||||
}
|
}
|
||||||
|
|
||||||
Widget _buildEmailAddress(BuildContext context) {
|
Widget _buildEmailAddress(BuildContext context) {
|
||||||
return Focus(
|
return Column(
|
||||||
onFocusChange: (focus) {
|
|
||||||
if(focus) {
|
|
||||||
controller.htmlEditorApi?.unfocus();
|
|
||||||
controller.keyboardRichTextController.hideRichTextView();
|
|
||||||
}
|
|
||||||
},
|
|
||||||
child: Column(
|
|
||||||
children: [
|
children: [
|
||||||
Obx(() => Padding(
|
Obx(() => Padding(
|
||||||
padding: EdgeInsets.only(left: responsiveUtils.isMobile(context) ? 16 : 0),
|
padding: EdgeInsets.only(left: responsiveUtils.isMobile(context) ? 16 : 0),
|
||||||
@@ -410,29 +403,24 @@ class ComposerView extends GetWidget<ComposerController>
|
|||||||
: const SizedBox.shrink()
|
: const SizedBox.shrink()
|
||||||
),
|
),
|
||||||
],
|
],
|
||||||
),
|
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
Widget _buildSubjectEmail(BuildContext context) {
|
Widget _buildSubjectEmail(BuildContext context) {
|
||||||
return Focus(
|
log('ComposerView::_buildSubjectEmail(): ');
|
||||||
onFocusChange: (focus) {
|
return Row(
|
||||||
if(focus) {
|
|
||||||
controller.htmlEditorApi?.unfocus();
|
|
||||||
controller.keyboardRichTextController.hideRichTextView();
|
|
||||||
}
|
|
||||||
},
|
|
||||||
child: Row(
|
|
||||||
children: [
|
children: [
|
||||||
Padding(
|
Padding(
|
||||||
padding: const EdgeInsets.only(right: 8),
|
padding: const EdgeInsets.only(right: 8),
|
||||||
child: Text(
|
child: Text(
|
||||||
'${AppLocalizations.of(context).subject_email}:',
|
'${AppLocalizations.of(context).subject_email}:',
|
||||||
style: const TextStyle(fontSize: 15, color: AppColor.colorHintEmailAddressInput))),
|
style: const TextStyle(
|
||||||
Expanded(
|
fontSize: 15,
|
||||||
child: FocusScope(child: Focus(
|
color: AppColor.colorHintEmailAddressInput
|
||||||
onFocusChange: (focus) => controller.onSubjectEmailFocusChange(focus),
|
)
|
||||||
child: (TextFieldBuilder()
|
)
|
||||||
|
),
|
||||||
|
Expanded(child: (TextFieldBuilder()
|
||||||
..key(const Key('subject_email_input'))
|
..key(const Key('subject_email_input'))
|
||||||
..cursorColor(AppColor.colorTextButton)
|
..cursorColor(AppColor.colorTextButton)
|
||||||
..maxLines(responsiveUtils.isMobile(context) ? null : 1)
|
..maxLines(responsiveUtils.isMobile(context) ? null : 1)
|
||||||
@@ -441,11 +429,8 @@ class ComposerView extends GetWidget<ComposerController>
|
|||||||
..textStyle(const TextStyle(color: Colors.black, fontSize: 15, fontWeight: FontWeight.normal))
|
..textStyle(const TextStyle(color: Colors.black, fontSize: 15, fontWeight: FontWeight.normal))
|
||||||
..textDecoration(const InputDecoration(contentPadding: EdgeInsets.zero, border: InputBorder.none))
|
..textDecoration(const InputDecoration(contentPadding: EdgeInsets.zero, border: InputBorder.none))
|
||||||
..addController(controller.subjectEmailInputController))
|
..addController(controller.subjectEmailInputController))
|
||||||
.build(),
|
.build())
|
||||||
))
|
|
||||||
)
|
|
||||||
]
|
]
|
||||||
),
|
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -550,11 +550,13 @@ class ComposerView extends GetWidget<ComposerController>
|
|||||||
padding: const EdgeInsets.only(right: 8, top: 16),
|
padding: const EdgeInsets.only(right: 8, top: 16),
|
||||||
child: Text(
|
child: Text(
|
||||||
'${AppLocalizations.of(context).subject_email}:',
|
'${AppLocalizations.of(context).subject_email}:',
|
||||||
style: const TextStyle(fontSize: 15, color: AppColor.colorHintEmailAddressInput))),
|
style: const TextStyle(
|
||||||
Expanded(
|
fontSize: 15,
|
||||||
child: FocusScope(child: Focus(
|
color: AppColor.colorHintEmailAddressInput
|
||||||
onFocusChange: (focus) => controller.onSubjectEmailFocusChange(focus),
|
)
|
||||||
child: (TextFieldBuilder()
|
)
|
||||||
|
),
|
||||||
|
Expanded(child: (TextFieldBuilder()
|
||||||
..key(const Key('subject_email_input'))
|
..key(const Key('subject_email_input'))
|
||||||
..cursorColor(AppColor.colorTextButton)
|
..cursorColor(AppColor.colorTextButton)
|
||||||
..addFocusNode(controller.subjectEmailInputFocusNode)
|
..addFocusNode(controller.subjectEmailInputFocusNode)
|
||||||
@@ -562,8 +564,7 @@ class ComposerView extends GetWidget<ComposerController>
|
|||||||
..textStyle(const TextStyle(color: Colors.black, fontSize: 15, fontWeight: FontWeight.normal))
|
..textStyle(const TextStyle(color: Colors.black, fontSize: 15, fontWeight: FontWeight.normal))
|
||||||
..textDecoration(const InputDecoration(contentPadding: EdgeInsets.zero, border: InputBorder.none))
|
..textDecoration(const InputDecoration(contentPadding: EdgeInsets.zero, border: InputBorder.none))
|
||||||
..addController(controller.subjectEmailInputController))
|
..addController(controller.subjectEmailInputController))
|
||||||
.build(),
|
.build()
|
||||||
))
|
|
||||||
)
|
)
|
||||||
]
|
]
|
||||||
);
|
);
|
||||||
|
|||||||
Reference in New Issue
Block a user