@@ -6,7 +6,7 @@ import '../../models/themes/quill_icon_theme.dart';
6
6
import '../../utils/font.dart' ;
7
7
import '../controller.dart' ;
8
8
9
- class QuillFontSizeButton < T > extends StatefulWidget {
9
+ class QuillFontSizeButton extends StatefulWidget {
10
10
const QuillFontSizeButton ({
11
11
required this .items,
12
12
required this .rawItemsMap,
@@ -25,18 +25,18 @@ class QuillFontSizeButton<T> extends StatefulWidget {
25
25
final Color ? fillColor;
26
26
final double hoverElevation;
27
27
final double highlightElevation;
28
- final List <PopupMenuEntry <T >> items;
28
+ final List <PopupMenuEntry <String >> items;
29
29
final Map <String , String > rawItemsMap;
30
- final ValueChanged <T > onSelected;
30
+ final ValueChanged <String > onSelected;
31
31
final QuillIconTheme ? iconTheme;
32
32
final Attribute attribute;
33
33
final QuillController controller;
34
34
35
35
@override
36
- _QuillFontSizeButtonState < T > createState () => _QuillFontSizeButtonState < T > ();
36
+ _QuillFontSizeButtonState createState () => _QuillFontSizeButtonState ();
37
37
}
38
38
39
- class _QuillFontSizeButtonState < T > extends State <QuillFontSizeButton < T > > {
39
+ class _QuillFontSizeButtonState extends State <QuillFontSizeButton > {
40
40
static const defaultDisplayText = 'Size' ;
41
41
String _currentValue = defaultDisplayText;
42
42
Style get _selectionStyle => widget.controller.getSelectionStyle ();
@@ -54,7 +54,7 @@ class _QuillFontSizeButtonState<T> extends State<QuillFontSizeButton<T>> {
54
54
}
55
55
56
56
@override
57
- void didUpdateWidget (covariant QuillFontSizeButton < T > oldWidget) {
57
+ void didUpdateWidget (covariant QuillFontSizeButton oldWidget) {
58
58
super .didUpdateWidget (oldWidget);
59
59
if (oldWidget.controller != widget.controller) {
60
60
oldWidget.controller.removeListener (_didChangeEditingValue);
@@ -63,24 +63,27 @@ class _QuillFontSizeButtonState<T> extends State<QuillFontSizeButton<T>> {
63
63
}
64
64
65
65
void _didChangeEditingValue () {
66
- setState (() => _currentValue = _getKeyName (_selectionStyle.attributes));
67
- }
68
-
69
- String _getKeyName (Map <String , Attribute > attrs) {
70
66
if (widget.attribute.key != Attribute .size.key) {
71
- return defaultDisplayText ;
67
+ return ;
72
68
}
73
- final attribute = attrs[widget.attribute.key];
74
-
69
+ final attribute = _selectionStyle.attributes[widget.attribute.key];
75
70
if (attribute == null ) {
76
- return defaultDisplayText ;
71
+ return ;
77
72
}
78
- return widget.rawItemsMap.entries
79
- .firstWhere (
80
- (element) =>
81
- getFontSize (element.value) == getFontSize (attribute.value),
82
- orElse: () => widget.rawItemsMap.entries.first)
83
- .key;
73
+ final keyName = _getKeyName (attribute.value);
74
+ if (keyName == null ) {
75
+ return ;
76
+ }
77
+ setState (() => _currentValue = keyName);
78
+ }
79
+
80
+ String ? _getKeyName (dynamic value) {
81
+ for (final entry in widget.rawItemsMap.entries) {
82
+ if (getFontSize (entry.value) == getFontSize (value)) {
83
+ return entry.key;
84
+ }
85
+ }
86
+ return null ;
84
87
}
85
88
86
89
@override
@@ -115,23 +118,24 @@ class _QuillFontSizeButtonState<T> extends State<QuillFontSizeButton<T>> {
115
118
),
116
119
Offset .zero & overlay.size,
117
120
);
118
- showMenu <T >(
121
+ showMenu <String >(
119
122
context: context,
120
123
elevation: 4 ,
121
124
items: widget.items,
122
125
position: position,
123
126
shape: popupMenuTheme.shape,
124
127
color: popupMenuTheme.color,
125
128
).then ((newValue) {
126
- if (! mounted) return null ;
129
+ if (! mounted) return ;
127
130
if (newValue == null ) {
128
- return null ;
131
+ return ;
132
+ }
133
+ final keyName = _getKeyName (newValue);
134
+ if (keyName == null ) {
135
+ return ;
129
136
}
130
137
setState (() {
131
- _currentValue = widget.rawItemsMap.entries
132
- .firstWhere ((element) => element.value == newValue,
133
- orElse: () => widget.rawItemsMap.entries.first)
134
- .key;
138
+ _currentValue = keyName;
135
139
widget.onSelected (newValue);
136
140
});
137
141
});
0 commit comments