From e954bc1528abf82de4f1c0db21ff7f81e52c4d72 Mon Sep 17 00:00:00 2001 From: Ben Butterworth <24711048+ben-xD@users.noreply.github.com> Date: Wed, 3 Nov 2021 15:18:04 +0000 Subject: [PATCH] Copy unawaited implementation into Ably Flutter from future.dart, to avoid build failures in Flutter 2.2.3 --- lib/src/common/src/backwards_compatibility.dart | 14 ++++++++++++++ lib/src/platform/src/realtime/realtime.dart | 3 ++- .../platform/src/realtime/realtime_channel.dart | 3 ++- lib/src/platform/src/rest/rest_channel.dart | 3 ++- test/realtime/channel_test.dart | 3 ++- test/rest/channel_test.dart | 3 ++- 6 files changed, 24 insertions(+), 5 deletions(-) create mode 100644 lib/src/common/src/backwards_compatibility.dart diff --git a/lib/src/common/src/backwards_compatibility.dart b/lib/src/common/src/backwards_compatibility.dart new file mode 100644 index 000000000..9f8e272de --- /dev/null +++ b/lib/src/common/src/backwards_compatibility.dart @@ -0,0 +1,14 @@ +/// This function was added to add backwards compatibility. +/// +/// `unawaited` was previously imported in code from package:pedantic. +/// However, this package was deprecated, and `unawaited` was added to Flutter +/// directly. Unfortunately, it was only added in Flutter 2.5 (Dart 2.14). +/// +/// Users who use the package with Flutter versions older than 2.5 will +/// face missing method errors. Forcing users to upgrade to 2.5 may force them +/// to undergo [breaking changes](https://flutter.dev/docs/release/breaking-changes#released-in-flutter-25). +/// +/// Reminder: Once we increase our minimum dart version support to 2.14 and +/// minimum Flutter version support 2.5.0, we can remove this method and replace +/// it with `unawaited` +void unawaitedWorkaroundForDartPre214(Future future) {} diff --git a/lib/src/platform/src/realtime/realtime.dart b/lib/src/platform/src/realtime/realtime.dart index 35c774d70..d4a65495f 100644 --- a/lib/src/platform/src/realtime/realtime.dart +++ b/lib/src/platform/src/realtime/realtime.dart @@ -3,6 +3,7 @@ import 'dart:collection'; import '../../../authentication/authentication.dart'; import '../../../common/common.dart'; +import '../../../common/src/backwards_compatibility.dart'; import '../../../error/error.dart'; import '../../../generated/platform_constants.dart'; import '../../../push_notifications/push_notifications.dart'; @@ -78,7 +79,7 @@ class Realtime extends PlatformObject Future connect() async { final queueItem = Completer(); _connectQueue.add(queueItem); - unawaited(_connect()); + unawaitedWorkaroundForDartPre214(_connect()); return queueItem.future; } diff --git a/lib/src/platform/src/realtime/realtime_channel.dart b/lib/src/platform/src/realtime/realtime_channel.dart index 6baf0e42b..81c2e8bc6 100644 --- a/lib/src/platform/src/realtime/realtime_channel.dart +++ b/lib/src/platform/src/realtime/realtime_channel.dart @@ -4,6 +4,7 @@ import 'dart:collection'; import 'package:flutter/services.dart'; import 'package:meta/meta.dart'; +import '../../../common/src/backwards_compatibility.dart'; import '../../../error/error.dart'; import '../../../generated/platform_constants.dart'; import '../../../message/message.dart'; @@ -75,7 +76,7 @@ class RealtimeChannel extends PlatformObject ]; final queueItem = _PublishQueueItem(Completer(), messages); _publishQueue.add(queueItem); - unawaited(_publishInternal()); + unawaitedWorkaroundForDartPre214(_publishInternal()); return queueItem.completer.future; } diff --git a/lib/src/platform/src/rest/rest_channel.dart b/lib/src/platform/src/rest/rest_channel.dart index ba2d8f193..b13b016eb 100644 --- a/lib/src/platform/src/rest/rest_channel.dart +++ b/lib/src/platform/src/rest/rest_channel.dart @@ -4,6 +4,7 @@ import 'dart:collection'; import 'package:flutter/services.dart'; import '../../../../ably_flutter.dart'; +import '../../../common/src/backwards_compatibility.dart'; import '../../../error/error.dart'; import '../../../generated/platform_constants.dart'; import '../../../message/message.dart'; @@ -69,7 +70,7 @@ class RestChannel extends PlatformObject implements RestChannelInterface { ]; final queueItem = PublishQueueItem(Completer(), messages); _publishQueue.add(queueItem); - unawaited(_publishInternal()); + unawaitedWorkaroundForDartPre214(_publishInternal()); return queueItem.completer.future; } diff --git a/test/realtime/channel_test.dart b/test/realtime/channel_test.dart index 1b8bce8e9..ea3ca1afb 100644 --- a/test/realtime/channel_test.dart +++ b/test/realtime/channel_test.dart @@ -1,6 +1,7 @@ import 'dart:async'; import 'package:ably_flutter/ably_flutter.dart'; +import 'package:ably_flutter/src/common/src/backwards_compatibility.dart'; import 'package:ably_flutter/src/generated/platform_constants.dart'; import 'package:fake_async/fake_async.dart'; import 'package:flutter_test/flutter_test.dart'; @@ -86,7 +87,7 @@ void main() { return Future.value('token'); } - unawaited( + unawaitedWorkaroundForDartPre214( fakeAsync((async) async { final options = ClientOptions() ..authCallback = timingOutOnceThenSucceedsAuthCallback diff --git a/test/rest/channel_test.dart b/test/rest/channel_test.dart index da35c4d28..281d48581 100644 --- a/test/rest/channel_test.dart +++ b/test/rest/channel_test.dart @@ -1,6 +1,7 @@ import 'dart:async'; import 'package:ably_flutter/ably_flutter.dart'; +import 'package:ably_flutter/src/common/src/backwards_compatibility.dart'; import 'package:ably_flutter/src/generated/platform_constants.dart'; import 'package:fake_async/fake_async.dart'; import 'package:flutter_test/flutter_test.dart'; @@ -83,7 +84,7 @@ void main() { return Future.value('token'); } - unawaited( + unawaitedWorkaroundForDartPre214( fakeAsync((async) async { final options = ClientOptions() ..authCallback = timingOutOnceThenSucceedsAuthCallback