diff --git a/example/ios/Runner/Info.plist b/example/ios/Runner/Info.plist
index 718ab51..3329c40 100644
--- a/example/ios/Runner/Info.plist
+++ b/example/ios/Runner/Info.plist
@@ -49,5 +49,7 @@
UIViewControllerBasedStatusBarAppearance
+ CADisableMinimumFrameDurationOnPhone
+
diff --git a/example/lib/pages/room.dart b/example/lib/pages/room.dart
index 171bac9..4bd2d10 100644
--- a/example/lib/pages/room.dart
+++ b/example/lib/pages/room.dart
@@ -32,7 +32,8 @@ class _RoomPageState extends State {
widget.room.addListener(_onRoomDidUpdate);
_setUpListeners();
_sortParticipants();
- WidgetsBinding.instance?.addPostFrameCallback((_) => _askPublish());
+ WidgetsBindingCompatible.instance
+ ?.addPostFrameCallback((_) => _askPublish());
}
@override
@@ -48,7 +49,7 @@ class _RoomPageState extends State {
void _setUpListeners() => _listener
..on((_) async {
- WidgetsBinding.instance
+ WidgetsBindingCompatible.instance
?.addPostFrameCallback((timeStamp) => Navigator.pop(context));
})
..on((event) {
diff --git a/example/macos/Podfile.lock b/example/macos/Podfile.lock
index 2ee3941..4078742 100644
--- a/example/macos/Podfile.lock
+++ b/example/macos/Podfile.lock
@@ -42,7 +42,7 @@ EXTERNAL SOURCES:
SPEC CHECKSUMS:
device_info_plus_macos: 1ad388a1ef433505c4038e7dd9605aadd1e2e9c7
- flutter_webrtc: cbfa010d869391079d6713d9e0f1cda7dde7a407
+ flutter_webrtc: 949e056193e40c1f565f65b4cb680ac001120a72
FlutterMacOS: 57701585bf7de1b3fc2bb61f6378d73bbdea8424
livekit_client: 9201d814b9d5c7c6c0b0edabb341ba1a5253981b
path_provider_macos: 160cab0d5461f0c0e02995469a98f24bdb9a3f1f
diff --git a/lib/livekit_client.dart b/lib/livekit_client.dart
index acbfd84..81fcf62 100644
--- a/lib/livekit_client.dart
+++ b/lib/livekit_client.dart
@@ -29,3 +29,4 @@ export 'src/types/video_dimensions.dart';
export 'src/types/video_encoding.dart';
export 'src/types/video_parameters.dart';
export 'src/widget/video_track_renderer.dart';
+export 'src/extensions.dart' show WidgetsBindingCompatible;
diff --git a/lib/src/extensions.dart b/lib/src/extensions.dart
index 69c30df..c0de8da 100644
--- a/lib/src/extensions.dart
+++ b/lib/src/extensions.dart
@@ -1,5 +1,6 @@
import 'dart:convert';
+import 'package:flutter/material.dart';
import 'package:flutter_webrtc/flutter_webrtc.dart' as rtc;
import 'events.dart';
@@ -160,3 +161,8 @@ extension ParticipantTrackPermissionExt on ParticipantTrackPermission {
trackSids: allowedTrackSids,
);
}
+
+extension WidgetsBindingCompatible on WidgetsBinding {
+ // always return optional type for compatibility with flutter v2 and v3
+ static WidgetsBinding? get instance => WidgetsBinding.instance;
+}
diff --git a/lib/src/widget/video_track_renderer.dart b/lib/src/widget/video_track_renderer.dart
index 7992f69..51b579c 100644
--- a/lib/src/widget/video_track_renderer.dart
+++ b/lib/src/widget/video_track_renderer.dart
@@ -1,8 +1,8 @@
import 'package:flutter/material.dart';
-
import 'package:flutter_webrtc/flutter_webrtc.dart' as rtc;
import '../events.dart';
+import '../extensions.dart';
import '../internal/events.dart';
import '../managers/event.dart';
import '../track/local/local.dart';
@@ -83,7 +83,8 @@ class _VideoTrackRendererState extends State {
key: _internalKey,
builder: (ctx) {
// let it render before notifying build
- WidgetsBinding.instance?.addPostFrameCallback((timeStamp) {
+ WidgetsBindingCompatible.instance
+ ?.addPostFrameCallback((timeStamp) {
widget.track.onVideoViewBuild?.call(_internalKey);
});
return rtc.RTCVideoView(