11//
2- // Copyright (c) 2023-2024 PADL Software Pty Ltd
2+ // Copyright (c) 2023-2025 PADL Software Pty Ltd
33//
44// Licensed under the Apache License, Version 2.0 (the License);
55// you may not use this file except in compliance with the License.
@@ -32,7 +32,9 @@ public typealias FlutterEventStream<Event: Codable> = AnyAsyncSequence<Event?>
3232/**
3333 * A channel for communicating with the Flutter side using event streams.
3434 */
35- public final class FlutterEventChannel : _FlutterBinaryMessengerConnectionRepresentable , Sendable {
35+ public final class FlutterEventChannel : _FlutterBinaryMessengerConnectionRepresentable ,
36+ Sendable
37+ {
3638 public let name : String
3739 public let binaryMessenger : FlutterBinaryMessenger
3840 public let codec : FlutterMessageCodec
@@ -43,6 +45,10 @@ public final class FlutterEventChannel: _FlutterBinaryMessengerConnectionReprese
4345 private let _connection : ManagedAtomic < FlutterBinaryMessengerConnection >
4446 private let tasks : ManagedCriticalState < [ String : EventStreamTask ] >
4547
48+ // store these to propagate to separate channel invocations
49+ private var channelBufferSize = 1
50+ private var allowChannelBufferOverflow = false
51+
4652 var connection : FlutterBinaryMessengerConnection {
4753 get {
4854 _connection. load ( ordering: . acquiring)
@@ -161,6 +167,19 @@ public final class FlutterEventChannel: _FlutterBinaryMessengerConnectionReprese
161167
162168 switch method. count > 1 ? String ( method [ 0 ] ) : call. method {
163169 case " listen " :
170+ if !invocationID. isEmpty {
171+ try await _resizeChannelBuffer (
172+ binaryMessenger: binaryMessenger,
173+ on: name,
174+ newSize: channelBufferSize
175+ )
176+ try await _allowChannelBufferOverflow (
177+ binaryMessenger: binaryMessenger,
178+ on: name,
179+ allowed: allowChannelBufferOverflow
180+ )
181+ }
182+
164183 let stream = try await onListen ( call. arguments)
165184 let task = EventStreamTask ( priority: priority) {
166185 try ? await self . _run ( for: stream, name: name)
@@ -220,4 +239,18 @@ public final class FlutterEventChannel: _FlutterBinaryMessengerConnectionReprese
220239 public var tasksCount : Int {
221240 tasks. withCriticalRegion { $0. count }
222241 }
242+
243+ public func resizeChannelBuffer( _ newSize: Int ) async throws {
244+ try await _resizeChannelBuffer ( binaryMessenger: binaryMessenger, on: name, newSize: newSize)
245+ channelBufferSize = newSize
246+ }
247+
248+ public func allowChannelBufferOverflow( _ allowed: Bool ) async throws {
249+ try await _allowChannelBufferOverflow (
250+ binaryMessenger: binaryMessenger,
251+ on: name,
252+ allowed: allowed
253+ )
254+ allowChannelBufferOverflow = allowed
255+ }
223256}
0 commit comments