diff --git a/CHANGELOG.md b/CHANGELOG.md index 36ddde7..5ab633d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,11 @@ # Change log +## 3.2.0 + +Migrate to Flutter 3, drop supports for previous Flutter versions. + +- Remove deprecated `Miui10AnimBuilder`. + ## 3.1.5 - `_ToastContainer` -> `ToastContainer`. diff --git a/analysis_options.yaml b/analysis_options.yaml index 823215d..d253580 100644 --- a/analysis_options.yaml +++ b/analysis_options.yaml @@ -1,229 +1,6 @@ -# Specify analysis options. -# -# Until there are meta linter rules, each desired lint must be explicitly enabled. -# See: https://github.com/dart-lang/linter/issues/288 -# -# For a list of lints, see: http://dart-lang.github.io/linter/lints/ -# See the configuration guide for more -# https://github.com/dart-lang/sdk/tree/master/pkg/analyzer#configuring-the-analyzer -# -# There are other similar analysis options files in the flutter repos, -# which should be kept in sync with this file: -# -# - analysis_options.yaml (this file) -# - packages/flutter/lib/analysis_options_user.yaml -# - https://github.com/flutter/plugins/blob/master/analysis_options.yaml -# - https://github.com/flutter/engine/blob/master/analysis_options.yaml -# -# This file contains the analysis options used by Flutter tools, such as IntelliJ, -# Android Studio, and the `flutter analyze` command. - -analyzer: - strong-mode: - implicit-casts: false - implicit-dynamic: false - errors: - # treat missing required parameters as a warning (not a hint) - missing_required_param: warning - # treat missing returns as a warning (not a hint) - missing_return: warning - # allow having TODOs in the code - todo: ignore - # allow self-reference to deprecated members (we do this because otherwise we have - # to annotate every member in every test, assert, etc, when we deprecate something) - deprecated_member_use_from_same_package: ignore - # Ignore analyzer hints for updating pubspecs when using Future or - # Stream and not importing dart:async - # Please see https://github.com/flutter/flutter/pull/24528 for details. - sdk_version_async_exported_from_core: ignore - exclude: - - "bin/cache/**" - # the following two are relative to the stocks example and the flutter package respectively - # see https://github.com/dart-lang/sdk/issues/28463 - - "lib/i18n/messages_*.dart" - - "lib/src/http/**" - - "test_fixes/**" +include: package:flutter_lints/flutter.yaml linter: rules: - # these rules are documented on and in the same order as - # the Dart Lint rules page to make maintenance easier - # https://github.com/dart-lang/linter/blob/master/example/all.yaml - - always_declare_return_types - - always_put_control_body_on_new_line - # - always_put_required_named_parameters_first # we prefer having parameters in the same order as fields https://github.com/flutter/flutter/issues/10219 - - always_require_non_null_named_parameters - - always_specify_types - # - always_use_package_imports # we do this commonly - - annotate_overrides - # - avoid_annotating_with_dynamic # conflicts with always_specify_types - # - avoid_as # required for implicit-casts: true - - avoid_bool_literals_in_conditional_expressions - # - avoid_catches_without_on_clauses # we do this commonly - # - avoid_catching_errors # we do this commonly - - avoid_classes_with_only_static_members - # - avoid_double_and_int_checks # only useful when targeting JS runtime - - avoid_empty_else - - avoid_equals_and_hash_code_on_mutable_classes - # - avoid_escaping_inner_quotes # not yet tested - - avoid_field_initializers_in_const_classes - - avoid_function_literals_in_foreach_calls - # - avoid_implementing_value_types # not yet tested - - avoid_init_to_null - # - avoid_js_rounded_ints # only useful when targeting JS runtime - - avoid_null_checks_in_equality_operators - # - avoid_positional_boolean_parameters # not yet tested - # - avoid_print # not yet tested - # - avoid_private_typedef_functions # we prefer having typedef (discussion in https://github.com/flutter/flutter/pull/16356) - # - avoid_redundant_argument_values # not yet tested - - avoid_relative_lib_imports - - avoid_renaming_method_parameters - - avoid_return_types_on_setters - # - avoid_returning_null # there are plenty of valid reasons to return null - # - avoid_returning_null_for_future # not yet tested - - avoid_returning_null_for_void - # - avoid_returning_this # there are plenty of valid reasons to return this - # - avoid_setters_without_getters # not yet tested - - avoid_shadowing_type_parameters - - avoid_single_cascade_in_expression_statements - - avoid_slow_async_io - # - avoid_type_to_string # we do this commonly - - avoid_types_as_parameter_names - # - avoid_types_on_closure_parameters # conflicts with always_specify_types - # - avoid_unnecessary_containers # not yet tested - - avoid_unused_constructor_parameters - - avoid_void_async - # - avoid_web_libraries_in_flutter # not yet tested - - await_only_futures - - camel_case_extensions - - camel_case_types - - cancel_subscriptions - # - cascade_invocations # not yet tested - - cast_nullable_to_non_nullable - # - close_sinks # not reliable enough - # - comment_references # blocked on https://github.com/flutter/flutter/issues/20765 - # - constant_identifier_names # needs an opt-out https://github.com/dart-lang/linter/issues/204 - - control_flow_in_finally - # - curly_braces_in_flow_control_structures # not required by flutter style - # - diagnostic_describe_all_properties # not yet tested - - directives_ordering - # - do_not_use_environment # we do this commonly - - empty_catches - - empty_constructor_bodies - - empty_statements - - exhaustive_cases - # - file_names # not yet tested - - flutter_style_todos - - hash_and_equals - - implementation_imports - # - invariant_booleans # too many false positives: https://github.com/dart-lang/linter/issues/811 - - iterable_contains_unrelated_type - # - join_return_with_assignment # not required by flutter style - - leading_newlines_in_multiline_strings - - library_names - - library_prefixes - # - lines_longer_than_80_chars # not required by flutter style - - list_remove_unrelated_type - # - literal_only_boolean_expressions # too many false positives: https://github.com/dart-lang/sdk/issues/34181 - # - missing_whitespace_between_adjacent_strings # not yet tested - - no_adjacent_strings_in_list - # - no_default_cases # too many false positives - - no_duplicate_case_values - - no_logic_in_create_state - # - no_runtimeType_toString # ok in tests; we enable this only in packages/ - - non_constant_identifier_names - - null_check_on_nullable_type_parameter - # - null_closures # not required by flutter style - # - omit_local_variable_types # opposite of always_specify_types - # - one_member_abstracts # too many false positives - # - only_throw_errors # https://github.com/flutter/flutter/issues/5792 - - overridden_fields - - package_api_docs - # - package_names # non conforming packages in sdk - - package_prefixed_library_names - # - parameter_assignments # we do this commonly - - prefer_adjacent_string_concatenation - - prefer_asserts_in_initializer_lists - # - prefer_asserts_with_message # not required by flutter style - - prefer_collection_literals - - prefer_conditional_assignment - - prefer_const_constructors - - prefer_const_constructors_in_immutables - - prefer_const_declarations - - prefer_const_literals_to_create_immutables - # - prefer_constructors_over_static_methods # far too many false positives - - prefer_contains - # - prefer_double_quotes # opposite of prefer_single_quotes - - prefer_equal_for_default_values - # - prefer_expression_function_bodies # conflicts with https://github.com/flutter/flutter/wiki/Style-guide-for-Flutter-repo#consider-using--for-short-functions-and-methods - - prefer_final_fields - - prefer_final_in_for_each - - prefer_final_locals - - prefer_for_elements_to_map_fromIterable - - prefer_foreach - # - prefer_function_declarations_over_variables # not yet tested - - prefer_generic_function_type_aliases - - prefer_if_elements_to_conditional_expressions - - prefer_if_null_operators - - prefer_initializing_formals - - prefer_inlined_adds - # - prefer_int_literals # not yet tested - # - prefer_interpolation_to_compose_strings # not yet tested - - prefer_is_empty - - prefer_is_not_empty - - prefer_is_not_operator - - prefer_iterable_whereType - # - prefer_mixin # https://github.com/dart-lang/language/issues/32 - # - prefer_null_aware_operators # disable until NNBD, see https://github.com/flutter/flutter/pull/32711#issuecomment-492930932 - # - prefer_relative_imports # not yet tested - - prefer_single_quotes - - prefer_spread_collections - - prefer_typing_uninitialized_variables - - prefer_void_to_null - # - provide_deprecation_message # not yet tested - # - public_member_api_docs # enabled on a case-by-case basis; see e.g. packages/analysis_options.yaml - - recursive_getters - # - sized_box_for_whitespace # not yet tested - - slash_for_doc_comments - # - sort_child_properties_last # not yet tested - - sort_constructors_first - # - sort_pub_dependencies # prevents separating pinned transitive dependencies - - sort_unnamed_constructors_first - - test_types_in_equals - - throw_in_finally - - tighten_type_of_initializing_formals - # - type_annotate_public_apis # subset of always_specify_types - - type_init_formals - # - unawaited_futures # too many false positives - # - unnecessary_await_in_return # not yet tested - - unnecessary_brace_in_string_interps - - unnecessary_const - # - unnecessary_final # conflicts with prefer_final_locals - - unnecessary_getters_setters - # - unnecessary_lambdas # has false positives: https://github.com/dart-lang/linter/issues/498 - - unnecessary_new - - unnecessary_null_aware_assignments - # - unnecessary_null_checks # not yet tested - - unnecessary_null_in_if_null_operators - - unnecessary_nullable_for_final_variable_declarations - - unnecessary_overrides - - unnecessary_parenthesis - # - unnecessary_raw_strings # not yet tested - - unnecessary_statements - - unnecessary_string_escapes - - unnecessary_string_interpolations - - unnecessary_this - - unrelated_type_equality_checks - # - unsafe_html # not yet tested - - use_full_hex_values_for_flutter_colors - # - use_function_type_syntax_for_parameters # not yet tested - - use_is_even_rather_than_modulo - # - use_key_in_widget_constructors # not yet tested - - use_late_for_private_fields_and_variables - - use_raw_strings - - use_rethrow_when_possible - # - use_setters_to_change_properties # not yet tested - # - use_string_buffers # has false positives: https://github.com/dart-lang/sdk/issues/34182 - # - use_to_and_as_if_applicable # has false positives, so we prefer to catch this by code-review - - valid_regexps - - void_checks + - avoid_print + - use_super_parameters diff --git a/example/lib/main.dart b/example/lib/main.dart index 23365fd..9aa2ac5 100644 --- a/example/lib/main.dart +++ b/example/lib/main.dart @@ -1,7 +1,7 @@ import 'dart:async'; import 'package:flutter/material.dart'; -import 'package:oktoast/oktoast.dart' hide Miui10AnimBuilder; +import 'package:oktoast/oktoast.dart'; import 'miui10_anim.dart'; @@ -39,10 +39,10 @@ class MyApp extends StatelessWidget { } class MyHomePage extends StatefulWidget { - const MyHomePage({Key? key}) : super(key: key); + const MyHomePage({super.key}); @override - _MyHomePageState createState() => _MyHomePageState(); + State createState() => _MyHomePageState(); } class _MyHomePageState extends State { @@ -94,7 +94,7 @@ class _MyHomePageState extends State { duration: const Duration(seconds: 3), onDismiss: () { // The method will be called on toast dismiss. - print('Toast has been dismissed.'); + debugPrint('Toast has been dismissed.'); }, ); diff --git a/example/pubspec.yaml b/example/pubspec.yaml index 51f7b1d..d123364 100644 --- a/example/pubspec.yaml +++ b/example/pubspec.yaml @@ -1,10 +1,11 @@ name: example_for_oktoast description: A new Flutter project. -version: 1.0.0+1 +version: 3.2.0+2 publish_to: none environment: - sdk: ">=2.12.0-0 <3.0.0" + sdk: ">=2.17.0 <3.0.0" + flutter: ">=3.0.0" dependencies: flutter: diff --git a/lib/oktoast.dart b/lib/oktoast.dart index a51b227..5fa07a3 100644 --- a/lib/oktoast.dart +++ b/lib/oktoast.dart @@ -4,6 +4,5 @@ export 'src/core/position.dart'; export 'src/core/toast.dart' show showToast, showToastWidget, OKToast, ToastFuture, dismissAllToast; export 'src/widget/animation/animation_builder.dart'; -export 'src/widget/animation/miui10_anim.dart'; export 'src/widget/animation/offset_builder.dart'; export 'src/widget/animation/opacity_builder.dart'; diff --git a/lib/src/core/default_themes.dart b/lib/src/core/default_themes.dart index d80c990..cc27020 100644 --- a/lib/src/core/default_themes.dart +++ b/lib/src/core/default_themes.dart @@ -18,12 +18,12 @@ const TextStyle _defaultTextStyle = TextStyle( fontWeight: FontWeight.normal, color: Colors.white, ); -const _ToastTheme defaultTheme = _ToastTheme( +const ToastTheme defaultTheme = ToastTheme( radius: 10, textStyle: _defaultTextStyle, position: ToastPosition.center, textDirection: TextDirection.ltr, handleTouch: false, - child: SizedBox(), animationBuilder: _defaultBuildAnimation, + child: SizedBox(), ); diff --git a/lib/src/core/toast.dart b/lib/src/core/toast.dart index 77d90eb..3c96202 100644 --- a/lib/src/core/toast.dart +++ b/lib/src/core/toast.dart @@ -49,7 +49,7 @@ ToastFuture showToast( } context ??= _contextMap.values.first; - final _ToastTheme theme = _ToastTheme.of(context); + final ToastTheme theme = ToastTheme.of(context); textStyle ??= theme.textStyle; textAlign ??= theme.textAlign; textPadding ??= theme.textPadding; @@ -101,7 +101,7 @@ ToastFuture showToastWidget( _throwIfNoContext(_contextMap.values, 'showToastWidget'); } context ??= _contextMap.values.first; - final _ToastTheme theme = _ToastTheme.of(context); + final ToastTheme theme = ToastTheme.of(context); position ??= theme.position; handleTouch ??= theme.handleTouch; @@ -116,7 +116,7 @@ ToastFuture showToastWidget( final GlobalKey<_ToastContainerState> key = GlobalKey(); - widget = Align(child: widget, alignment: position.align); + widget = Align(alignment: position.align, child: widget); final OverlayEntry entry = OverlayEntry(builder: (BuildContext ctx) { return IgnorePointer( @@ -128,10 +128,10 @@ ToastFuture showToastWidget( duration: duration!, position: position!, movingOnWindowChange: movingOnWindowChange, - child: widget, animationBuilder: animationBuilder!, animationDuration: animationDuration!, animationCurve: animationCurve!, + child: widget, ), ), ); @@ -167,7 +167,7 @@ ToastFuture showToastWidget( if (!context.debugDoingBuild && context.owner?.debugBuilding != true) { _insertOverlayEntry(); } else { - WidgetsBinding.instance?.addPostFrameCallback((_) { + WidgetsBinding.instance.addPostFrameCallback((_) { _insertOverlayEntry(); }); } diff --git a/lib/src/core/toast_manager.dart b/lib/src/core/toast_manager.dart index a95059d..2bef670 100644 --- a/lib/src/core/toast_manager.dart +++ b/lib/src/core/toast_manager.dart @@ -5,7 +5,7 @@ class ToastManager { ToastManager._(); - static late final ToastManager _instance = ToastManager._(); + static final ToastManager _instance = ToastManager._(); final Set toastSet = {}; diff --git a/lib/src/widget/animation/miui10_anim.dart b/lib/src/widget/animation/miui10_anim.dart deleted file mode 100644 index 9e6cc93..0000000 --- a/lib/src/widget/animation/miui10_anim.dart +++ /dev/null @@ -1,27 +0,0 @@ -import 'dart:math' show min; - -import 'package:flutter/material.dart'; -import 'animation_builder.dart'; - -@Deprecated('Please build animation builders outside the package.') -class Miui10AnimBuilder extends BaseAnimationBuilder { - @Deprecated('Please build animation builders outside the package.') - const Miui10AnimBuilder(); - - @Deprecated('Please build animation builders outside the package.') - @override - Widget buildWidget( - BuildContext context, - Widget child, - AnimationController controller, - double percent, - ) { - final double opacity = min(1.0, percent + 0.2); - final double offset = (1 - percent) * 20; - - return Opacity( - opacity: opacity, - child: Transform.translate(child: child, offset: Offset(0, offset)), - ); - } -} diff --git a/lib/src/widget/container.dart b/lib/src/widget/container.dart index 866fe45..6f7707a 100644 --- a/lib/src/widget/container.dart +++ b/lib/src/widget/container.dart @@ -2,7 +2,7 @@ part of '../core/toast.dart'; class ToastContainer extends StatefulWidget { const ToastContainer({ - Key? key, + super.key, required this.duration, required this.child, required this.position, @@ -10,7 +10,7 @@ class ToastContainer extends StatefulWidget { required this.animationDuration, required this.animationCurve, this.movingOnWindowChange = false, - }) : super(key: key); + }); final Duration duration; final Widget child; @@ -22,7 +22,7 @@ class ToastContainer extends StatefulWidget { final Curve animationCurve; @override - _ToastContainerState createState() => _ToastContainerState(); + State createState() => _ToastContainerState(); } class _ToastContainerState extends State @@ -42,7 +42,7 @@ class _ToastContainerState extends State @override void initState() { super.initState(); - WidgetsBinding.instance?.addObserver(this); + WidgetsBinding.instance.addObserver(this); Future.delayed(const Duration(milliseconds: 30), () { _animateTo(1.0); @@ -65,7 +65,7 @@ class _ToastContainerState extends State @override void dispose() { _animationController.dispose(); - WidgetsBinding.instance?.removeObserver(this); + WidgetsBinding.instance.removeObserver(this); super.dispose(); } @@ -86,20 +86,20 @@ class _ToastContainerState extends State return w; } - final EdgeInsets? _offsetPadding; + final EdgeInsets? offsetPadding; if (offset > 0) { - _offsetPadding = EdgeInsets.only(top: offset); + offsetPadding = EdgeInsets.only(top: offset); } else if (offset < 0) { - _offsetPadding = EdgeInsets.only(bottom: offset.abs()); + offsetPadding = EdgeInsets.only(bottom: offset.abs()); } else { - _offsetPadding = null; + offsetPadding = null; } final EdgeInsets edgeInsets = EdgeInsets.only( bottom: MediaQueryData.fromWindow(ui.window).viewInsets.bottom, ); return AnimatedPadding( - padding: (_offsetPadding ?? EdgeInsets.zero) + edgeInsets, + padding: (offsetPadding ?? EdgeInsets.zero) + edgeInsets, duration: animationDuration, child: w, ); diff --git a/lib/src/widget/oktoast.dart b/lib/src/widget/oktoast.dart index fb767f8..017f4f6 100644 --- a/lib/src/widget/oktoast.dart +++ b/lib/src/widget/oktoast.dart @@ -2,7 +2,7 @@ part of '../core/toast.dart'; class OKToast extends StatefulWidget { const OKToast({ - Key? key, + super.key, required this.child, this.textStyle, this.radius = 10.0, @@ -18,8 +18,7 @@ class OKToast extends StatefulWidget { this.animationDuration = _defaultAnimDuration, this.animationCurve, this.duration, - }) : backgroundColor = backgroundColor ?? _defaultBackgroundColor, - super(key: key); + }) : backgroundColor = backgroundColor ?? _defaultBackgroundColor; /// Typically with a [WidgetsApp]. final Widget child; @@ -67,7 +66,7 @@ class OKToast extends StatefulWidget { final Curve? animationCurve; @override - _OKToastState createState() => _OKToastState(); + State createState() => _OKToastState(); } class _OKToastState extends State { @@ -91,8 +90,8 @@ class _OKToastState extends State { ); final Widget w = Directionality( - child: overlay, textDirection: widget.textDirection, + child: overlay, ); final Typography typography = Typography.material2018( @@ -115,8 +114,7 @@ class _OKToastState extends State { final OKToastAnimationBuilder animationBuilder = widget.animationBuilder ?? _defaultBuildAnimation; - return _ToastTheme( - child: w, + return ToastTheme( backgroundColor: widget.backgroundColor, radius: widget.radius, textStyle: textStyle, @@ -131,6 +129,7 @@ class _OKToastState extends State { animationDuration: widget.animationDuration, animationCurve: widget.animationCurve ?? Curves.easeIn, duration: widget.duration ?? _defaultDuration, + child: w, ); } } diff --git a/lib/src/widget/overlay.dart b/lib/src/widget/overlay.dart index e82f31d..d78a50d 100644 --- a/lib/src/widget/overlay.dart +++ b/lib/src/widget/overlay.dart @@ -148,9 +148,9 @@ class OverlayEntry extends ChangeNotifier { } overlay._entries.remove(this); - if (SchedulerBinding.instance!.schedulerPhase == + if (SchedulerBinding.instance.schedulerPhase == SchedulerPhase.persistentCallbacks) { - SchedulerBinding.instance!.addPostFrameCallback((Duration duration) { + SchedulerBinding.instance.addPostFrameCallback((Duration duration) { overlay._markDirty(); }); } else { @@ -236,10 +236,10 @@ class Overlay extends StatefulWidget { /// Rather than creating an overlay, consider using the overlay that is /// created by the [Navigator] in a [WidgetsApp] or a [MaterialApp] for the application. const Overlay({ - Key? key, + super.key, this.initialEntries = const [], this.clipBehavior = Clip.hardEdge, - }) : super(key: key); + }); /// The entries to include in the overlay initially. /// @@ -521,10 +521,10 @@ class OverlayState extends State with TickerProviderStateMixin { )); } } - return _Theatre( + return Theatre( skipCount: children.length - onstageCount, - children: children.reversed.toList(growable: false), clipBehavior: widget.clipBehavior, + children: children.reversed.toList(growable: false), ); } @@ -532,8 +532,9 @@ class OverlayState extends State with TickerProviderStateMixin { void debugFillProperties(DiagnosticPropertiesBuilder properties) { super.debugFillProperties(properties); // provide a slightly more consistent string summary of the List. - properties - .add(DiagnosticsProperty>('entries', _entries)); + properties.add( + DiagnosticsProperty>('entries', _entries), + ); } } @@ -541,26 +542,25 @@ class OverlayState extends State with TickerProviderStateMixin { /// [skipCount] children. /// /// The first [skipCount] children are considered "offstage". -class _Theatre extends MultiChildRenderObjectWidget { - _Theatre({ - Key? key, +class Theatre extends MultiChildRenderObjectWidget { + Theatre({ + super.key, this.skipCount = 0, this.clipBehavior = Clip.hardEdge, - List children = const [], + super.children, }) : assert(skipCount >= 0), - assert(children.length >= skipCount), - super(key: key, children: children); + assert(children.length >= skipCount); final int skipCount; final Clip clipBehavior; @override - _TheatreElement createElement() => _TheatreElement(this); + TheatreElement createElement() => TheatreElement(this); @override - _RenderTheatre createRenderObject(BuildContext context) { - return _RenderTheatre( + RenderTheatre createRenderObject(BuildContext context) { + return RenderTheatre( skipCount: skipCount, textDirection: Directionality.of(context), clipBehavior: clipBehavior, @@ -568,7 +568,7 @@ class _Theatre extends MultiChildRenderObjectWidget { } @override - void updateRenderObject(BuildContext context, _RenderTheatre renderObject) { + void updateRenderObject(BuildContext context, RenderTheatre renderObject) { renderObject ..skipCount = skipCount ..textDirection = Directionality.of(context) @@ -582,14 +582,14 @@ class _Theatre extends MultiChildRenderObjectWidget { } } -class _TheatreElement extends MultiChildRenderObjectElement { - _TheatreElement(_Theatre widget) : super(widget); +class TheatreElement extends MultiChildRenderObjectElement { + TheatreElement(Theatre super.widget); @override - _Theatre get widget => super.widget as _Theatre; + Theatre get widget => super.widget as Theatre; @override - _RenderTheatre get renderObject => super.renderObject as _RenderTheatre; + RenderTheatre get renderObject => super.renderObject as RenderTheatre; @override void debugVisitOnstageChildren(ElementVisitor visitor) { @@ -598,9 +598,9 @@ class _TheatreElement extends MultiChildRenderObjectElement { } } -class _RenderTheatre extends RenderBox +class RenderTheatre extends RenderBox with ContainerRenderObjectMixin { - _RenderTheatre({ + RenderTheatre({ List? children, required TextDirection textDirection, int skipCount = 0, @@ -616,8 +616,9 @@ class _RenderTheatre extends RenderBox @override void setupParentData(RenderBox child) { - if (child.parentData is! StackParentData) + if (child.parentData is! StackParentData) { child.parentData = StackParentData(); + } } Alignment? _resolvedAlignment; diff --git a/lib/src/widget/theme.dart b/lib/src/widget/theme.dart index 7e085d7..307f64c 100644 --- a/lib/src/widget/theme.dart +++ b/lib/src/widget/theme.dart @@ -1,13 +1,14 @@ part of '../core/toast.dart'; -class _ToastTheme extends InheritedWidget { - const _ToastTheme({ +class ToastTheme extends InheritedWidget { + const ToastTheme({ + super.key, required this.textStyle, required this.textDirection, required this.handleTouch, required this.radius, required this.position, - required Widget child, + required super.child, this.backgroundColor = Colors.black, this.dismissOtherOnShow = true, this.movingOnWindowChange = true, @@ -17,10 +18,10 @@ class _ToastTheme extends InheritedWidget { this.duration = _defaultDuration, this.textPadding, this.textAlign, - }) : super(child: child); + }); - static _ToastTheme of(BuildContext context) => - context.dependOnInheritedWidgetOfExactType<_ToastTheme>() ?? defaultTheme; + static ToastTheme of(BuildContext context) => + context.dependOnInheritedWidgetOfExactType() ?? defaultTheme; final TextStyle textStyle; final Color backgroundColor; diff --git a/pubspec.yaml b/pubspec.yaml index 43106b3..fee8957 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -2,14 +2,17 @@ name: oktoast description: A pure flutter toast library, support custom style/widget, easy achieve the same effect with native toasts. email: cjl_spy@163.com homepage: https://github.com/OpenFlutter/flutter_oktoast -version: 3.1.5 +version: 3.2.0 environment: - sdk: '>=2.12.0 <3.0.0' - flutter: '>=2.0.0' + sdk: '>=2.17.0 <3.0.0' + flutter: '>=3.0.0' dependencies: flutter: sdk: flutter + +dev_dependencies: + flutter_lints: ^2.0.1 flutter_test: sdk: flutter diff --git a/test/toast_test.dart b/test/toast_test.dart index 3c1292e..61532b5 100644 --- a/test/toast_test.dart +++ b/test/toast_test.dart @@ -4,7 +4,6 @@ /// import 'package:flutter/material.dart' hide Overlay, OverlayEntry, OverlayState; import 'package:flutter_test/flutter_test.dart'; -import 'package:oktoast/oktoast.dart'; import 'package:oktoast/src/core/toast.dart'; void main() { @@ -52,8 +51,8 @@ Future _pumpWidget( body: Center( child: ElevatedButton( key: _wButtonKey, - child: const Text('Button'), onPressed: onPressed, + child: const Text('Button'), ), ), ),