From 9ceee335238414fae20991fbf5725ce8e993f485 Mon Sep 17 00:00:00 2001 From: Ahmed Hnewa <73608287+freshtechtips@users.noreply.github.com> Date: Tue, 24 Oct 2023 23:40:59 +0300 Subject: [PATCH] Fix little bugs --- .../config/toolbar/base_configurations.dart | 2 +- lib/src/widgets/toolbar/base_toolbar.dart | 62 ++++++++++--------- lib/src/widgets/utils/provider.dart | 59 ++++++++++++++++++ 3 files changed, 94 insertions(+), 29 deletions(-) diff --git a/lib/src/models/config/toolbar/base_configurations.dart b/lib/src/models/config/toolbar/base_configurations.dart index 8b66db62..132fdc8d 100644 --- a/lib/src/models/config/toolbar/base_configurations.dart +++ b/lib/src/models/config/toolbar/base_configurations.dart @@ -59,5 +59,5 @@ class QuillBaseToolbarConfigurations extends Equatable { final Decoration? decoration; @override - List get props => throw UnimplementedError(); + List get props => []; } diff --git a/lib/src/widgets/toolbar/base_toolbar.dart b/lib/src/widgets/toolbar/base_toolbar.dart index d7167ad2..b422c713 100644 --- a/lib/src/widgets/toolbar/base_toolbar.dart +++ b/lib/src/widgets/toolbar/base_toolbar.dart @@ -1,7 +1,8 @@ import 'package:flutter/material.dart'; import 'package:i18n_extension/i18n_widget.dart'; -import '../../../flutter_quill.dart' show defaultToolbarSize; +import '../../../flutter_quill.dart' + show QuillBaseToolbarProvider, defaultToolbarSize; import '../../models/config/toolbar/base_configurations.dart'; import '../../utils/extensions/build_context.dart'; import 'buttons/arrow_indicated_list.dart'; @@ -50,34 +51,39 @@ class QuillBaseToolbar extends StatelessWidget implements PreferredSizeWidget { final toolbarSize = configurations.toolbarSize; return I18n( initialLocale: context.quillSharedConfigurations?.locale, - child: Builder( - builder: (context) { - if (configurations.multiRowsDisplay) { - return Wrap( - direction: configurations.axis, - alignment: configurations.toolbarIconAlignment, - crossAxisAlignment: configurations.toolbarIconCrossAlignment, - runSpacing: 4, - spacing: configurations.toolbarSectionSpacing, - children: configurations.childrenBuilder(context), + child: QuillBaseToolbarProvider( + toolbarConfigurations: configurations, + child: Builder( + builder: (context) { + if (configurations.multiRowsDisplay) { + return Wrap( + direction: configurations.axis, + alignment: configurations.toolbarIconAlignment, + crossAxisAlignment: configurations.toolbarIconCrossAlignment, + runSpacing: 4, + spacing: configurations.toolbarSectionSpacing, + children: configurations.childrenBuilder(context), + ); + } + return Container( + decoration: configurations.decoration ?? + BoxDecoration( + color: + configurations.color ?? Theme.of(context).canvasColor, + ), + constraints: BoxConstraints.tightFor( + height: + configurations.axis == Axis.horizontal ? toolbarSize : null, + width: + configurations.axis == Axis.vertical ? toolbarSize : null, + ), + child: QuillToolbarArrowIndicatedButtonList( + axis: configurations.axis, + buttons: configurations.childrenBuilder(context), + ), ); - } - return Container( - decoration: configurations.decoration ?? - BoxDecoration( - color: configurations.color ?? Theme.of(context).canvasColor, - ), - constraints: BoxConstraints.tightFor( - height: - configurations.axis == Axis.horizontal ? toolbarSize : null, - width: configurations.axis == Axis.vertical ? toolbarSize : null, - ), - child: QuillToolbarArrowIndicatedButtonList( - axis: configurations.axis, - buttons: configurations.childrenBuilder(context), - ), - ); - }, + }, + ), ), ); } diff --git a/lib/src/widgets/utils/provider.dart b/lib/src/widgets/utils/provider.dart index ff217bba..69340b36 100644 --- a/lib/src/widgets/utils/provider.dart +++ b/lib/src/widgets/utils/provider.dart @@ -3,6 +3,7 @@ import 'package:flutter/widgets.dart' show BuildContext, InheritedWidget, Widget; import '../../models/config/quill_configurations.dart'; +import '../../models/config/toolbar/base_configurations.dart'; class QuillProvider extends InheritedWidget { const QuillProvider({ @@ -118,6 +119,64 @@ class QuillToolbarProvider extends InheritedWidget { } } +// Not really needed +class QuillBaseToolbarProvider extends InheritedWidget { + const QuillBaseToolbarProvider({ + required super.child, + required this.toolbarConfigurations, + }); + + /// The configurations for the toolbar widget of flutter quill + final QuillBaseToolbarConfigurations toolbarConfigurations; + + @override + bool updateShouldNotify(covariant QuillBaseToolbarProvider oldWidget) { + return oldWidget.toolbarConfigurations != toolbarConfigurations; + } + + static QuillBaseToolbarProvider? of(BuildContext context) { + /// The configurations for the quill editor widget of flutter quill + return context + .dependOnInheritedWidgetOfExactType(); + } + + static QuillBaseToolbarProvider ofNotNull(BuildContext context) { + final provider = of(context); + if (provider == null) { + if (kDebugMode) { + debugPrint( + 'The quill toolbar provider must be provided in the widget tree.', + ); + } + throw ArgumentError.checkNotNull( + 'You are using a widget in the Flutter quill library that require ' + 'The Quill toolbar provider widget to be in the parent widget tree ' + 'because ' + 'The provider is $provider. Please make sure to wrap this widget' + ' with' + ' QuillProvider widget. ' + 'You might using QuillToolbar so make sure to' + ' wrap them with the quill provider widget and setup the required ' + 'configurations', + 'QuillProvider', + ); + } + return provider; + } + + /// To pass the [QuillBaseToolbarConfigurations] instance as value + /// instead of creating new widget + static QuillBaseToolbarProvider value({ + required QuillBaseToolbarConfigurations value, + required Widget child, + }) { + return QuillBaseToolbarProvider( + toolbarConfigurations: value, + child: child, + ); + } +} + class QuillEditorProvider extends InheritedWidget { const QuillEditorProvider({ required super.child,