mirror of
https://github.com/rive-app/rive-flutter.git
synced 2025-08-06 08:29:35 +08:00
Fix event listening for RuntimeArtboard
Flutter runtime needed an additional callback hooked up to listen for nested artboard events because its main artboard is a RuntimeArtboard. Diffs= c5f85ed7f Fix event listening for RuntimeArtboard (#6202) 5e33d8c96 fix: Made default and copy constructors explicit. (#6203) Co-authored-by: Gordon Hayes <pggordonhayes@gmail.com> Co-authored-by: Philip Chung <philterdesign@gmail.com>
This commit is contained in:
@ -1 +1 @@
|
||||
ef8a4e7f711aef6b2d468a885a79f919118bae70
|
||||
c5f85ed7fd25d0d12287cf6ff9a84dac7443129c
|
||||
|
@ -153,7 +153,12 @@ class StateMachineController extends core.StateMachineController {
|
||||
}) {
|
||||
for (final animation in artboard.animations) {
|
||||
if (animation is StateMachine && animation.name == stateMachineName) {
|
||||
return StateMachineController(animation, onStateChange: onStateChange);
|
||||
final controller =
|
||||
StateMachineController(animation, onStateChange: onStateChange);
|
||||
if (artboard is RuntimeArtboard) {
|
||||
artboard.addNestedEventListener(controller);
|
||||
}
|
||||
return controller;
|
||||
}
|
||||
}
|
||||
return null;
|
||||
|
@ -1,3 +1,4 @@
|
||||
import 'package:flutter/scheduler.dart';
|
||||
import 'package:rive/rive.dart';
|
||||
import 'package:rive/src/core/core.dart';
|
||||
import 'package:rive/src/rive_core/component.dart';
|
||||
@ -149,4 +150,22 @@ class RuntimeArtboard extends Artboard implements CoreContext {
|
||||
artboard.clean();
|
||||
return artboard;
|
||||
}
|
||||
|
||||
void addNestedEventListener(StateMachineController controller) {
|
||||
activeNestedArtboards.forEach((artboard) {
|
||||
if (artboard.mountedArtboard is RuntimeMountedArtboard) {
|
||||
(artboard.mountedArtboard as RuntimeMountedArtboard).eventCallback =
|
||||
(event, target) => _handleNestedEvent(event, target, controller);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
void _handleNestedEvent(
|
||||
Event event, NestedArtboard target, StateMachineController controller) {
|
||||
if (controller.hasListenerWithTarget(target)) {
|
||||
controller.reportNestedEvent(event, target);
|
||||
SchedulerBinding.instance
|
||||
.addPostFrameCallback((_) => controller.isActive = true);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user