TF-2116 Create WebEditorComposer widget and style

(cherry picked from commit 6ea82d66c0e319918a1938b39d0961b7d894a02f)
This commit is contained in:
dab246
2023-09-06 11:50:54 +07:00
committed by Dat H. Pham
parent 42beb78bb4
commit 291c2a6bd2
2 changed files with 227 additions and 19 deletions
@@ -3,39 +3,53 @@ import 'package:core/presentation/utils/html_transformer/html_utils.dart';
import 'package:core/utils/app_logger.dart';
import 'package:flutter/material.dart';
import 'package:html_editor_enhanced/html_editor.dart';
import 'package:tmail_ui_user/features/composer/presentation/composer_controller.dart';
class EmailEditorWidget extends StatefulWidget {
typedef OnChangeContentEditorAction = Function(String? text);
typedef OnInitialContentEditorAction = Function(String text);
typedef OnMouseDownEditorAction = Function(BuildContext context);
typedef OnEditorSettingsChange = Function(EditorSettings settings);
class WebEditorWidget extends StatefulWidget {
final ComposerController controller;
final String content;
final TextDirection direction;
final HtmlEditorController editorController;
final OnInitialContentEditorAction? onInitial;
final OnChangeContentEditorAction? onChangeContent;
final VoidCallback? onFocus;
final VoidCallback? onUnFocus;
final OnMouseDownEditorAction? onMouseDown;
final OnEditorSettingsChange? onEditorSettings;
const EmailEditorWidget({
const WebEditorWidget({
super.key,
required this.controller,
required this.content,
required this.direction,
required this.editorController,
this.onInitial,
this.onChangeContent,
this.onFocus,
this.onUnFocus,
this.onMouseDown,
this.onEditorSettings,
});
@override
State<EmailEditorWidget> createState() => _EmailEditorState();
State<WebEditorWidget> createState() => _WebEditorState();
}
class _EmailEditorState extends State<EmailEditorWidget> {
class _WebEditorState extends State<WebEditorWidget> {
late ComposerController _controller;
late HtmlEditorController _editorController;
@override
void initState() {
_controller = widget.controller;
_editorController = _controller.richTextWebController.editorController;
_editorController = widget.editorController;
super.initState();
}
@override
void didUpdateWidget(covariant EmailEditorWidget oldWidget) {
void didUpdateWidget(covariant WebEditorWidget oldWidget) {
log('_EmailEditorState::didUpdateWidget():Old: ${oldWidget.direction} | current: ${widget.direction}');
if (oldWidget.direction != widget.direction) {
_editorController.updateBodyDirection(widget.direction.name);
@@ -61,14 +75,14 @@ class _EmailEditorState extends State<EmailEditorWidget> {
),
otherOptions: const OtherOptions(height: 550),
callbacks: Callbacks(
onBeforeCommand: _controller.onChangeTextEditorWeb,
onChangeContent: _controller.onChangeTextEditorWeb,
onInit: () => _controller.handleInitHtmlEditorWeb(widget.content),
onFocus: _controller.handleOnFocusHtmlEditorWeb,
onBlur: _controller.handleOnUnFocusHtmlEditorWeb,
onMouseDown: () => _controller.handleOnMouseDownHtmlEditorWeb(context),
onChangeSelection: _controller.richTextWebController.onEditorSettingsChange,
onChangeCodeview: _controller.onChangeTextEditorWeb
onBeforeCommand: widget.onChangeContent,
onChangeContent: widget.onChangeContent,
onInit: () => widget.onInitial?.call(widget.content),
onFocus: widget.onFocus,
onBlur: widget.onUnFocus,
onMouseDown: () => widget.onMouseDown?.call(context),
onChangeSelection: widget.onEditorSettings,
onChangeCodeview: widget.onChangeContent
),
);
}