diff --git a/client/flutter/divkit/CHANGELOG.md b/client/flutter/divkit/CHANGELOG.md index c65555234..a5cd989fc 100644 --- a/client/flutter/divkit/CHANGELOG.md +++ b/client/flutter/divkit/CHANGELOG.md @@ -1,6 +1,7 @@ ## 0.2.0-pre * Correct interpretation of dict in variables context +* Add support no_animation type of animation * Add support of longtap actions * Remove dispose from public div-context * Provide DivContext in custom elements: you can use variables, actions, timers and states in diff --git a/client/flutter/divkit/lib/src/core/widgets/base/div_base_widget.dart b/client/flutter/divkit/lib/src/core/widgets/base/div_base_widget.dart index 274d1aaf1..a1cb1a1ac 100644 --- a/client/flutter/divkit/lib/src/core/widgets/base/div_base_widget.dart +++ b/client/flutter/divkit/lib/src/core/widgets/base/div_base_widget.dart @@ -1,6 +1,7 @@ import 'package:divkit/src/core/widgets/base/div_base_model.dart'; import 'package:divkit/src/core/widgets/div_tap_action_emitter.dart'; import 'package:divkit/src/generated_sources/div_action.dart'; +import 'package:divkit/src/generated_sources/div_animation.dart'; import 'package:divkit/src/generated_sources/div_base.dart'; import 'package:divkit/src/utils/div_focus_node.dart'; import 'package:divkit/src/utils/size_converters.dart'; @@ -11,11 +12,13 @@ class DivBaseWidget extends StatefulWidget { final List actions; final List longtapActions; + final DivAnimation? actionAnimation; final Widget child; DivBaseWidget({ required this.data, + this.actionAnimation, super.key, DivAction? action, List? actions, @@ -73,6 +76,7 @@ class _DivBaseWidgetState extends State { opacity: model.opacity, child: DivTapActionEmitter( actions: widget.actions, + actionAnimation: widget.actionAnimation, longtapActions: widget.longtapActions, child: focusNode != null ? AnimatedBuilder( diff --git a/client/flutter/divkit/lib/src/core/widgets/container/div_container_widget.dart b/client/flutter/divkit/lib/src/core/widgets/container/div_container_widget.dart index a14a652a5..f76fe7212 100644 --- a/client/flutter/divkit/lib/src/core/widgets/container/div_container_widget.dart +++ b/client/flutter/divkit/lib/src/core/widgets/container/div_container_widget.dart @@ -44,6 +44,7 @@ class _DivContainerWidgetState extends State { action: widget.data.action, actions: widget.data.actions, longtapActions: widget.data.longtapActions, + actionAnimation: widget.data.actionAnimation, child: StreamBuilder( stream: stream, builder: (context, snapshot) { diff --git a/client/flutter/divkit/lib/src/core/widgets/div_tap_action_emitter.dart b/client/flutter/divkit/lib/src/core/widgets/div_tap_action_emitter.dart index 821b5056f..c279fe624 100644 --- a/client/flutter/divkit/lib/src/core/widgets/div_tap_action_emitter.dart +++ b/client/flutter/divkit/lib/src/core/widgets/div_tap_action_emitter.dart @@ -1,6 +1,7 @@ import 'package:divkit/src/core/action/action.dart'; import 'package:divkit/src/core/action/action_converter.dart'; import 'package:divkit/src/core/protocol/div_context.dart'; +import 'package:divkit/src/generated_sources/div_animation.dart'; import 'package:divkit/src/generated_sources/generated_sources.dart' as dto; import 'package:divkit/src/utils/provider.dart'; import 'package:divkit/src/utils/tap_builder.dart'; @@ -11,17 +12,20 @@ class DivTapActionModel with EquatableMixin { final List actions; final List longtapActions; final bool enabled; + final bool enabledAnimation; const DivTapActionModel({ required this.actions, required this.longtapActions, required this.enabled, + required this.enabledAnimation, }); static Stream from( BuildContext context, List actions, List longtapActions, + dto.DivAnimation? divAnimation, ) { final variables = DivKitProvider.watch(context)!.variableManager; @@ -47,10 +51,14 @@ class DivTapActionModel with EquatableMixin { } } + final animationName = + await divAnimation?.name.resolveValue(context: context); + return DivTapActionModel( actions: a, longtapActions: la, enabled: a.isNotEmpty || la.isNotEmpty, + enabledAnimation: !(animationName == DivAnimationName.noAnimation), ); }).distinct(); } @@ -58,6 +66,8 @@ class DivTapActionModel with EquatableMixin { @override List get props => [ actions, + longtapActions, + enabledAnimation, ]; } @@ -65,6 +75,7 @@ class DivTapActionModel with EquatableMixin { class DivTapActionEmitter extends StatefulWidget { final List actions; final List longtapActions; + final DivAnimation? actionAnimation; final Widget child; @@ -73,6 +84,7 @@ class DivTapActionEmitter extends StatefulWidget { required this.actions, required this.longtapActions, required this.child, + required this.actionAnimation, }); @override @@ -92,6 +104,7 @@ class _DivTapActionEmitterState extends State { context, widget.actions, widget.longtapActions, + widget.actionAnimation, ); } @@ -104,6 +117,7 @@ class _DivTapActionEmitterState extends State { context, widget.actions, widget.longtapActions, + widget.actionAnimation, ); } } @@ -130,6 +144,9 @@ class _DivTapActionEmitterState extends State { } }, builder: (context, pressed, hovered, child) { + if (!model.enabledAnimation) { + return child; + } double opacity = 1.0; if (pressed) { opacity = 0.6; diff --git a/client/flutter/divkit/lib/src/core/widgets/image/div_image_widget.dart b/client/flutter/divkit/lib/src/core/widgets/image/div_image_widget.dart index d28cbbb68..9a480de50 100644 --- a/client/flutter/divkit/lib/src/core/widgets/image/div_image_widget.dart +++ b/client/flutter/divkit/lib/src/core/widgets/image/div_image_widget.dart @@ -50,6 +50,7 @@ class _DivImageWidgetState extends State { action: widget.data.action, actions: widget.data.actions, longtapActions: widget.data.longtapActions, + actionAnimation: widget.data.actionAnimation, child: StreamBuilder( stream: stream, builder: (context, snapshot) { diff --git a/client/flutter/divkit/lib/src/core/widgets/text/div_text_widget.dart b/client/flutter/divkit/lib/src/core/widgets/text/div_text_widget.dart index c67c8a7ba..dd3d67a2f 100644 --- a/client/flutter/divkit/lib/src/core/widgets/text/div_text_widget.dart +++ b/client/flutter/divkit/lib/src/core/widgets/text/div_text_widget.dart @@ -42,6 +42,7 @@ class _DivTextWidgetState extends State { action: widget.data.action, actions: widget.data.actions, longtapActions: widget.data.longtapActions, + actionAnimation: widget.data.actionAnimation, child: StreamBuilder( stream: stream, builder: (context, snapshot) {