diff --git a/lib/src/widgets/toolbar/quill_dropdown_button.dart b/lib/src/widgets/toolbar/quill_dropdown_button.dart index af8c95b4..7cef095a 100644 --- a/lib/src/widgets/toolbar/quill_dropdown_button.dart +++ b/lib/src/widgets/toolbar/quill_dropdown_button.dart @@ -1,11 +1,16 @@ import 'package:flutter/material.dart'; import '../../models/themes/quill_icon_theme.dart'; +import '../../models/documents/style.dart'; +import '../../models/documents/attribute.dart'; +import '../controller.dart'; class QuillDropdownButton extends StatefulWidget { const QuillDropdownButton({ required this.initialValue, required this.items, required this.rawitemsmap, + required this.attribute, + required this.controller, required this.onSelected, this.iconSize = 40, this.fillColor, @@ -24,6 +29,8 @@ class QuillDropdownButton extends StatefulWidget { final Map rawitemsmap; final ValueChanged onSelected; final QuillIconTheme? iconTheme; + final Attribute attribute; + final QuillController controller; @override _QuillDropdownButtonState createState() => _QuillDropdownButtonState(); @@ -32,14 +39,53 @@ class QuillDropdownButton extends StatefulWidget { // ignore: deprecated_member_use_from_same_package class _QuillDropdownButtonState extends State> { String _currentValue = ''; + Style get _selectionStyle => widget.controller.getSelectionStyle(); @override void initState() { super.initState(); + widget.controller.addListener(_didChangeEditingValue); _currentValue = widget.rawitemsmap.keys.elementAt(widget.initialValue as int); } + @override + void dispose() { + widget.controller.removeListener(_didChangeEditingValue); + super.dispose(); + } + + @override + void didUpdateWidget(covariant QuillDropdownButton oldWidget) { + super.didUpdateWidget(oldWidget); + if (oldWidget.controller != widget.controller) { + oldWidget.controller.removeListener(_didChangeEditingValue); + widget.controller.addListener(_didChangeEditingValue); + //_isToggled = _getIsToggled(_selectionStyle.attributes); + } + } + + void _didChangeEditingValue() { + setState(() => _currentValue = _getKeyName(_selectionStyle.attributes)); + } + + String _getKeyName(Map attrs) { + if (widget.attribute.key == Attribute.size.key) { + final attribute = attrs[widget.attribute.key]; + + if (attribute == null) { + return widget.rawitemsmap.keys.elementAt(widget.initialValue as int).toString(); + } + else { + return widget.rawitemsmap.entries + .firstWhere((element) => element.value == attribute.value, + orElse: () => widget.rawitemsmap.entries.first) + .key; + } + } + return widget.rawitemsmap.keys.elementAt(widget.initialValue as int).toString(); + } + @override Widget build(BuildContext context) { return ConstrainedBox(