Rich text editor for Flutter
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 

94 lines
2.9 KiB

import 'package:flutter/material.dart';
import '../../../models/themes/quill_icon_theme.dart';
import '../../../utils/extensions/build_context.dart';
import '../../controller.dart';
import '../base_toolbar.dart';
class QuillToolbarCustomButton extends StatelessWidget {
const QuillToolbarCustomButton({
required this.options,
required this.controller,
super.key,
});
final QuillController controller;
final QuillToolbarCustomButtonOptions options;
double _iconSize(BuildContext context) {
final baseFontSize = baseButtonExtraOptions(context).globalIconSize;
final iconSize = options.iconSize;
return iconSize ?? baseFontSize;
}
double _iconButtonFactor(BuildContext context) {
final baseIconFactor =
baseButtonExtraOptions(context).globalIconButtonFactor;
final iconButtonFactor = options.iconButtonFactor;
return iconButtonFactor ?? baseIconFactor;
}
VoidCallback? _afterButtonPressed(BuildContext context) {
return options.afterButtonPressed ??
baseButtonExtraOptions(context).afterButtonPressed;
}
QuillIconTheme? _iconTheme(BuildContext context) {
return options.iconTheme ?? baseButtonExtraOptions(context).iconTheme;
}
QuillToolbarBaseButtonOptions baseButtonExtraOptions(BuildContext context) {
return context.requireQuillToolbarBaseButtonOptions;
}
String? _tooltip(BuildContext context) {
return options.tooltip ?? baseButtonExtraOptions(context).tooltip;
}
void _onPressed(BuildContext context) {
options.onPressed?.call();
_afterButtonPressed(context)?.call();
}
@override
Widget build(BuildContext context) {
final iconTheme = _iconTheme(context);
final tooltip = _tooltip(context);
final iconSize = _iconSize(context);
final iconButtonFactor = _iconButtonFactor(context);
final childBuilder =
options.childBuilder ?? baseButtonExtraOptions(context).childBuilder;
final afterButtonPressed = _afterButtonPressed(context);
if (childBuilder != null) {
return childBuilder(
QuillToolbarCustomButtonOptions(
iconButtonFactor: iconButtonFactor,
iconSize: iconSize,
afterButtonPressed: afterButtonPressed,
controller: controller,
iconTheme: iconTheme,
tooltip: tooltip,
icon: options.icon,
),
QuillToolbarCustomButtonExtraOptions(
context: context,
controller: controller,
onPressed: () => _onPressed(context),
),
);
}
final theme = Theme.of(context);
return QuillToolbarIconButton(
size: iconSize * iconButtonFactor,
icon: options.icon,
tooltip: tooltip,
borderRadius: iconTheme?.borderRadius ?? 2,
onPressed: () => _onPressed(context),
afterPressed: afterButtonPressed,
fillColor: iconTheme?.iconUnselectedFillColor ?? theme.canvasColor,
);
}
}