@@ -109,7 +109,7 @@ class EmbeddedPaymentElementPlatformView: NSObject, FlutterPlatformView {
109109
110110 @MainActor
111111 private func attachEmbeddedView( _ embeddedElement: EmbeddedPaymentElement ) {
112- delegate = FlutterEmbeddedPaymentElementDelegate ( channel: channel, embeddedView : embeddedView )
112+ delegate = FlutterEmbeddedPaymentElementDelegate ( channel: channel)
113113 embeddedElement. delegate = delegate
114114
115115 let paymentElementView = embeddedElement. view
@@ -156,20 +156,27 @@ class EmbeddedPaymentElementPlatformView: NSObject, FlutterPlatformView {
156156
157157class FlutterEmbeddedPaymentElementDelegate : EmbeddedPaymentElementDelegate {
158158 weak var channel : FlutterMethodChannel ?
159- weak var embeddedView : UIView ?
159+ private var lastReportedHeight : CGFloat = 0
160160
161- init ( channel: FlutterMethodChannel , embeddedView : UIView ) {
161+ init ( channel: FlutterMethodChannel ) {
162162 self . channel = channel
163- self . embeddedView = embeddedView
164163 }
165164
166165 func embeddedPaymentElementDidUpdateHeight( embeddedPaymentElement: StripePaymentSheet . EmbeddedPaymentElement ) {
167166 guard let channel = channel else { return }
168167
169- let newHeight = embeddedPaymentElement. view. systemLayoutSizeFitting (
170- CGSize ( width: embeddedPaymentElement. view. bounds. width, height: UIView . layoutFittingCompressedSize. height)
171- ) . height
168+ let paymentView = embeddedPaymentElement. view
169+ paymentView. layoutIfNeeded ( )
172170
171+ let targetSize = paymentView. systemLayoutSizeFitting (
172+ UIView . layoutFittingCompressedSize
173+ )
174+ let newHeight = targetSize. height
175+
176+ guard newHeight > 0 else { return }
177+ guard abs ( newHeight - lastReportedHeight) > 1.0 else { return }
178+
179+ lastReportedHeight = newHeight
173180 channel. invokeMethod ( " onHeightChanged " , arguments: [ " height " : newHeight] )
174181 }
175182
@@ -181,7 +188,7 @@ class FlutterEmbeddedPaymentElementDelegate: EmbeddedPaymentElementDelegate {
181188 }
182189
183190 func embeddedPaymentElementWillPresent( embeddedPaymentElement: EmbeddedPaymentElement ) {
184- if let viewController = embeddedView ? . window? . rootViewController {
191+ if let viewController = embeddedPaymentElement . view . window? . rootViewController {
185192 embeddedPaymentElement. presentingViewController = viewController
186193 }
187194 }
0 commit comments