소스 검색

update toolbar theme

lucky1213 4 년 전
부모
커밋
aebe249aec

+ 8
- 2
packages/zefyr/example/lib/src/images.dart 파일 보기

@@ -4,6 +4,7 @@
4 4
 
5 5
 import 'dart:io';
6 6
 import 'dart:typed_data';
7
+import 'package:image/image.dart' as Im;
7 8
 
8 9
 import 'package:flutter/material.dart';
9 10
 import 'package:flutter/widgets.dart';
@@ -41,9 +42,14 @@ class CustomImageDelegate implements ZefyrImageDelegate<ImageSource> {
41 42
   }
42 43
 
43 44
   @override
44
-  Future<String> picked(asset, isFullImage) async {
45
+  Future<String> picked(file, isFullImage) async {
45 46
     print(isFullImage);
46
-    File file = await asset.file;
47
+    //File file = await asset.file;
47 48
     return file.uri.toString();
49
+    // Im.Image image = Im.decodeImage(file.readAsBytesSync());
50
+    // Im.Image smallerImage = Im.copyResize(image, width: 500);
51
+    // List<int> data = Im.encodeJpg(smallerImage, quality: 50);
52
+    // final compressFile = File.fromRawPath(Uint8List.fromList(data));
53
+    // return compressFile.uri.toString();
48 54
   }
49 55
 }

BIN
packages/zefyr/lib/fonts/zefyrfont.ttf 파일 보기


+ 150
- 84
packages/zefyr/lib/src/widgets/buttons.dart 파일 보기

@@ -6,6 +6,7 @@ import 'dart:io';
6 6
 
7 7
 import 'package:flutter/material.dart';
8 8
 import 'package:flutter/services.dart';
9
+import 'package:image_picker/image_picker.dart';
9 10
 import 'package:notus/notus.dart';
10 11
 import 'package:photo/photo.dart';
11 12
 import 'package:photo_manager/photo_manager.dart';
