[camera]revert the weakSelf in FLTThreadSafeEventChannel (#6303)

diff --git a/packages/camera/camera_avfoundation/CHANGELOG.md b/packages/camera/camera_avfoundation/CHANGELOG.md
index 4df497b..897a175 100644
--- a/packages/camera/camera_avfoundation/CHANGELOG.md
+++ b/packages/camera/camera_avfoundation/CHANGELOG.md
@@ -1,3 +1,7 @@
+## 0.9.8+5
+
+* Fixes a regression introduced in 0.9.8+4 where the stream handler is not set. 
+
 ## 0.9.8+4
 
 * Fixes a crash due to sending orientation change events when the engine is torn down. 
diff --git a/packages/camera/camera_avfoundation/example/ios/RunnerTests/ThreadSafeEventChannelTests.m b/packages/camera/camera_avfoundation/example/ios/RunnerTests/ThreadSafeEventChannelTests.m
index e7460de..2aad7e3 100644
--- a/packages/camera/camera_avfoundation/example/ios/RunnerTests/ThreadSafeEventChannelTests.m
+++ b/packages/camera/camera_avfoundation/example/ios/RunnerTests/ThreadSafeEventChannelTests.m
@@ -63,4 +63,20 @@
   [self waitForExpectationsWithTimeout:1 handler:nil];
 }
 
+- (void)testEventChannel_shouldBeKeptAliveWhenDispatchingBackToMainThread {
+  XCTestExpectation *expectation =
+      [self expectationWithDescription:@"Completion should be called."];
+  dispatch_async(dispatch_queue_create("test", NULL), ^{
+    FLTThreadSafeEventChannel *channel = [[FLTThreadSafeEventChannel alloc]
+        initWithEventChannel:OCMClassMock([FlutterEventChannel class])];
+
+    [channel setStreamHandler:OCMOCK_ANY
+                   completion:^{
+                     [expectation fulfill];
+                   }];
+  });
+
+  [self waitForExpectationsWithTimeout:1 handler:nil];
+}
+
 @end
diff --git a/packages/camera/camera_avfoundation/ios/Classes/FLTThreadSafeEventChannel.m b/packages/camera/camera_avfoundation/ios/Classes/FLTThreadSafeEventChannel.m
index ed749a3..57d154c 100644
--- a/packages/camera/camera_avfoundation/ios/Classes/FLTThreadSafeEventChannel.m
+++ b/packages/camera/camera_avfoundation/ios/Classes/FLTThreadSafeEventChannel.m
@@ -21,11 +21,13 @@
 
 - (void)setStreamHandler:(NSObject<FlutterStreamHandler> *)handler
               completion:(void (^)(void))completion {
-  __weak typeof(self) weakSelf = self;
+  // WARNING: Should not use weak self, because FLTThreadSafeEventChannel is a local variable
+  // (retained within call stack, but not in the heap). FLTEnsureToRunOnMainQueue may trigger a
+  // context switch (when calling from background thread), in which case using weak self will always
+  // result in a nil self. Alternative to using strong self, we can also create a local strong
+  // variable to be captured by this block.
   FLTEnsureToRunOnMainQueue(^{
-    typeof(self) strongSelf = weakSelf;
-    if (!strongSelf) return;
-    [strongSelf.channel setStreamHandler:handler];
+    [self.channel setStreamHandler:handler];
     completion();
   });
 }
diff --git a/packages/camera/camera_avfoundation/pubspec.yaml b/packages/camera/camera_avfoundation/pubspec.yaml
index 3d1b7c6..c25fe66 100644
--- a/packages/camera/camera_avfoundation/pubspec.yaml
+++ b/packages/camera/camera_avfoundation/pubspec.yaml
@@ -2,7 +2,7 @@
 description: iOS implementation of the camera plugin.
 repository: https://github.com/flutter/plugins/tree/main/packages/camera/camera_avfoundation
 issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+label%3A%22p%3A+camera%22
-version: 0.9.8+4
+version: 0.9.8+5
 
 environment:
   sdk: ">=2.14.0 <3.0.0"