dartlangeditorflutterflutter-appsflutter-examplesflutter-packageflutter-widgetquillquill-deltaquilljsreactquillrich-textrich-text-editorwysiwygwysiwyg-editor
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
96 lines
3.4 KiB
96 lines
3.4 KiB
import 'package:flutter/foundation.dart' show debugPrint, kDebugMode; |
|
import 'package:flutter/widgets.dart' |
|
show BuildContext, InheritedWidget, Widget; |
|
|
|
import '../controller/quill_controller.dart'; |
|
import 'config/editor_configurations.dart'; |
|
|
|
class QuillEditorProvider extends InheritedWidget { |
|
QuillEditorProvider({ |
|
required super.child, |
|
|
|
/// Controller and configurations are required but should only be provided from one. |
|
/// |
|
/// Passing the controller as part of configurations is being deprecated and will be removed in the future. |
|
/// Prefer: use controller and set QuillEditorConfigurations in the controller. |
|
/// Current: use configurations and pass QuillController in constructor for configurations. |
|
QuillController? controller, |
|
@Deprecated( |
|
'editorConfigurations are no longer needed and will be removed in future versions. Set configurations in the controller') |
|
QuillEditorConfigurations? editorConfigurations, |
|
super.key, |
|
}) : editorConfigurations = editorConfigurations ?? |
|
controller?.editorConfigurations ?? |
|
const QuillEditorConfigurations(), |
|
controller = controller ?? |
|
// ignore: deprecated_member_use_from_same_package |
|
editorConfigurations?.controller ?? |
|
QuillController.basic(); |
|
|
|
final QuillController controller; |
|
final QuillEditorConfigurations editorConfigurations; |
|
|
|
@override |
|
bool updateShouldNotify(covariant QuillEditorProvider oldWidget) { |
|
return oldWidget.editorConfigurations != editorConfigurations; |
|
} |
|
|
|
static QuillEditorProvider? maybeOf(BuildContext context) { |
|
return context.dependOnInheritedWidgetOfExactType<QuillEditorProvider>(); |
|
} |
|
|
|
static QuillEditorProvider of(BuildContext context) { |
|
final provider = maybeOf(context); |
|
if (provider == null) { |
|
if (kDebugMode) { |
|
debugPrint( |
|
'The quill editor 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 editor provider widget to be in the parent widget tree ' |
|
'because ' |
|
'The provider is $provider. Please make sure to wrap this widget' |
|
' with' |
|
' QuillEditorProvider widget. ' |
|
'You might using QuillEditor so make sure to' |
|
' wrap them with the quill provider widget and setup the required ' |
|
'configurations', |
|
'QuillEditorProvider', |
|
); |
|
} |
|
return provider; |
|
} |
|
|
|
/// To pass the [QuillEditorProvider] instance as value instead of creating |
|
/// new widget |
|
static QuillEditorProvider value({ |
|
required QuillEditorProvider value, |
|
required Widget child, |
|
}) { |
|
value.controller.editorConfigurations = value.editorConfigurations; |
|
return QuillEditorProvider( |
|
controller: value.controller, |
|
child: child, |
|
); |
|
} |
|
} |
|
|
|
extension QuillEditorExt on BuildContext { |
|
QuillEditorConfigurations get requireQuillEditorConfigurations { |
|
return QuillEditorProvider.of(this).editorConfigurations; |
|
} |
|
|
|
QuillEditorConfigurations? get quillEditorConfigurations { |
|
return QuillEditorProvider.maybeOf(this)?.editorConfigurations; |
|
} |
|
|
|
QuillEditorElementOptions? get quillEditorElementOptions { |
|
return quillEditorConfigurations?.elementOptions; |
|
} |
|
|
|
QuillEditorElementOptions get requireQuillEditorElementOptions { |
|
return requireQuillEditorConfigurations.elementOptions; |
|
} |
|
}
|
|
|