@@ -21,6 +22,9 @@ const kToolbarButtonIcons = [
21 22
   ZefyrToolbarAction.emoji,
22 23
   ZefyrToolbarAction.image,
23 24
   ZefyrToolbarAction.link,
25
+  ZefyrToolbarAction.undo,
26
+  ZefyrToolbarAction.redo,
27
+  ZefyrToolbarAction.save,
24 28
   ZefyrToolbarAction.hideKeyboard,
25 29
   ZefyrToolbarAction.showKeyboard,
26 30
   ZefyrToolbarAction.close,
@@ -85,16 +89,15 @@ class ZefyrButton extends StatelessWidget {
85 89
     final editor = toolbar.editor;
86 90
     final toolbarTheme = ZefyrTheme.of(context).toolbarTheme;
87 91
     final pressedHandler = _getPressedHandler(editor, toolbar);
88
-    final iconColor = (pressedHandler == null)
89
-        ? toolbarTheme.disabledIconColor
90
-        : toolbarTheme.iconColor;
91 92
     if (_icon != null) {
92 93
       return RawZefyrButton.icon(
93 94
         action: action,
94 95
         icon: _icon,
95
-        size: _iconSize,
96
-        iconColor: _getColor(editor, toolbarTheme),
97
-        color: _getFillColor(action, toolbarTheme),
96
+        size: 24,
97
+        iconColor: (pressedHandler == null)
98
+            ? toolbarTheme.disabledIconColor
99
+            : _getColor(editor, toolbarTheme),
100
+        color: _getFillColor(editor, toolbarTheme),
98 101
         onPressed: _getPressedHandler(editor, toolbar),
99 102
       );
100 103
     } else {
@@ -106,28 +109,42 @@ class ZefyrButton extends StatelessWidget {
106 109
       return RawZefyrButton(
107 110
         action: action,
108 111
         child: Text(_text, style: style),
109
-        color: _getFillColor(action, toolbarTheme),
112
+        color: _getFillColor(editor, toolbarTheme),
110 113
         onPressed: _getPressedHandler(editor, toolbar),
111 114
       );
112 115
     }
113 116
   }
114 117
 
115 118
   Color _getColor(ZefyrScope editor, ToolbarTheme theme) {
116
-    if (isAttributeAction) {
117
-      final attribute = kZefyrToolbarAttributeActions[action];
118
-      final isToggled = (attribute is NotusAttribute)
119
-          ? editor.selectionStyle.containsSame(attribute)
120
-          : editor.selectionStyle.contains(attribute);
121
-      return isToggled ? theme.toggleColor : null;
119
+    if (kToolbarButtonIcons.contains(action)) {
120
+      return editor.toolbarAction == action ? theme.toggleColor : theme.surfaceColor;
121
+    } else {
122
+      if (isAttributeAction) {
123
+        final attribute = kZefyrToolbarAttributeActions[action];
124
+        final isToggled = (attribute is NotusAttribute)
125
+            ? editor.selectionStyle.containsSame(attribute)
126
+            : editor.selectionStyle.contains(attribute);
127
+        return isToggled
128
+            ? theme.toggleColor
129
+            : theme.iconColor;
130
+      }
131
+      return null;
122 132
     }
123
-    return null;
124 133
   }
125 134
 
126
-  Color _getFillColor(ZefyrToolbarAction action, ToolbarTheme theme) {
135
+  Color _getFillColor(ZefyrScope editor, ToolbarTheme theme) {
127 136
     if (kToolbarButtonIcons.contains(action)) {
128 137
       return theme.color;
138
+    } else {
139
+      if (isAttributeAction) {
140
+        final attribute = kZefyrToolbarAttributeActions[action];
141
+        final isToggled = (attribute is NotusAttribute)
142
+            ? editor.selectionStyle.containsSame(attribute)
143
+            : editor.selectionStyle.contains(attribute);
144
+        return isToggled ? Color(0xFFE1F5FF) : theme.iconFillColor;
145
+      }
146
+      return theme.iconFillColor;
129 147
     }
130
-    return theme.iconFillColor;
131 148
   }
132 149
 
133 150
   VoidCallback _getPressedHandler(
@@ -204,44 +221,71 @@ class RawZefyrButton extends StatelessWidget {
204 221
   @override
205 222
   Widget build(BuildContext context) {
206 223
     final theme = Theme.of(context);
207
-    final constraints = theme.buttonTheme.constraints.copyWith(
224
+    final isToolbarButton = kToolbarButtonIcons.contains(action);
225
+    var constraints = theme.buttonTheme.constraints.copyWith(
208 226
       minWidth: 64,
209 227
       minHeight: 40,
210 228
       maxHeight: 40,
211 229
     );
212 230
     var radius = BorderRadius.all(Radius.circular(0));
213
-    if (action == ZefyrToolbarAction.headingLevel1 ||
214
-        action == ZefyrToolbarAction.bold ||
215
-        action == ZefyrToolbarAction.numberList) {
216
-      radius = BorderRadius.horizontal(left: Radius.circular(4));
217
-    }
218
-    if (action == ZefyrToolbarAction.headingLevel6 ||
219
-        action == ZefyrToolbarAction.deleteline ||
220
-        action == ZefyrToolbarAction.bulletList) {
221
-      radius = BorderRadius.horizontal(left: Radius.circular(4));
222
-    }
223
-    if (action == ZefyrToolbarAction.quote ||
224
-        action == ZefyrToolbarAction.horizontalRule ||
225
-        action == ZefyrToolbarAction.code) {
226
-      radius = BorderRadius.all(Radius.circular(4));
231
+    var padding = EdgeInsets.symmetric(horizontal: 1.0, vertical: 5.0);
232
+    if (isToolbarButton) {
233
+      constraints = theme.buttonTheme.constraints.copyWith(
234
+        minWidth: 40,
235
+        maxWidth: 40,
236
+        minHeight: 30,
237
+        maxHeight: 30,
238
+      );
239
+      padding = EdgeInsets.symmetric(horizontal: 0.0, vertical: 10);
240
+    } else {
241
+      if (action == ZefyrToolbarAction.headingLevel1 ||
242
+          action == ZefyrToolbarAction.bold ||
243
+          action == ZefyrToolbarAction.numberList) {
244
+        radius = BorderRadius.horizontal(left: Radius.circular(4));
245
+      }
246
+      if (action == ZefyrToolbarAction.headingLevel6 ||
247
+          action == ZefyrToolbarAction.deleteline ||
248
+          action == ZefyrToolbarAction.bulletList) {
249
+        radius = BorderRadius.horizontal(right: Radius.circular(4));
250
+      }
251
+      if (action == ZefyrToolbarAction.quote ||
252
+          action == ZefyrToolbarAction.horizontalRule ||
253
+          action == ZefyrToolbarAction.code) {
254
+        radius = BorderRadius.all(Radius.circular(4));
255
+        if (action == ZefyrToolbarAction.code ||
256
+            action == ZefyrToolbarAction.quote) {
257
+          padding = padding.copyWith(left: 12.0);
258
+        }
259
+      }
227 260
     }
261
+
262
+    // Widget button = Row(
263
+    //   children: <Widget>[
264
+        
265
+    //     // if (action == ZefyrToolbarAction.showKeyboard || action == ZefyrToolbarAction.hideKeyboard || action == ZefyrToolbarAction.link)
266
+    //     // Container(
267
+    //     //   width: 1,
268
+    //     //   color: Color(0xFFE2E2E2),
269
+    //     //   height: 28,
270
+    //     //   margin: EdgeInsets.symmetric(horizontal: 10),
271
+    //     // ),
272
+    //   ],
273
+    // );
228 274
     return Padding(
229
-      padding:
230
-          const EdgeInsets.symmetric(horizontal: 1.0, vertical: 6.0).copyWith(
231
-        left: action == ZefyrToolbarAction.code ||
232
-                action == ZefyrToolbarAction.quote
233
-            ? 12.0
234
-            : 1.0,
235
-      ),
236
-      child: RawMaterialButton(
237
-        shape: RoundedRectangleBorder(borderRadius: radius),
238
-        elevation: 0.0,
239
-        fillColor: color,
275
+      padding: padding,
276
+      child: ConstrainedBox(
240 277
         constraints: constraints,
241
-        onPressed: onPressed,
242
-        child: child,
278
+        child: RawMaterialButton(
279
+          shape: RoundedRectangleBorder(borderRadius: radius),
280
+          elevation: 0.0,
281
+          fillColor: color,
282
+          constraints: constraints,
283
+          onPressed: onPressed,
284
+          child: child,
285
+        ),
243 286
       ),
244 287
     );
288
+    //return isToolbarButton && action != ZefyrToolbarAction.showKeyboard && action != ZefyrToolbarAction.hideKeyboard  ? Expanded(child: button) : button;
245 289
   }
246 290
 }
247 291
 
@@ -269,7 +313,7 @@ class _HeadingButtonState extends State<HeadingButton> {
269 313
 
270 314
   void showOverlay() {
271 315
     final toolbar = ZefyrToolbar.of(context);
272
-    toolbar.showOverlay(buildOverlay);
316
+    toolbar.showOverlay(buildOverlay, ZefyrToolbarAction.heading);
273 317
   }
274 318
 
275 319
   Widget _buildButtonsView(List<Widget> buttons) {
@@ -437,7 +481,6 @@ class ImageButton extends StatefulWidget {
437 481
 }
438 482
 
439 483
 class _ImageButtonState extends State<ImageButton> {
440
-
441 484
   List<AssetEntity> pickedAssetList = [];
442 485
 
443 486
   @override
@@ -455,7 +498,7 @@ class _ImageButtonState extends State<ImageButton> {
455 498
     if (Platform.isIOS || Platform.isAndroid) {
456 499
       var result = await PhotoManager.requestPermission();
457 500
       if (result) {
458
-        return toolbar.showOverlay(buildOverlay);
501
+        return toolbar.showOverlay(buildOverlay, ZefyrToolbarAction.image);
459 502
       } else {
460 503
         PhotoManager.openSetting();
461 504
       }
@@ -491,7 +534,18 @@ class _ImageButtonState extends State<ImageButton> {
491 534
                             child: FlatButton(
492 535
                                 shape: RoundedRectangleBorder(),
493 536
                                 color: Color(0xFFF6F6F6),
494
-                                onPressed: () {},
537
+                                onPressed: () async {
538
+                                  // toolbar.editor.tapHandle =
539
+                                  //     TapHandle.takePhoto;
540
+                                  var file = await ImagePicker.pickImage(
541
+                                      source: ImageSource.camera);
542
+                                  if (file != null) {
543
+                                    toolbar.closeOverlay();
544
+                                    final image = await toolbar
545
+                                        .editor.imageDelegate
546
+                                        .picked(file, true);
547
+                                  }
548
+                                },
495 549
                                 child: Container(
496 550
                                   child: Column(
497 551
                                     mainAxisAlignment: MainAxisAlignment.center,
@@ -521,7 +575,7 @@ class _ImageButtonState extends State<ImageButton> {
521 575
                                 shape: RoundedRectangleBorder(),
522 576
                                 color: Color(0xFFF6F6F6),
523 577
                                 onPressed: () {
524
-                                  toolbar.editor.tapHandle = TapHandle.pickAsset;
578
+                                  toolbar.editor.keepOverlay = true;
525 579
                                   PhotoPicker.pickAsset(
526 580
                                     context: context,
527 581
                                     rowCount: 4,
@@ -534,11 +588,16 @@ class _ImageButtonState extends State<ImageButton> {
534 588
                                   ).then((PickedEntity entity) async {
535 589
                                     if (entity.asset.isNotEmpty) {
536 590
                                       toolbar.closeOverlay();
537
-                                      final editor = ZefyrToolbar.of(context).editor;
591
+                                      final editor =
592
+                                          ZefyrToolbar.of(context).editor;
538 593
                                       for (var asset in entity.asset) {
539
-                                        final image = await editor.imageDelegate.picked(asset, entity.isFullImage);
594
+                                        var file = await asset.originFile;
595
+                                        final image = await editor.imageDelegate
596
+                                            .picked(file, entity.isFullImage);
540 597
                                         if (image != null) {
541
-                                          editor.formatSelection(NotusAttribute.embed.image(image));
598
+                                          editor.formatSelection(NotusAttribute
599
+                                              .embed
600
+                                              .image(image));
542 601
                                         }
543 602
                                       }
544 603
                                     }
@@ -575,26 +634,25 @@ class _ImageButtonState extends State<ImageButton> {
575 634
                       child: Listener(
576 635
                         behavior: HitTestBehavior.translucent,
577 636
                         onPointerUp: (PointerUpEvent event) {
578
-                          toolbar.editor.tapHandle = TapHandle.previewImage;
637
+                          toolbar.editor.keepOverlay = true;
579 638
                         },
580 639
                         child: StreamBuilder<PickedEntity>(
581 640
                           stream: pickedChangeController.stream,
582 641
                           initialData: PickedEntity(),
583 642
                           builder: (context, snapshot) {
584 643
                             return PhotoPicker.buildGallery(
585
-                              context: context,
586
-                              padding: 4,
587
-                              thumbSize: 300,
588
-                              itemRadio: 0.5,
589
-                              provider: I18nProvider.chinese,
590
-                              sortDelegate: SortDelegate.common,
591
-                              pickType: PickType.onlyImage,
592
-                              photoPathList: null,
593
-                              isFullImage: snapshot.data.isFullImage,
594
-                              onSelected: (PickedEntity entity) {
595
-                                pickedChangeController.add(entity);
596
-                              }
597
-                            );
644
+                                context: context,
645
+                                padding: 4,
646
+                                thumbSize: 300,
647
+                                itemRadio: 0.5,
648
+                                provider: I18nProvider.chinese,
649
+                                sortDelegate: SortDelegate.common,
650
+                                pickType: PickType.onlyImage,
651
+                                photoPathList: null,
652
+                                isFullImage: snapshot.data.isFullImage,
653
+                                onSelected: (PickedEntity entity) {
654
+                                  pickedChangeController.add(entity);
655
+                                });
598 656
                           },
599 657
                         ),
600 658
                       ),
@@ -627,10 +685,12 @@ class _ImageButtonState extends State<ImageButton> {
627 685
                                     ),
628 686
                                   ),
629 687
                                   Padding(
630
-                                    padding: EdgeInsets.symmetric(horizontal: 8),
688
+                                    padding:
689
+                                        EdgeInsets.symmetric(horizontal: 8),
631 690
                                     child: Text(
632 691
                                       '原图',
633
-                                      style: TextStyle(color: theme.iconColor, fontSize: 16),
692
+                                      style: TextStyle(
693
+                                          color: theme.iconColor, fontSize: 16),
634 694
                                     ),
635 695
                                   ),
636 696
                                 ],
@@ -660,29 +720,35 @@ class _ImageButtonState extends State<ImageButton> {
660 720
                         color: theme.toggleColor,
661 721
                         disabledColor: theme.disabledIconColor,
662 722
                         shape: StadiumBorder(),
663
-                        onPressed: snapshot.data.asset.isNotEmpty ? () async {
664
-                          pickedChangeController.add(PickedEntity());
665
-                          toolbar.closeOverlay();
666
-                          for (var asset in snapshot.data.asset) {
667
-                            final image = await toolbar.editor.imageDelegate.picked(asset, snapshot.data.isFullImage);
668
-                            if (image != null) {
669
-                              toolbar.editor.formatSelection(NotusAttribute.embed.image(image));
670
-                            }
671
-                          }
672
-                        } : null,
723
+                        onPressed: snapshot.data.asset.isNotEmpty
724
+                            ? () async {
725
+                                pickedChangeController.add(PickedEntity());
726
+                                toolbar.closeOverlay();
727
+                                for (var asset in snapshot.data.asset) {
728
+                                  var file = await asset.originFile;
729
+                                  final image = await toolbar
730
+                                      .editor.imageDelegate
731
+                                      .picked(file, snapshot.data.isFullImage);
732
+                                  if (image != null) {
733
+                                    toolbar.editor.formatSelection(
734
+                                        NotusAttribute.embed.image(image));
735
+                                  }
736
+                                }
737
+                              }
738
+                            : null,
673 739
                         child: Container(
674 740
                           height: 30,
675 741
                           alignment: Alignment.center,
676 742
                           padding: EdgeInsets.symmetric(horizontal: 20),
677 743
                           child: Text(
678
-                              '上传 ${snapshot.data.asset.isNotEmpty ? "(${snapshot.data.asset.length})" : ''}',
679
-                              style: TextStyle(
680
-                                color: Colors.white,
681
-                                fontSize: 14,
682
-                              ),
744
+                            '上传 ${snapshot.data.asset.isNotEmpty ? "(${snapshot.data.asset.length})" : ''}',
745
+                            style: TextStyle(
746
+                              color: Colors.white,
747
+                              fontSize: 14,
683 748
                             ),
684 749
                           ),
685 750
                         ),
751
+                      ),
686 752
                     ],
687 753
                   );
688 754
                 },
@@ -757,7 +823,7 @@ class _LinkButtonState extends State<LinkButton> {
757 823
 
758 824
   void showOverlay() {
759 825
     final toolbar = ZefyrToolbar.of(context);
760
-    toolbar.showOverlay(buildOverlay).whenComplete(cancelEdit);
826
+    toolbar.showOverlay(buildOverlay, ZefyrToolbarAction.link).whenComplete(cancelEdit);
761 827
   }
762 828
 
763 829
   void closeOverlay() {

+ 1
- 1
packages/zefyr/lib/src/widgets/editable_text.dart 파일 보기

@@ -310,7 +310,7 @@ class _ZefyrEditableTextState extends State<ZefyrEditableText>
310 310
     final scope = ZefyrScope.of(context);
311 311
     var showKeyboard = true;
312 312
     if (_focusNode.consumeKeyboardToken()) {
313
-      showKeyboard = scope.tapHandle == null;
313
+      showKeyboard = scope.keepOverlay == false;
314 314
     } else {
315 315
       showKeyboard = false;
316 316
     }

+ 2
- 1
packages/zefyr/lib/src/widgets/editor.dart 파일 보기

@@ -116,7 +116,8 @@ class _ZefyrEditorState extends State<ZefyrEditor> {
116 116
 
117 117
   void _handleChange() {
118 118
     if (_scope.focusOwner == FocusOwner.none) {
119
-      if (_scope.tapHandle == null) {
119
+      if (!_scope.keepOverlay) {
120
+        _scope.toolbarAction = null;
120 121
         hideToolbar();
121 122
       }
122 123
     } else if (!hasToolbar) {

+ 182
- 181
packages/zefyr/lib/src/widgets/iconfont.dart 파일 보기

@@ -4,316 +4,317 @@ class ZefyrFont {
4 4
   ZefyrFont._();
5 5
   static const String _family = 'ZefyrFont';
6 6
   static const String _fontPackage = 'zefyr';
7
-  static const IconData global_language = IconData(0xe725, fontFamily: _family , fontPackage: _fontPackage);
8
-	static const IconData light = IconData(0xe723, fontFamily: _family , fontPackage: _fontPackage);
9
-	static const IconData checked = IconData(0xe724, fontFamily: _family , fontPackage: _fontPackage);
10
-  static const IconData largetitle_dropdown = IconData(0xe722, fontFamily: _family , fontPackage: _fontPackage);
11
-	static const IconData global_toast_loading_delete = IconData(0xe721, fontFamily: _family , fontPackage: _fontPackage);
12
-	static const IconData toast_fail = IconData(0xe71e, fontFamily: _family , fontPackage: _fontPackage);
13
-	static const IconData toast_success = IconData(0xe71f, fontFamily: _family , fontPackage: _fontPackage);
14
-	static const IconData toast_loading = IconData(0xe720, fontFamily: _family , fontPackage: _fontPackage);
15
-	static const IconData global_sidebar_profile = IconData(0xe71d, fontFamily: _family , fontPackage: _fontPackage);
16
-	static const IconData lightmode = IconData(0xe71c, fontFamily: _family , fontPackage: _fontPackage);
17
-	static const IconData salary_details_time = IconData(0xe71b, fontFamily: _family , fontPackage: _fontPackage);
18
-	static const IconData share = IconData(0xe719, fontFamily: _family , fontPackage: _fontPackage);
19
-	static const IconData btn_global_videoplay = IconData(0xe6c5, fontFamily: _family , fontPackage: _fontPackage);
20
-	static const IconData im_groupdetails_archive = IconData(0xe6cf, fontFamily: _family , fontPackage: _fontPackage);
21
-	static const IconData im_notice_arrow = IconData(0xe71a, fontFamily: _family , fontPackage: _fontPackage);
22
-	static const IconData minus = IconData(0xe718, fontFamily: _family , fontPackage: _fontPackage);
23
-	static const IconData staffdetails_review = IconData(0xe716, fontFamily: _family , fontPackage: _fontPackage);
24
-	static const IconData staffdetails_salary = IconData(0xe717, fontFamily: _family , fontPackage: _fontPackage);
7
+  static const IconData note_editor_emoji = IconData(0xe728, fontFamily: _family, fontPackage: _fontPackage);
8
+  static const IconData global_language = IconData(0xe725, fontFamily: _family, fontPackage: _fontPackage);
9
+	static const IconData light = IconData(0xe723, fontFamily: _family, fontPackage: _fontPackage);
10
+	static const IconData checked = IconData(0xe724, fontFamily: _family, fontPackage: _fontPackage);
11
+  static const IconData largetitle_dropdown = IconData(0xe722, fontFamily: _family, fontPackage: _fontPackage);
12
+	static const IconData global_toast_loading_delete = IconData(0xe721, fontFamily: _family, fontPackage: _fontPackage);
13
+	static const IconData toast_fail = IconData(0xe71e, fontFamily: _family, fontPackage: _fontPackage);
14
+	static const IconData toast_success = IconData(0xe71f, fontFamily: _family, fontPackage: _fontPackage);
15
+	static const IconData toast_loading = IconData(0xe720, fontFamily: _family, fontPackage: _fontPackage);
16
+	static const IconData global_sidebar_profile = IconData(0xe71d, fontFamily: _family, fontPackage: _fontPackage);
17
+	static const IconData lightmode = IconData(0xe71c, fontFamily: _family, fontPackage: _fontPackage);
18
+	static const IconData salary_details_time = IconData(0xe71b, fontFamily: _family, fontPackage: _fontPackage);
19
+	static const IconData share = IconData(0xe719, fontFamily: _family, fontPackage: _fontPackage);
20
+	static const IconData btn_global_videoplay = IconData(0xe6c5, fontFamily: _family, fontPackage: _fontPackage);
21
+	static const IconData im_groupdetails_archive = IconData(0xe6cf, fontFamily: _family, fontPackage: _fontPackage);
22
+	static const IconData im_notice_arrow = IconData(0xe71a, fontFamily: _family, fontPackage: _fontPackage);
23
+	static const IconData minus = IconData(0xe718, fontFamily: _family, fontPackage: _fontPackage);
24
+	static const IconData staffdetails_review = IconData(0xe716, fontFamily: _family, fontPackage: _fontPackage);
25
+	static const IconData staffdetails_salary = IconData(0xe717, fontFamily: _family, fontPackage: _fontPackage);
25 26
   static const IconData list_update_fail =
26
-      IconData(0xe715, fontFamily: _family , fontPackage: _fontPackage);
27
+      IconData(0xe715, fontFamily: _family, fontPackage: _fontPackage);
27 28
   static const IconData list_update_complete =
28
-      IconData(0xe712, fontFamily: _family , fontPackage: _fontPackage);
29
+      IconData(0xe712, fontFamily: _family, fontPackage: _fontPackage);
29 30
   static const IconData list_update_pull =
30
-      IconData(0xe713, fontFamily: _family , fontPackage: _fontPackage);
31
+      IconData(0xe713, fontFamily: _family, fontPackage: _fontPackage);
31 32
   static const IconData list_update_loading =
32
-      IconData(0xe714, fontFamily: _family , fontPackage: _fontPackage);
33
+      IconData(0xe714, fontFamily: _family, fontPackage: _fontPackage);
33 34
   static const IconData contact_organization =
34
-      IconData(0xe70d, fontFamily: _family , fontPackage: _fontPackage);
35
+      IconData(0xe70d, fontFamily: _family, fontPackage: _fontPackage);
35 36
   static const IconData contact_outsider =
36
-      IconData(0xe70e, fontFamily: _family , fontPackage: _fontPackage);
37
-  static const IconData contact_new = IconData(0xe70f, fontFamily: _family , fontPackage: _fontPackage);
38
-  static const IconData contact_mygroup = IconData(0xe710, fontFamily: _family , fontPackage: _fontPackage);
39
-  static const IconData contact_robot = IconData(0xe711, fontFamily: _family , fontPackage: _fontPackage);
40
-  static const IconData note_createnote = IconData(0xe70b, fontFamily: _family , fontPackage: _fontPackage);
37
+      IconData(0xe70e, fontFamily: _family, fontPackage: _fontPackage);
38
+  static const IconData contact_new = IconData(0xe70f, fontFamily: _family, fontPackage: _fontPackage);
39
+  static const IconData contact_mygroup = IconData(0xe710, fontFamily: _family, fontPackage: _fontPackage);
40
+  static const IconData contact_robot = IconData(0xe711, fontFamily: _family, fontPackage: _fontPackage);
41
+  static const IconData note_createnote = IconData(0xe70b, fontFamily: _family, fontPackage: _fontPackage);
41 42
   static const IconData note_createfolder =
42
-      IconData(0xe70c, fontFamily: _family , fontPackage: _fontPackage);
43
-  static const IconData rating_full = IconData(0xe708, fontFamily: _family , fontPackage: _fontPackage);
44
-  static const IconData rating_half = IconData(0xe709, fontFamily: _family , fontPackage: _fontPackage);
45
-  static const IconData rating_unfull = IconData(0xe70a, fontFamily: _family , fontPackage: _fontPackage);
43
+      IconData(0xe70c, fontFamily: _family, fontPackage: _fontPackage);
44
+  static const IconData rating_full = IconData(0xe708, fontFamily: _family, fontPackage: _fontPackage);
45
+  static const IconData rating_half = IconData(0xe709, fontFamily: _family, fontPackage: _fontPackage);
46
+  static const IconData rating_unfull = IconData(0xe70a, fontFamily: _family, fontPackage: _fontPackage);
46 47
   static const IconData note_searchfile_pre =
47
-      IconData(0xe706, fontFamily: _family , fontPackage: _fontPackage);
48
+      IconData(0xe706, fontFamily: _family, fontPackage: _fontPackage);
48 49
   static const IconData note_searchfile_next =
49
-      IconData(0xe707, fontFamily: _family , fontPackage: _fontPackage);
50
+      IconData(0xe707, fontFamily: _family, fontPackage: _fontPackage);
50 51
   static const IconData note_notelist_more =
51
-      IconData(0xe705, fontFamily: _family , fontPackage: _fontPackage);
52
+      IconData(0xe705, fontFamily: _family, fontPackage: _fontPackage);
52 53
   static const IconData note_notelist_folder =
53
-      IconData(0xe700, fontFamily: _family , fontPackage: _fontPackage);
54
+      IconData(0xe700, fontFamily: _family, fontPackage: _fontPackage);
54 55
   static const IconData note_notelist_emptyfolder =
55
-      IconData(0xe701, fontFamily: _family , fontPackage: _fontPackage);
56
+      IconData(0xe701, fontFamily: _family, fontPackage: _fontPackage);
56 57
   static const IconData note_notelist_rubbish =
57
-      IconData(0xe702, fontFamily: _family , fontPackage: _fontPackage);
58
+      IconData(0xe702, fontFamily: _family, fontPackage: _fontPackage);
58 59
   static const IconData note_notelist_note =
59
-      IconData(0xe703, fontFamily: _family , fontPackage: _fontPackage);
60
+      IconData(0xe703, fontFamily: _family, fontPackage: _fontPackage);
60 61
   static const IconData note_notelist_savefolder =
61
-      IconData(0xe704, fontFamily: _family , fontPackage: _fontPackage);
62
+      IconData(0xe704, fontFamily: _family, fontPackage: _fontPackage);
62 63
   static const IconData note_more_comment =
63
-      IconData(0xe6f7, fontFamily: _family , fontPackage: _fontPackage);
64
+      IconData(0xe6f7, fontFamily: _family, fontPackage: _fontPackage);
64 65
   static const IconData note_more_history =
65
-      IconData(0xe6f8, fontFamily: _family , fontPackage: _fontPackage);
66
-  static const IconData note_more_info = IconData(0xe6f9, fontFamily: _family , fontPackage: _fontPackage);
66
+      IconData(0xe6f8, fontFamily: _family, fontPackage: _fontPackage);
67
+  static const IconData note_more_info = IconData(0xe6f9, fontFamily: _family, fontPackage: _fontPackage);
67 68
   static const IconData note_more_search =
68
-      IconData(0xe6fa, fontFamily: _family , fontPackage: _fontPackage);
69
-  static const IconData note_more_copy = IconData(0xe6fb, fontFamily: _family , fontPackage: _fontPackage);
70
-  static const IconData note_more_pin = IconData(0xe6fc, fontFamily: _family , fontPackage: _fontPackage);
69
+      IconData(0xe6fa, fontFamily: _family, fontPackage: _fontPackage);
70
+  static const IconData note_more_copy = IconData(0xe6fb, fontFamily: _family, fontPackage: _fontPackage);
71
+  static const IconData note_more_pin = IconData(0xe6fc, fontFamily: _family, fontPackage: _fontPackage);
71 72
   static const IconData note_more_delete =
72
-      IconData(0xe6fd, fontFamily: _family , fontPackage: _fontPackage);
73
+      IconData(0xe6fd, fontFamily: _family, fontPackage: _fontPackage);
73 74
   static const IconData note_more_favorite =
74
-      IconData(0xe6fe, fontFamily: _family , fontPackage: _fontPackage);
75
-  static const IconData note_more_move = IconData(0xe6ff, fontFamily: _family , fontPackage: _fontPackage);
75
+      IconData(0xe6fe, fontFamily: _family, fontPackage: _fontPackage);
76
+  static const IconData note_more_move = IconData(0xe6ff, fontFamily: _family, fontPackage: _fontPackage);
76 77
   static const IconData note_editor_text_h =
77
-      IconData(0xe6e4, fontFamily: _family , fontPackage: _fontPackage);
78
+      IconData(0xe6e4, fontFamily: _family, fontPackage: _fontPackage);
78 79
   static const IconData note_editor_text_code =
79
-      IconData(0xe6e5, fontFamily: _family , fontPackage: _fontPackage);
80
+      IconData(0xe6e5, fontFamily: _family, fontPackage: _fontPackage);
80 81
   static const IconData note_editor_text_bold =
81
-      IconData(0xe6e6, fontFamily: _family , fontPackage: _fontPackage);
82
+      IconData(0xe6e6, fontFamily: _family, fontPackage: _fontPackage);
82 83
   static const IconData note_editor_text_h1 =
83
-      IconData(0xe6e7, fontFamily: _family , fontPackage: _fontPackage);
84
+      IconData(0xe6e7, fontFamily: _family, fontPackage: _fontPackage);
84 85
   static const IconData note_editor_text_center =
85
-      IconData(0xe6e8, fontFamily: _family , fontPackage: _fontPackage);
86
+      IconData(0xe6e8, fontFamily: _family, fontPackage: _fontPackage);
86 87
   static const IconData note_editor_text_deleteline =
87
-      IconData(0xe6e9, fontFamily: _family , fontPackage: _fontPackage);
88
+      IconData(0xe6e9, fontFamily: _family, fontPackage: _fontPackage);
88 89
   static const IconData note_editor_text_left =
89
-      IconData(0xe6ea, fontFamily: _family , fontPackage: _fontPackage);
90
+      IconData(0xe6ea, fontFamily: _family, fontPackage: _fontPackage);
90 91
   static const IconData note_editor_text_h2 =
91
-      IconData(0xe6eb, fontFamily: _family , fontPackage: _fontPackage);
92
+      IconData(0xe6eb, fontFamily: _family, fontPackage: _fontPackage);
92 93
   static const IconData note_editor_text_h3 =
93
-      IconData(0xe6ec, fontFamily: _family , fontPackage: _fontPackage);
94
+      IconData(0xe6ec, fontFamily: _family, fontPackage: _fontPackage);
94 95
   static const IconData note_editor_text_right =
95
-      IconData(0xe6ed, fontFamily: _family , fontPackage: _fontPackage);
96
+      IconData(0xe6ed, fontFamily: _family, fontPackage: _fontPackage);
96 97
   static const IconData note_editor_text_hr =
97
-      IconData(0xe6ee, fontFamily: _family , fontPackage: _fontPackage);
98
+      IconData(0xe6ee, fontFamily: _family, fontPackage: _fontPackage);
98 99
   static const IconData note_editor_text_h4 =
99
-      IconData(0xe6ef, fontFamily: _family , fontPackage: _fontPackage);
100
+      IconData(0xe6ef, fontFamily: _family, fontPackage: _fontPackage);
100 101
   static const IconData note_editor_text_underline =
101
-      IconData(0xe6f0, fontFamily: _family , fontPackage: _fontPackage);
102
+      IconData(0xe6f0, fontFamily: _family, fontPackage: _fontPackage);
102 103
   static const IconData note_editor_text_ul =
103
-      IconData(0xe6f1, fontFamily: _family , fontPackage: _fontPackage);
104
+      IconData(0xe6f1, fontFamily: _family, fontPackage: _fontPackage);
104 105
   static const IconData note_editor_text_quote =
105
-      IconData(0xe6f2, fontFamily: _family , fontPackage: _fontPackage);
106
+      IconData(0xe6f2, fontFamily: _family, fontPackage: _fontPackage);
106 107
   static const IconData note_editor_text_in =
107
-      IconData(0xe6f3, fontFamily: _family , fontPackage: _fontPackage);
108
+      IconData(0xe6f3, fontFamily: _family, fontPackage: _fontPackage);
108 109
   static const IconData note_editor_text_h5 =
109
-      IconData(0xe6f4, fontFamily: _family , fontPackage: _fontPackage);
110
+      IconData(0xe6f4, fontFamily: _family, fontPackage: _fontPackage);
110 111
   static const IconData note_editor_text_para =
111
-      IconData(0xe6f5, fontFamily: _family , fontPackage: _fontPackage);
112
+      IconData(0xe6f5, fontFamily: _family, fontPackage: _fontPackage);
112 113
   static const IconData note_editor_text_ol =
113
-      IconData(0xe6f6, fontFamily: _family , fontPackage: _fontPackage);
114
+      IconData(0xe6f6, fontFamily: _family, fontPackage: _fontPackage);
114 115
   static const IconData note_editor_unkeyboard =
115
-      IconData(0xe6dc, fontFamily: _family , fontPackage: _fontPackage);
116
+      IconData(0xe6dc, fontFamily: _family, fontPackage: _fontPackage);
116 117
   static const IconData note_editor_keyboard =
117
-      IconData(0xe6dd, fontFamily: _family , fontPackage: _fontPackage);
118
+      IconData(0xe6dd, fontFamily: _family, fontPackage: _fontPackage);
118 119
   static const IconData note_editor_redo =
119
-      IconData(0xe6de, fontFamily: _family , fontPackage: _fontPackage);
120
+      IconData(0xe6de, fontFamily: _family, fontPackage: _fontPackage);
120 121
   static const IconData note_editor_undo =
121
-      IconData(0xe6df, fontFamily: _family , fontPackage: _fontPackage);
122
+      IconData(0xe6df, fontFamily: _family, fontPackage: _fontPackage);
122 123
   static const IconData note_editor_text =
123
-      IconData(0xe6e0, fontFamily: _family , fontPackage: _fontPackage);
124
+      IconData(0xe6e0, fontFamily: _family, fontPackage: _fontPackage);
124 125
   static const IconData note_editor_image =
125
-      IconData(0xe6e1, fontFamily: _family , fontPackage: _fontPackage);
126
+      IconData(0xe6e1, fontFamily: _family, fontPackage: _fontPackage);
126 127
   static const IconData note_editor_link =
127
-      IconData(0xe6e2, fontFamily: _family , fontPackage: _fontPackage);
128
+      IconData(0xe6e2, fontFamily: _family, fontPackage: _fontPackage);
128 129
   static const IconData note_editor_save =
129
-      IconData(0xe6e3, fontFamily: _family , fontPackage: _fontPackage);
130
+      IconData(0xe6e3, fontFamily: _family, fontPackage: _fontPackage);
130 131
   static const IconData desktop_todolist_warning =
131
-      IconData(0xe6d8, fontFamily: _family , fontPackage: _fontPackage);
132
+      IconData(0xe6d8, fontFamily: _family, fontPackage: _fontPackage);
132 133
   static const IconData desktop_global_calender =
133
-      IconData(0xe6d9, fontFamily: _family , fontPackage: _fontPackage);
134
+      IconData(0xe6d9, fontFamily: _family, fontPackage: _fontPackage);
134 135
   static const IconData desktop_global_repeat =
135
-      IconData(0xe6da, fontFamily: _family , fontPackage: _fontPackage);
136
+      IconData(0xe6da, fontFamily: _family, fontPackage: _fontPackage);
136 137
   static const IconData desktop_global_important =
137
-      IconData(0xe6db, fontFamily: _family , fontPackage: _fontPackage);
138
+      IconData(0xe6db, fontFamily: _family, fontPackage: _fontPackage);
138 139
   static const IconData startpage_jointeam =
139
-      IconData(0xe6d6, fontFamily: _family , fontPackage: _fontPackage);
140
+      IconData(0xe6d6, fontFamily: _family, fontPackage: _fontPackage);
140 141
   static const IconData startpage_creatteam =
141
-      IconData(0xe6d7, fontFamily: _family , fontPackage: _fontPackage);
142
+      IconData(0xe6d7, fontFamily: _family, fontPackage: _fontPackage);
142 143
   static const IconData staffdetails_videocall =
143
-      IconData(0xe6d3, fontFamily: _family , fontPackage: _fontPackage);
144
+      IconData(0xe6d3, fontFamily: _family, fontPackage: _fontPackage);
144 145
   static const IconData staffdetails_voicecall =
145
-      IconData(0xe6d4, fontFamily: _family , fontPackage: _fontPackage);
146
+      IconData(0xe6d4, fontFamily: _family, fontPackage: _fontPackage);
146 147
   static const IconData staffdetails_sendmessage =
147
-      IconData(0xe6d5, fontFamily: _family , fontPackage: _fontPackage);
148
+      IconData(0xe6d5, fontFamily: _family, fontPackage: _fontPackage);
148 149
   static const IconData staffdetails_job =
149
-      IconData(0xe6d0, fontFamily: _family , fontPackage: _fontPackage);
150
+      IconData(0xe6d0, fontFamily: _family, fontPackage: _fontPackage);
150 151
   static const IconData staffdetails_contact =
151
-      IconData(0xe6d1, fontFamily: _family , fontPackage: _fontPackage);
152
+      IconData(0xe6d1, fontFamily: _family, fontPackage: _fontPackage);
152 153
   static const IconData staffdetails_basic =
153
-      IconData(0xe6d2, fontFamily: _family , fontPackage: _fontPackage);
154
+      IconData(0xe6d2, fontFamily: _family, fontPackage: _fontPackage);
154 155
   static const IconData selectpeople_delete =
155
-      IconData(0xe6cf, fontFamily: _family , fontPackage: _fontPackage);
156
+      IconData(0xe6cf, fontFamily: _family, fontPackage: _fontPackage);
156 157
   static const IconData im_comment_empty =
157
-      IconData(0xe6ce, fontFamily: _family , fontPackage: _fontPackage);
158
+      IconData(0xe6ce, fontFamily: _family, fontPackage: _fontPackage);
158 159
   static const IconData im_filebar_download =
159
-      IconData(0xe6c8, fontFamily: _family , fontPackage: _fontPackage);
160
+      IconData(0xe6c8, fontFamily: _family, fontPackage: _fontPackage);
160 161
   static const IconData im_filebar_favorite_faved =
161
-      IconData(0xe6c9, fontFamily: _family , fontPackage: _fontPackage);
162
+      IconData(0xe6c9, fontFamily: _family, fontPackage: _fontPackage);
162 163
   static const IconData im_filebar_forward =
163
-      IconData(0xe6ca, fontFamily: _family , fontPackage: _fontPackage);
164
+      IconData(0xe6ca, fontFamily: _family, fontPackage: _fontPackage);
164 165
   static const IconData im_filebar_comment =
165
-      IconData(0xe6cb, fontFamily: _family , fontPackage: _fontPackage);
166
+      IconData(0xe6cb, fontFamily: _family, fontPackage: _fontPackage);
166 167
   static const IconData im_filebar_delete =
167
-      IconData(0xe6cc, fontFamily: _family , fontPackage: _fontPackage);
168
+      IconData(0xe6cc, fontFamily: _family, fontPackage: _fontPackage);
168 169
   static const IconData im_filebar_favorite_unfav =
169
-      IconData(0xe6cd, fontFamily: _family , fontPackage: _fontPackage);
170
+      IconData(0xe6cd, fontFamily: _family, fontPackage: _fontPackage);
170 171
   static const IconData im_groupdetails_edit =
171
-      IconData(0xe6c5, fontFamily: _family , fontPackage: _fontPackage);
172
+      IconData(0xe6c5, fontFamily: _family, fontPackage: _fontPackage);
172 173
   static const IconData im_groupdetails_member =
173
-      IconData(0xe6c6, fontFamily: _family , fontPackage: _fontPackage);
174
+      IconData(0xe6c6, fontFamily: _family, fontPackage: _fontPackage);
174 175
   static const IconData im_groupdetails_robot =
175
-      IconData(0xe6c7, fontFamily: _family , fontPackage: _fontPackage);
176
+      IconData(0xe6c7, fontFamily: _family, fontPackage: _fontPackage);
176 177
   static const IconData im_groupdetails_file =
177
-      IconData(0xe6c1, fontFamily: _family , fontPackage: _fontPackage);
178
+      IconData(0xe6c1, fontFamily: _family, fontPackage: _fontPackage);
178 179
   static const IconData im_groupdetails_history =
179
-      IconData(0xe6c2, fontFamily: _family , fontPackage: _fontPackage);
180
+      IconData(0xe6c2, fontFamily: _family, fontPackage: _fontPackage);
180 181
   static const IconData im_groupdetails_pin =
181
-      IconData(0xe6c3, fontFamily: _family , fontPackage: _fontPackage);
182
+      IconData(0xe6c3, fontFamily: _family, fontPackage: _fontPackage);
182 183
   static const IconData im_groupdetails_board =
183
-      IconData(0xe6c4, fontFamily: _family , fontPackage: _fontPackage);
184
+      IconData(0xe6c4, fontFamily: _family, fontPackage: _fontPackage);
184 185
   static const IconData im_list_nodisturb =
185
-      IconData(0xe6c0, fontFamily: _family , fontPackage: _fontPackage);
186
+      IconData(0xe6c0, fontFamily: _family, fontPackage: _fontPackage);
186 187
   static const IconData im_videocall_camera =
187
-      IconData(0xe6ba, fontFamily: _family , fontPackage: _fontPackage);
188
+      IconData(0xe6ba, fontFamily: _family, fontPackage: _fontPackage);
188 189
   static const IconData im_voicecall_sound =
189
-      IconData(0xe6bb, fontFamily: _family , fontPackage: _fontPackage);
190
+      IconData(0xe6bb, fontFamily: _family, fontPackage: _fontPackage);
190 191
   static const IconData im_videocall_stretch =
191
-      IconData(0xe6bc, fontFamily: _family , fontPackage: _fontPackage);
192
+      IconData(0xe6bc, fontFamily: _family, fontPackage: _fontPackage);
192 193
   static const IconData im_voicecall_video =
193
-      IconData(0xe6bd, fontFamily: _family , fontPackage: _fontPackage);
194
+      IconData(0xe6bd, fontFamily: _family, fontPackage: _fontPackage);
194 195
   static const IconData im_videocall_voice =
195
-      IconData(0xe6be, fontFamily: _family , fontPackage: _fontPackage);
196
+      IconData(0xe6be, fontFamily: _family, fontPackage: _fontPackage);
196 197
   static const IconData im_voicecall_mute =
197
-      IconData(0xe6bf, fontFamily: _family , fontPackage: _fontPackage);
198
+      IconData(0xe6bf, fontFamily: _family, fontPackage: _fontPackage);
198 199
   static const IconData im_sidebar_favorite =
199
-      IconData(0xe6b6, fontFamily: _family , fontPackage: _fontPackage);
200
-  static const IconData im_sidebar_file = IconData(0xe6b7, fontFamily: _family , fontPackage: _fontPackage);
201
-  static const IconData im_sidebar_at = IconData(0xe6b8, fontFamily: _family , fontPackage: _fontPackage);
200
+      IconData(0xe6b6, fontFamily: _family, fontPackage: _fontPackage);
201
+  static const IconData im_sidebar_file = IconData(0xe6b7, fontFamily: _family, fontPackage: _fontPackage);
202
+  static const IconData im_sidebar_at = IconData(0xe6b8, fontFamily: _family, fontPackage: _fontPackage);
202 203
   static const IconData im_sidebar_notice =
203
-      IconData(0xe6b9, fontFamily: _family , fontPackage: _fontPackage);
204
+      IconData(0xe6b9, fontFamily: _family, fontPackage: _fontPackage);
204 205
   static const IconData im_dialoge_more_voicecall =
205
-      IconData(0xe6af, fontFamily: _family , fontPackage: _fontPackage);
206
+      IconData(0xe6af, fontFamily: _family, fontPackage: _fontPackage);
206 207
   static const IconData im_dialoge_more_takephoto =
207
-      IconData(0xe6b0, fontFamily: _family , fontPackage: _fontPackage);
208
+      IconData(0xe6b0, fontFamily: _family, fontPackage: _fontPackage);
208 209
   static const IconData im_dialoge_more_album =
209
-      IconData(0xe6b1, fontFamily: _family , fontPackage: _fontPackage);
210
+      IconData(0xe6b1, fontFamily: _family, fontPackage: _fontPackage);
210 211
   static const IconData im_dialoge_more_note =
211
-      IconData(0xe6b2, fontFamily: _family , fontPackage: _fontPackage);
212
+      IconData(0xe6b2, fontFamily: _family, fontPackage: _fontPackage);
212 213
   static const IconData im_dialoge_more_task =
213
-      IconData(0xe6b3, fontFamily: _family , fontPackage: _fontPackage);
214
+      IconData(0xe6b3, fontFamily: _family, fontPackage: _fontPackage);
214 215
   static const IconData im_dialoge_more_videocall =
215
-      IconData(0xe6b4, fontFamily: _family , fontPackage: _fontPackage);
216
+      IconData(0xe6b4, fontFamily: _family, fontPackage: _fontPackage);
216 217
   static const IconData im_dialoge_more_project =
217
-      IconData(0xe6b5, fontFamily: _family , fontPackage: _fontPackage);
218
+      IconData(0xe6b5, fontFamily: _family, fontPackage: _fontPackage);
218 219
   static const IconData im_dialogebar_sendmore =
219
-      IconData(0xe6ac, fontFamily: _family , fontPackage: _fontPackage);
220
+      IconData(0xe6ac, fontFamily: _family, fontPackage: _fontPackage);
220 221
   static const IconData im_dialogebar_sendemoji =
221
-      IconData(0xe6ad, fontFamily: _family , fontPackage: _fontPackage);
222
+      IconData(0xe6ad, fontFamily: _family, fontPackage: _fontPackage);
222 223
   static const IconData im_dialogebar_sendvoice =
223
-      IconData(0xe6ae, fontFamily: _family , fontPackage: _fontPackage);
224
+      IconData(0xe6ae, fontFamily: _family, fontPackage: _fontPackage);
224 225
   static const IconData im_dialoge_voicestop =
225
-      IconData(0xe6a7, fontFamily: _family , fontPackage: _fontPackage);
226
+      IconData(0xe6a7, fontFamily: _family, fontPackage: _fontPackage);
226 227
   static const IconData im_dialoge_voice =
227
-      IconData(0xe6a8, fontFamily: _family , fontPackage: _fontPackage);
228
-  static const IconData im_dialoge_pin = IconData(0xe6a9, fontFamily: _family , fontPackage: _fontPackage);
228
+      IconData(0xe6a8, fontFamily: _family, fontPackage: _fontPackage);
229
+  static const IconData im_dialoge_pin = IconData(0xe6a9, fontFamily: _family, fontPackage: _fontPackage);
229 230
   static const IconData im_dialoge_voiceplay =
230
-      IconData(0xe6aa, fontFamily: _family , fontPackage: _fontPackage);
231
+      IconData(0xe6aa, fontFamily: _family, fontPackage: _fontPackage);
231 232
   static const IconData im_dialoge_record =
232
-      IconData(0xe6ab, fontFamily: _family , fontPackage: _fontPackage);
233
+      IconData(0xe6ab, fontFamily: _family, fontPackage: _fontPackage);
233 234
   static const IconData global_list_arrow =
234
-      IconData(0xe6a5, fontFamily: _family , fontPackage: _fontPackage);
235
+      IconData(0xe6a5, fontFamily: _family, fontPackage: _fontPackage);
235 236
   static const IconData global_list_delete =
236
-      IconData(0xe6a6, fontFamily: _family , fontPackage: _fontPackage);
237
+      IconData(0xe6a6, fontFamily: _family, fontPackage: _fontPackage);
237 238
   static const IconData multiselect_unselected =
238
-      IconData(0xe6a2, fontFamily: _family , fontPackage: _fontPackage);
239
+      IconData(0xe6a2, fontFamily: _family, fontPackage: _fontPackage);
239 240
   static const IconData multiselect_audio =
240
-      IconData(0xe6a3, fontFamily: _family , fontPackage: _fontPackage);
241
+      IconData(0xe6a3, fontFamily: _family, fontPackage: _fontPackage);
241 242
   static const IconData multiselect_selected =
242
-      IconData(0xe6a4, fontFamily: _family , fontPackage: _fontPackage);
243
-  static const IconData login_dropdown = IconData(0xe6a1, fontFamily: _family , fontPackage: _fontPackage);
243
+      IconData(0xe6a4, fontFamily: _family, fontPackage: _fontPackage);
244
+  static const IconData login_dropdown = IconData(0xe6a1, fontFamily: _family, fontPackage: _fontPackage);
244 245
   static const IconData global_actionsheet_close =
245
-      IconData(0xe6a0, fontFamily: _family , fontPackage: _fontPackage);
246
+      IconData(0xe6a0, fontFamily: _family, fontPackage: _fontPackage);
246 247
   static const IconData global_sidebar_status =
247
-      IconData(0xe69f, fontFamily: _family , fontPackage: _fontPackage);
248
+      IconData(0xe69f, fontFamily: _family, fontPackage: _fontPackage);
248 249
   static const IconData global_sidebar_qrcode =
249
-      IconData(0xe69a, fontFamily: _family , fontPackage: _fontPackage);
250
+      IconData(0xe69a, fontFamily: _family, fontPackage: _fontPackage);
250 251
   static const IconData global_sidebar_teamsetting =
251
-      IconData(0xe69b, fontFamily: _family , fontPackage: _fontPackage);
252
+      IconData(0xe69b, fontFamily: _family, fontPackage: _fontPackage);
252 253
   static const IconData global_sidebar_account =
253
-      IconData(0xe69c, fontFamily: _family , fontPackage: _fontPackage);
254
+      IconData(0xe69c, fontFamily: _family, fontPackage: _fontPackage);
254 255
   static const IconData global_sidebar_noticesetting =
255
-      IconData(0xe69d, fontFamily: _family , fontPackage: _fontPackage);
256
+      IconData(0xe69d, fontFamily: _family, fontPackage: _fontPackage);
256 257
   static const IconData global_sidebar_system =
257
-      IconData(0xe69e, fontFamily: _family , fontPackage: _fontPackage);
258
+      IconData(0xe69e, fontFamily: _family, fontPackage: _fontPackage);
258 259
   static const IconData global_sidebar_notice =
259
-      IconData(0xe698, fontFamily: _family , fontPackage: _fontPackage);
260
+      IconData(0xe698, fontFamily: _family, fontPackage: _fontPackage);
260 261
   static const IconData global_sidebar_darkmode =
261
-      IconData(0xe699, fontFamily: _family , fontPackage: _fontPackage);
262
+      IconData(0xe699, fontFamily: _family, fontPackage: _fontPackage);
262 263
   static const IconData global_sidebar_lightmode =
263
-      IconData(0xe71c, fontFamily: _family , fontPackage: _fontPackage);
264
+      IconData(0xe71c, fontFamily: _family, fontPackage: _fontPackage);
264 265
   static const IconData global_sidebar_add =
265
-      IconData(0xe697, fontFamily: _family , fontPackage: _fontPackage);
266
+      IconData(0xe697, fontFamily: _family, fontPackage: _fontPackage);
266 267
   static const IconData global_share_more =
267
-      IconData(0xe691, fontFamily: _family , fontPackage: _fontPackage);
268
+      IconData(0xe691, fontFamily: _family, fontPackage: _fontPackage);
268 269
   static const IconData global_share_message =
269
-      IconData(0xe692, fontFamily: _family , fontPackage: _fontPackage);
270
-  static const IconData global_share_qq = IconData(0xe693, fontFamily: _family , fontPackage: _fontPackage);
270
+      IconData(0xe692, fontFamily: _family, fontPackage: _fontPackage);
271
+  static const IconData global_share_qq = IconData(0xe693, fontFamily: _family, fontPackage: _fontPackage);
271 272
   static const IconData global_share_copylink =
272
-      IconData(0xe694, fontFamily: _family , fontPackage: _fontPackage);
273
+      IconData(0xe694, fontFamily: _family, fontPackage: _fontPackage);
273 274
   static const IconData global_share_weibo =
274
-      IconData(0xe695, fontFamily: _family , fontPackage: _fontPackage);
275
+      IconData(0xe695, fontFamily: _family, fontPackage: _fontPackage);
275 276
   static const IconData global_share_wechat =
276
-      IconData(0xe696, fontFamily: _family , fontPackage: _fontPackage);
277
+      IconData(0xe696, fontFamily: _family, fontPackage: _fontPackage);
277 278
   static const IconData global_searchbox_delete =
278
-      IconData(0xe68f, fontFamily: _family , fontPackage: _fontPackage);
279
+      IconData(0xe68f, fontFamily: _family, fontPackage: _fontPackage);
279 280
   static const IconData global_searchbox_search =
280
-      IconData(0xe690, fontFamily: _family , fontPackage: _fontPackage);
281
+      IconData(0xe690, fontFamily: _family, fontPackage: _fontPackage);
281 282
   static const IconData global_invitecode_refresh =
282
-      IconData(0xe68c, fontFamily: _family , fontPackage: _fontPackage);
283
+      IconData(0xe68c, fontFamily: _family, fontPackage: _fontPackage);
283 284
   static const IconData global_invitecode_link =
284
-      IconData(0xe68d, fontFamily: _family , fontPackage: _fontPackage);
285
+      IconData(0xe68d, fontFamily: _family, fontPackage: _fontPackage);
285 286
   static const IconData global_invitecode_qrcode =
286
-      IconData(0xe68e, fontFamily: _family , fontPackage: _fontPackage);
287
+      IconData(0xe68e, fontFamily: _family, fontPackage: _fontPackage);
287 288
   static const IconData global_invite_qrcode =
288
-      IconData(0xe688, fontFamily: _family , fontPackage: _fontPackage);
289
+      IconData(0xe688, fontFamily: _family, fontPackage: _fontPackage);
289 290
   static const IconData global_invite_code =
290
-      IconData(0xe689, fontFamily: _family , fontPackage: _fontPackage);
291
+      IconData(0xe689, fontFamily: _family, fontPackage: _fontPackage);
291 292
   static const IconData global_invite_wechat =
292
-      IconData(0xe68a, fontFamily: _family , fontPackage: _fontPackage);
293
+      IconData(0xe68a, fontFamily: _family, fontPackage: _fontPackage);
293 294
   static const IconData global_invite_qq =
294
-      IconData(0xe68b, fontFamily: _family , fontPackage: _fontPackage);
295
+      IconData(0xe68b, fontFamily: _family, fontPackage: _fontPackage);
295 296
   static const IconData global_hoverbtn_add =
296
-      IconData(0xe686, fontFamily: _family , fontPackage: _fontPackage);
297
+      IconData(0xe686, fontFamily: _family, fontPackage: _fontPackage);
297 298
   static const IconData global_hoverbtn_close =
298
-      IconData(0xe687, fontFamily: _family , fontPackage: _fontPackage);
299
-  static const IconData tabbar_note = IconData(0xe681, fontFamily: _family , fontPackage: _fontPackage);
300
-  static const IconData tabbar_desktop = IconData(0xe682, fontFamily: _family , fontPackage: _fontPackage);
301
-  static const IconData tabbar_explore = IconData(0xe683, fontFamily: _family , fontPackage: _fontPackage);
302
-  static const IconData tabbar_message = IconData(0xe684, fontFamily: _family , fontPackage: _fontPackage);
303
-  static const IconData tabbar_contact = IconData(0xe685, fontFamily: _family , fontPackage: _fontPackage);
304
-  static const IconData topbar_back = IconData(0xe680, fontFamily: _family , fontPackage: _fontPackage);
299
+      IconData(0xe687, fontFamily: _family, fontPackage: _fontPackage);
300
+  static const IconData tabbar_note = IconData(0xe681, fontFamily: _family, fontPackage: _fontPackage);
301
+  static const IconData tabbar_desktop = IconData(0xe682, fontFamily: _family, fontPackage: _fontPackage);
302
+  static const IconData tabbar_explore = IconData(0xe683, fontFamily: _family, fontPackage: _fontPackage);
303
+  static const IconData tabbar_message = IconData(0xe684, fontFamily: _family, fontPackage: _fontPackage);
304
+  static const IconData tabbar_contact = IconData(0xe685, fontFamily: _family, fontPackage: _fontPackage);
305
+  static const IconData topbar_back = IconData(0xe680, fontFamily: _family, fontPackage: _fontPackage);
305 306
   static const IconData topbar_closesidebar =
306
-      IconData(0xe67d, fontFamily: _family , fontPackage: _fontPackage);
307
-  static const IconData topbar_people = IconData(0xe67e, fontFamily: _family , fontPackage: _fontPackage);
308
-  static const IconData topbar_sidebar = IconData(0xe67f, fontFamily: _family , fontPackage: _fontPackage);
309
-  static const IconData topbar_add = IconData(0xe674, fontFamily: _family , fontPackage: _fontPackage);
310
-  static const IconData topbar_more = IconData(0xe675, fontFamily: _family , fontPackage: _fontPackage);
311
-  static const IconData topbar_addrobot = IconData(0xe676, fontFamily: _family , fontPackage: _fontPackage);
307
+      IconData(0xe67d, fontFamily: _family, fontPackage: _fontPackage);
308
+  static const IconData topbar_people = IconData(0xe67e, fontFamily: _family, fontPackage: _fontPackage);
309
+  static const IconData topbar_sidebar = IconData(0xe67f, fontFamily: _family, fontPackage: _fontPackage);
310
+  static const IconData topbar_add = IconData(0xe674, fontFamily: _family, fontPackage: _fontPackage);
311
+  static const IconData topbar_more = IconData(0xe675, fontFamily: _family, fontPackage: _fontPackage);
312
+  static const IconData topbar_addrobot = IconData(0xe676, fontFamily: _family, fontPackage: _fontPackage);
312 313
   static const IconData topbar_calenderview =
313
-      IconData(0xe677, fontFamily: _family , fontPackage: _fontPackage);
314
-  static const IconData topbar_invite = IconData(0xe678, fontFamily: _family , fontPackage: _fontPackage);
315
-  static const IconData topbar_share = IconData(0xe679, fontFamily: _family , fontPackage: _fontPackage);
316
-  static const IconData topbar_group = IconData(0xe67a, fontFamily: _family , fontPackage: _fontPackage);
317
-  static const IconData topbar_setting = IconData(0xe67b, fontFamily: _family , fontPackage: _fontPackage);
318
-  static const IconData topbar_close = IconData(0xe67c, fontFamily: _family , fontPackage: _fontPackage);
314
+      IconData(0xe677, fontFamily: _family, fontPackage: _fontPackage);
315
+  static const IconData topbar_invite = IconData(0xe678, fontFamily: _family, fontPackage: _fontPackage);
316
+  static const IconData topbar_share = IconData(0xe679, fontFamily: _family, fontPackage: _fontPackage);
317
+  static const IconData topbar_group = IconData(0xe67a, fontFamily: _family, fontPackage: _fontPackage);
318
+  static const IconData topbar_setting = IconData(0xe67b, fontFamily: _family, fontPackage: _fontPackage);
319
+  static const IconData topbar_close = IconData(0xe67c, fontFamily: _family, fontPackage: _fontPackage);
319 320
 }

+ 2
- 1
packages/zefyr/lib/src/widgets/image.dart 파일 보기

@@ -2,6 +2,7 @@
2 2
 // for details. All rights reserved. Use of this source code is governed by a
3 3
 // BSD-style license that can be found in the LICENSE file.
4 4
 import 'dart:async';
5
+import 'dart:io';
5 6
 import 'dart:math' as math;
6 7
 import 'dart:ui' as ui;
7 8
 
@@ -40,7 +41,7 @@ abstract class ZefyrImageDelegate<S> {
40 41
   /// by a file hosting service like AWS S3 or Google Drive.
41 42
   Future<String> pickImage(S source);
42 43
 
43
-  Future<String> picked(AssetEntity list, bool isFullImage);
44
+  Future<String> picked(File file, bool isFullImage);
44 45
 }
45 46
 
46 47
 class ZefyrImage extends StatefulWidget {

+ 27
- 8
packages/zefyr/lib/src/widgets/scope.dart 파일 보기

@@ -10,6 +10,7 @@ import 'image.dart';
10 10
 import 'input.dart';
11 11
 import 'mode.dart';
12 12
 import 'render_context.dart';
13
+import 'toolbar.dart';
13 14
 import 'view.dart';
14 15
 
15 16
 /// Provides access to shared state of [ZefyrEditor] or [ZefyrView].
@@ -71,11 +72,29 @@ class ZefyrScope extends ChangeNotifier {
71 72
   InputConnectionController _input;
72 73
   InputConnectionController get input => _input;
73 74
 
74
-  TapHandle _tapHandle;
75
-  TapHandle get tapHandle => _tapHandle;
76
-  set tapHandle(TapHandle value) {
77
-    if (_tapHandle != value) {
78
-      _tapHandle = value;
75
+  bool _keepOverlay = false;
76
+  bool get keepOverlay => _keepOverlay;
77
+  set keepOverlay(bool value) {
78
+    if (_keepOverlay != value) {
79
+      _keepOverlay = value;
80
+      // if (value) {
81
+      //   _toolbarAction = null;
82
+      // }
83
+      notifyListeners();
84
+    }
85
+  }
86
+
87
+  ZefyrToolbarAction _toolbarAction;
88
+  ZefyrToolbarAction get toolbarAction => _toolbarAction;
89
+  set toolbarAction(ZefyrToolbarAction value) {
90
+    if (_toolbarAction != value) {
91
+      _toolbarAction = value;
92
+      if (value != null) {
93
+        hideKeyboard();
94
+      } else {
95
+        showKeyboard();
96
+        _keepOverlay = false;
97
+      }
79 98
       notifyListeners();
80 99
     }
81 100
   }
@@ -230,21 +249,21 @@ class ZefyrScope extends ChangeNotifier {
230 249
     assert(isEditable);
231 250
     assert(!_disposed);
232 251
     _focusNode.unfocus();
233
-    tapHandle = null;
252
+    //tapHandle = null;
234 253
   }
235 254
 
236 255
   void showKeyboard() {
237 256
     assert(isEditable);
238 257
     assert(!_disposed);
239 258
     SystemChannels.textInput.invokeMethod('TextInput.show');
240
-    tapHandle = null;
259
+    //tapHandle = null;
241 260
   }
242 261
 
243 262
   void hideKeyboard() {
244 263
     assert(isEditable);
245 264
     assert(!_disposed);
246 265
     SystemChannels.textInput.invokeMethod('TextInput.hide');
247
-    tapHandle = null;
266
+    //tapHandle = null;
248 267
   }
249 268
 
250 269
   @override

+ 12
- 4
packages/zefyr/lib/src/widgets/theme.dart 파일 보기

@@ -491,6 +491,8 @@ class ToolbarTheme {
491 491
   /// The background color of the toolbar.
492 492
   final Color color;
493 493
 
494
+  final Color surfaceColor;
495
+
494 496
   /// Color of buttons in toggled state.
495 497
   final Color toggleColor;
496 498
 
@@ -510,16 +512,18 @@ class ToolbarTheme {
510 512
     final theme = Theme.of(context);
511 513
     return ToolbarTheme._(
512 514
       color: theme.brightness == Brightness.light ? Color(0xFFFFFFFF) : Color(0xFF282828),
515
+      surfaceColor: Color(0xFF8C8C8C),
513 516
       toggleColor: Color(0xFF01AAFF),
514 517
       iconFillColor: theme.brightness == Brightness.light ? Color(0xFFF2F2F2) : Color(0xFF1F1F1F),
515 518
       iconColor: Color(0xFF595959),
516
-      disabledIconColor: theme.disabledColor,
517
-      dividerColor: theme.dividerColor ?? (theme.brightness == Brightness.light ? Color(0xFFF2F2F2) : Color(0xFF3B3B3B)),
519
+      disabledIconColor: theme.brightness == Brightness.light ? Color(0xFFBFBFBF) : Color(0xFF363636),
520
+      dividerColor: theme.brightness == Brightness.light ? Color(0xFFF2F2F2) : Color(0xFF3B3B3B),
518 521
     );
519 522
   }
520 523
 
521 524
   ToolbarTheme._({
522 525
     @required this.color,
526
+    @required this.surfaceColor,
523 527
     @required this.toggleColor,
524 528
     @required this.iconFillColor,
525 529
     @required this.iconColor,
@@ -531,6 +535,7 @@ class ToolbarTheme {
531 535
   /// been merged with the matching property from the `other` object.
532 536
   ToolbarTheme copyWith({
533 537
     Color color,
538
+    Color surfaceColor,
534 539
     Color toggleColor,
535 540
     Color iconFillColor,
536 541
     Color iconColor,
@@ -539,6 +544,7 @@ class ToolbarTheme {
539 544
   }) {
540 545
     return ToolbarTheme._(
541 546
       color: color ?? this.color,
547
+      surfaceColor: surfaceColor ?? this.surfaceColor,
542 548
       toggleColor: toggleColor ?? this.toggleColor,
543 549
       iconFillColor: iconFillColor ?? this.iconFillColor,
544 550
       iconColor: iconColor ?? this.iconColor,
@@ -553,6 +559,7 @@ class ToolbarTheme {
553 559
     if (other == null) return this;
554 560
     return copyWith(
555 561
       color: other.color ?? color,
562
+      surfaceColor: other.surfaceColor ?? surfaceColor,
556 563
       toggleColor: other.toggleColor ?? toggleColor,
557 564
       iconFillColor: other.iconFillColor ?? iconFillColor,
558 565
       iconColor: other.iconColor ?? iconColor,
@@ -566,14 +573,15 @@ class ToolbarTheme {
566 573
     if (other.runtimeType != runtimeType) return false;
567 574
     final ToolbarTheme otherTheme = other;
568 575
     return (otherTheme.color == color) &&
576
+        (otherTheme.surfaceColor == surfaceColor) &&
569 577
         (otherTheme.toggleColor == toggleColor) &&
570 578
         (otherTheme.iconFillColor == iconFillColor) &&
571 579
         (otherTheme.iconColor == iconColor) &&
572
-        (otherTheme.disabledIconColor == disabledIconColor);
580
+        (otherTheme.disabledIconColor == disabledIconColor) &&
573 581
         (otherTheme.dividerColor == dividerColor);
574 582
   }
575 583
 
576 584
   @override
577 585
   int get hashCode =>
578
-      hashValues(color, toggleColor, iconFillColor, iconColor, disabledIconColor, dividerColor);
586
+      hashValues(color, surfaceColor, toggleColor, iconFillColor, iconColor, disabledIconColor, dividerColor);
579 587
 }

+ 55
- 12
packages/zefyr/lib/src/widgets/toolbar.dart 파일 보기

@@ -22,6 +22,9 @@ enum ZefyrToolbarAction {
22 22
   link,
23 23
   unlink,
24 24
   emoji,
25
+  undo,
26
+  redo,
27
+  save,
25 28
   clipboardCopy,
26 29
   openInBrowser,
27 30
   heading,
@@ -50,6 +53,7 @@ final kZefyrToolbarAttributeActions = <ZefyrToolbarAction, NotusAttributeKey>{
50 53
   ZefyrToolbarAction.bold: NotusAttribute.bold,
51 54
   ZefyrToolbarAction.italic: NotusAttribute.italic,
52 55
   ZefyrToolbarAction.link: NotusAttribute.link,
56
+  // ZefyrToolbarAction.text: NotusAttribute.heading,
53 57
   ZefyrToolbarAction.heading: NotusAttribute.heading,
54 58
   ZefyrToolbarAction.headingLevel1: NotusAttribute.heading.level1,
55 59
   ZefyrToolbarAction.headingLevel2: NotusAttribute.heading.level2,
@@ -63,9 +67,12 @@ final kZefyrToolbarAttributeActions = <ZefyrToolbarAction, NotusAttributeKey>{
63 67
 
64 68
 const kDefaultButtonIcons = {
65 69
   ZefyrToolbarAction.heading: ZefyrFont.note_editor_text,
66
-  ZefyrToolbarAction.emoji: ZefyrFont.im_dialogebar_sendemoji,
70
+  ZefyrToolbarAction.emoji: ZefyrFont.note_editor_emoji,
67 71
   ZefyrToolbarAction.image: ZefyrFont.note_editor_image,
68 72
   ZefyrToolbarAction.link: ZefyrFont.note_editor_link,
73
+  ZefyrToolbarAction.undo: ZefyrFont.note_editor_undo,
74
+  ZefyrToolbarAction.redo: ZefyrFont.note_editor_redo,
75
+  ZefyrToolbarAction.save: ZefyrFont.note_editor_save,
69 76
   ZefyrToolbarAction.hideKeyboard: ZefyrFont.note_editor_keyboard,
70 77
   ZefyrToolbarAction.showKeyboard: ZefyrFont.note_editor_unkeyboard,
71 78
   ZefyrToolbarAction.close: Icons.close,
@@ -103,6 +110,13 @@ const kSpecialIconSizes = {
103 110
 
104 111
 const kDefaultButtonTexts = {};
105 112
 
113
+final kToolbarDivider = Container(
114
+  width: 1,
115
+  color: Color(0xFFE2E2E2),
116
+  height: 28,
117
+  margin: EdgeInsets.symmetric(horizontal: 10),
118
+);
119
+
106 120
 /// Allows customizing appearance of [ZefyrToolbar].
107 121
 abstract class ZefyrToolbarDelegate {
108 122
   /// Builds toolbar button for specified [action].
@@ -129,8 +143,7 @@ class ZefyrToolbarScaffold extends StatelessWidget {
129 143
   Widget build(BuildContext context) {
130 144
     final theme = ZefyrTheme.of(context).toolbarTheme;
131 145
     final toolbar = ZefyrToolbar.of(context);
132
-    final constraints =
133
-        BoxConstraints.tightFor(height: ZefyrToolbar.kToolbarHeight);
146
+    final constraints = BoxConstraints.tightFor(height: ZefyrToolbar.kToolbarHeight);
134 147
     final children = <Widget>[
135 148
       if (trailing != null)
136 149
         trailing
@@ -143,11 +156,18 @@ class ZefyrToolbarScaffold extends StatelessWidget {
143 156
     return Container(
144 157
       constraints: constraints,
145 158
       decoration: BoxDecoration(
146
-        border: Border(
147
-          top: BorderSide(color: theme.dividerColor, width: 1)
148
-        ),
159
+        boxShadow: [
160
+          BoxShadow(
161
+            color: Color(0x59000000),
162
+            offset: Offset(0, -4),
163
+            blurRadius: 14,
164
+          ),
165
+        ],
149 166
       ),
150
-      child: Material(color: theme.color, child: Row(children: children)),
167
+      child: Material(color: theme.color, child: Padding(
168
+        padding: const EdgeInsets.symmetric(horizontal: 10),
169
+        child: Row(children: children),
170
+      )),
151 171
     );
152 172
   }
153 173
 }
@@ -223,9 +243,12 @@ class ZefyrToolbarState extends State<ZefyrToolbar>
223 243
     return _delegate.buildButton(context, action, onPressed: onPressed);
224 244
   }
225 245
 
226
-  Future<void> showOverlay(WidgetBuilder builder) async {
227
-    if (hasOverlay) {
246
+  Future<void> showOverlay(WidgetBuilder builder, ZefyrToolbarAction action) async {
247
+    if (editor.toolbarAction != null) {
228 248
       closeOverlay();
249
+      if (editor.toolbarAction == action) {
250
+        return;
251
+      }
229 252
     }
230 253
     final completer = Completer<void>();
231 254
     setState(() {
@@ -233,7 +256,7 @@ class ZefyrToolbarState extends State<ZefyrToolbar>
233 256
       _overlayCompleter = completer;
234 257
       _overlayAnimation.forward();
235 258
     });
236
-    editor.hideKeyboard();
259
+    editor.toolbarAction = action;
237 260
     return completer.future;
238 261
   }
239 262
 
@@ -245,7 +268,7 @@ class ZefyrToolbarState extends State<ZefyrToolbar>
245 268
         _overlayCompleter?.complete();
246 269
         _overlayCompleter = null;
247 270
       });
248
-      editor.showKeyboard();
271
+      editor.toolbarAction = null;
249 272
     });
250 273
   }
251 274
 
@@ -291,7 +314,27 @@ class ZefyrToolbarState extends State<ZefyrToolbar>
291 314
 
292 315
     final toolbar = ZefyrToolbarScaffold(
293 316
       key: _toolbarKey,
294
-      body: ZefyrButtonList(buttons: _buildButtons(context)),
317
+      body: Row(
318
+        children: [
319
+          kToolbarDivider,
320
+          Expanded(child: ListView(
321
+            scrollDirection: Axis.horizontal,
322
+            children: [
323
+              HeadingButton(),
324
+              buildButton(context, ZefyrToolbarAction.emoji),
325
+              if (editor.imageDelegate != null) ImageButton(),
326
+              // ImageButton(),
327
+              LinkButton(),
328
+            ],
329
+            physics: ClampingScrollPhysics(),
330
+          ),),
331
+          kToolbarDivider,
332
+          buildButton(context, ZefyrToolbarAction.undo),
333
+          buildButton(context, ZefyrToolbarAction.redo),
334
+          kToolbarDivider,
335
+          buildButton(context, ZefyrToolbarAction.save),
336
+        ],
337
+      ),
295 338
       trailing: hasOverlay ? buildButton(context, ZefyrToolbarAction.showKeyboard) : buildButton(context, ZefyrToolbarAction.hideKeyboard),
296 339
     );
297 340
     layers.add(toolbar);

+ 1
- 0
packages/zefyr/pubspec.yaml 파일 보기

@@ -17,6 +17,7 @@ dependencies:
17 17
     path: ../notus
18 18
   meta: ^1.1.0
19 19
   quiver_hashcode: ^2.0.0
20
+  image_picker: ^0.6.5
20 21
   photo: 
21 22
     path: /Users/imac/Documents/flutter/projects/mutli_image_picker
22 23