From 8d078682c3e7217fbad97649a7140b8350115cee Mon Sep 17 00:00:00 2001 From: zhaoce Date: Fri, 21 May 2021 00:42:37 +0800 Subject: [PATCH] toolbar multi-line display (#231) --- lib/widgets/toolbar.dart | 51 ++++++++++++++++++++++++++-------------- 1 file changed, 33 insertions(+), 18 deletions(-) diff --git a/lib/widgets/toolbar.dart b/lib/widgets/toolbar.dart index c5fe2bab..b2e3aeed 100644 --- a/lib/widgets/toolbar.dart +++ b/lib/widgets/toolbar.dart @@ -909,9 +909,12 @@ class _ClearFormatButtonState extends State { } class QuillToolbar extends StatefulWidget implements PreferredSizeWidget { - const QuillToolbar( - {required this.children, this.toolBarHeight = 36, Key? key}) - : super(key: key); + const QuillToolbar({ + required this.children, + this.toolBarHeight = 36, + Key? key, + this.multiRowsDisplay = false, + }) : super(key: key); factory QuillToolbar.basic({ required QuillController controller, @@ -935,12 +938,14 @@ class QuillToolbar extends StatefulWidget implements PreferredSizeWidget { bool showHorizontalRule = false, OnImagePickCallback? onImagePickCallback, Key? key, + bool multiRowsDisplay = false, }) { controller.iconSize = toolbarIconSize; return QuillToolbar( key: key, toolBarHeight: toolbarIconSize * controller.toolbarHeightFactor, + multiRowsDisplay: multiRowsDisplay, children: [ Visibility( visible: showHistory, @@ -1131,6 +1136,7 @@ class QuillToolbar extends StatefulWidget implements PreferredSizeWidget { final List children; final double toolBarHeight; + final bool multiRowsDisplay; @override _QuillToolbarState createState() => _QuillToolbarState(); @@ -1142,23 +1148,32 @@ class QuillToolbar extends StatefulWidget implements PreferredSizeWidget { class _QuillToolbarState extends State { @override Widget build(BuildContext context) { - return Container( - padding: const EdgeInsets.symmetric(horizontal: 8), - constraints: BoxConstraints.tightFor(height: widget.preferredSize.height), - color: Theme.of(context).canvasColor, - child: CustomScrollView( - scrollDirection: Axis.horizontal, - slivers: [ - SliverFillRemaining( - hasScrollBody: false, - child: Row( - mainAxisAlignment: MainAxisAlignment.spaceEvenly, + return widget.multiRowsDisplay + ? Container( + color: Theme.of(context).canvasColor, + child: Wrap( + alignment: WrapAlignment.center, children: widget.children, ), - ), - ], - ), - ); + ) + : Container( + padding: const EdgeInsets.symmetric(horizontal: 8), + constraints: + BoxConstraints.tightFor(height: widget.preferredSize.height), + color: Theme.of(context).canvasColor, + child: CustomScrollView( + scrollDirection: Axis.horizontal, + slivers: [ + SliverFillRemaining( + hasScrollBody: false, + child: Row( + mainAxisAlignment: MainAxisAlignment.spaceEvenly, + children: widget.children, + ), + ), + ], + ), + ); } }