Skip to content

Commit 964ddc2

Browse files
committed
Fix: Ensure node name is always included in onPanEnd and onRotationEnd callbacks
- Fixed serializeLocalTransformation to always include node name (non-optional) - Changed transform array from [Float?] to [Float] to prevent nil values - Added guard clause to prevent crashes when node is nil - Store node reference before clearing panningNode to prevent race conditions - Fixes issue where Dart code couldn't access node name from call.arguments["name"]
1 parent 9449e0a commit 964ddc2

2 files changed

Lines changed: 4 additions & 17 deletions

File tree

ios/Classes/IosARView.swift

Lines changed: 2 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -626,14 +626,10 @@ class IosARView: NSObject, FlutterPlatformView, ARSCNViewDelegate, UIGestureReco
626626
// State Ended
627627
if(recognizer.state == UIGestureRecognizer.State.ended)
628628
{
629-
// Store node reference before clearing it
630-
let nodeToSerialize = panningNode
631629
// kill variables
632630
panStartLocation = nil
633631
panCurrentLocation = nil
634-
if let node = nodeToSerialize {
635-
DispatchQueue.main.async {self.objectManagerChannel.invokeMethod("onPanEnd", arguments: serializeLocalTransformation(node: node))}
636-
}
632+
DispatchQueue.main.async {self.objectManagerChannel.invokeMethod("onPanEnd", arguments: serializeLocalTransformation(node: self.panningNode))}
637633
panningNode = nil
638634
}
639635
}
@@ -692,14 +688,10 @@ class IosARView: NSObject, FlutterPlatformView, ARSCNViewDelegate, UIGestureReco
692688
// State Ended
693689
if(recognizer.state == UIGestureRecognizer.State.ended)
694690
{
695-
// Store node reference before clearing it
696-
let nodeToSerialize = panningNode
697691
// kill variables
698692
rotation = nil
699693
rotationVelocity = nil
700-
if let node = nodeToSerialize {
701-
DispatchQueue.main.async {self.objectManagerChannel.invokeMethod("onRotationEnd", arguments: serializeLocalTransformation(node: node))}
702-
}
694+
DispatchQueue.main.async {self.objectManagerChannel.invokeMethod("onRotationEnd", arguments: serializeLocalTransformation(node: self.panningNode))}
703695
panningNode = nil
704696
}
705697

ios/Classes/Serialization/Serializers.swift

Lines changed: 2 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -42,14 +42,9 @@ func serializeAnchor(anchor: ARAnchor, anchorNode: SCNNode?, ganchor: GARAnchor,
4242
func serializeLocalTransformation(node: SCNNode?) -> Dictionary<String, Any?> {
4343
var serializedLocalTransformation = Dictionary<String, Any?>()
4444

45-
guard let node = node else {
46-
// Return empty dictionary if node is nil to prevent crashes
47-
return serializedLocalTransformation
48-
}
49-
50-
let transform: [Float] = [node.transform.m11, node.transform.m12, node.transform.m13, node.transform.m14, node.transform.m21, node.transform.m22, node.transform.m23, node.transform.m24, node.transform.m31, node.transform.m32, node.transform.m33, node.transform.m34, node.transform.m41, node.transform.m42, node.transform.m43, node.transform.m44]
45+
let transform: [Float?] = [node?.transform.m11, node?.transform.m12, node?.transform.m13, node?.transform.m14, node?.transform.m21, node?.transform.m22, node?.transform.m23, node?.transform.m24, node?.transform.m31, node?.transform.m32, node?.transform.m33, node?.transform.m34, node?.transform.m41, node?.transform.m42, node?.transform.m43, node?.transform.m44]
5146

52-
serializedLocalTransformation["name"] = node.name
47+
serializedLocalTransformation["name"] = node?.name
5348
serializedLocalTransformation["transform"] = transform
5449

5550
return serializedLocalTransformation

0 commit comments

Comments
 (0)