Closed royibernthal closed 3 years ago
Passing a channels set with more than 1 channel throws an error as well. So hereNow basically only works when passing a channels set that contains only 1 channel.
Error:
W/com.transfable(10180): Accessing hidden method Lsun/misc/Unsafe;->compareAndSwapObject(Ljava/lang/Object;JLjava/lang/Object;Ljava/lang/Object;)Z (greylist, linking, allowed)
E/flutter (10180): [ERROR:flutter/lib/ui/ui_dart_state.cc(177)] Unhandled Exception: type '_CastError' is not a subtype of type 'Exception'
E/flutter (10180): #0 Fiber.run (package:pubnub/src/core/supervisor/fiber.dart:41:62)
E/flutter (10180): <asynchronous suspension>
E/flutter (10180): #1 defaultFlow (package:pubnub/src/dx/_utils/default_flow.dart:21:15)
E/flutter (10180): #2 PresenceDx.hereNow (package:pubnub/src/dx/presence/presence.dart:43:12)
E/flutter (10180): #3 PubNub._hereNow (package:transfable/service/pubnub.dart:147:45)
E/flutter (10180): #4 PubNub.subscribeToPresence (package:transfable/service/pubnub.dart:139:5)
E/flutter (10180): #5 InitProfile._initAdditionalServices (package:transfable/service/init_profile.dart:164:13)
E/flutter (10180): #6 InitProfile._initServices (package:transfable/service/init_profile.dart:153:5)
E/flutter (10180): #7 InitProfile.init (package:transfable/service/init_profile.dart:88:42)
E/flutter (10180): #8 _rootRunUnary (dart:async/zone.dart:1198:47)
E/flutter (10180): #9 _CustomZone.runUnary (dart:async/zone.dart:1100:19)
E/flutter (10180): #10 _FutureListener.handleValue (dart:async/future_impl.dart:143:18)
E/flutter (10180): #11 Future._propagateToListeners.handleValueCallback (dart:async/future_impl.dart:696:45)
E/flutter (10180): #12 Future._propagateToListeners (dart:async/future_impl.dart:725:32)
E/flutter (10180): #13 Future._completeWithValue (dart:async/future_impl.dart:529:5)
E/flutter (10180): #14 _AsyncAwaitCompleter.complete (dart:async-patch/async_patch.dart:40:15)
E/flutter (10180): #15 _completeOnAsyncReturn (dart:async-patch/async_patch.dart:311:13)
E/flutter (10180): #16 ProfileEditor.init (package:transfable/service/profile_editor.dart)
E/flutter (10180): #17 _rootRunUnary (dart:async/zone.dart:1198:47)
E/flutter (10180): #18 _CustomZone.runUnary (dart:async/zone.dart:1100:19)
E/flutter (10180): #19 _FutureListener.handleValue (dart:async/future_impl.dart:143:18)
E/flutter (10180): #20 Future._propagateToListeners.handleValueCallback (dart:async/future_impl.dart:696:45)
E/flutter (10180): #21 Future._propagateToListeners (dart:async/future_impl.dart:725:32)
E/flutter (10180): #22 Future._completeWithValue (dart:async/future_impl.dart:529:5)
E/flutter (10180): #23 _AsyncAwaitCompleter.complete (dart:async-patch/async_patch.dart:40:15)
E/flutter (10180): #24 _completeOnAsyncReturn (dart:async-patch/async_patch.dart:311:13)
E/flutter (10180): #25 Server.request (package:transfable/service/server/server.dart)
E/flutter (10180): #26 _rootRunUnary (dart:async/zone.dart:1198:47)
E/flutter (10180): #27 _CustomZone.runUnary (dart:async/zone.dart:1100:19)
E/flutter (10180): #28 _FutureListener.handleValue (dart:async/future_impl.dart:143:18)
E/flutter (10180): #29 Future._propagateToListeners.handleValueCallback (dart:async/future_impl.dart:696:45)
E/flutter (10180): #30 Future._propagateToListeners (dart:async/future_impl.dart:725:32)
E/flutter (10180): #31 Future._completeWithValue (dart:async/future_impl.dart:529:5)
E/flutter (10180): #32 _AsyncAwaitCompleter.complete (dart:async-patch/async_patch.dart:40:15)
E/flutter (10180): #33 _completeOnAsyncReturn (dart:async-patch/async_patch.dart:311:13)
E/flutter (10180): #34 Server._createRequest (package:transfable/service/server/server.dart)
E/flutter (10180): #35 _rootRunUnary (dart:async/zone.dart:1198:47)
E/flutter (10180): #36 _CustomZone.runUnary (dart:async/zone.dart:1100:19)
E/flutter (10180): #37 _FutureListener.handleValue (dart:async/future_impl.dart:143:18)
E/flutter (10180): #38 Future._propagateToListeners.handleValueCallback (dart:async/future_impl.dart:696:45)
E/flutter (10180): #39 Future._propagateToListeners (dart:async/future_impl.dart:725:32)
E/flutter (10180): #40 Future._complete (dart:async/future_impl.dart:519:7)
E/flutter (10180): #41 _SyncCompleter.complete (dart:async/future_impl.dart:55:12)
E/flutter (10180): #42 Future.any.onValue (dart:async/future.dart:477:45)
E/flutter (10180): #43 _rootRunUnary (dart:async/zone.dart:1198:47)
E/flutter (10180): #44 _CustomZone.runUnary (dart:async/zone.dart:1100:19)
E/flutter (10180): #45 _FutureListener.handleValue (dart:async/future_impl.dart:143:18)
E/flutter (10180): #46 Future._propagateToListeners.handleValueCallback (dart:async/future_impl.dart:696:45)
E/flutter (10180): #47 Future._propagateToListeners (dart:async/future_impl.dart:725:32)
E/flutter (10180): #48 Future._completeWithValue (dart:async/future_impl.dart:529:5)
E/flutter (10180): #49 _AsyncAwaitCompleter.complete (dart:async-patch/async_patch.dart:40:15)
E/flutter (10180): #50 _completeOnAsyncReturn (dart:async-patch/async_patch.dart:311:13)
E/flutter (10180): #51 DioMixin._dispatchRequest (package:dio/src/dio.dart)
E/flutter (10180): #52 _rootRunUnary (dart:async/zone.dart:1198:47)
E/flutter (10180): #53 _CustomZone.runUnary (dart:async/zone.dart:1100:19)
E/flutter (10180): #54 _Futur
This is certainly weird because I recall it working some time ago, so it has to be a regression. Thanks for reporting this!
Yup, happens. Any idea how long roughly it might take for this to be fixed?
It's hard to estimate since I'm currently working on something big for Dart SDK, so I wouldn't count on it being released before next year.
Good news tho - I got a temporary workaround to make it work: pass in empty Set to channels
param and it should work like a charm.
Also, I am aware of another bug in the hereNow code with regards to incorrect casting.
Got it, good to know.
As a temporary workaround I'm making a separate hereNow call for each channel. I suppose the downside is I'll have 2 times the function calls and therefore a higher bill at the end of the month?
What does passing an empty Set to channels mean? Does it mean something like all possible channels that use withPresence?
The problem is that when the validation happens for the hereNow
call, it tries to check channels.isNotEmpty
so it expects channels
to be a Set
, but when you are passing in only channelGroups
, channels
is null.
If you want to do hereNow
with a channel group, you can try doing this:
pubnub.hereNow(channelGroups: { myChannelGroup }, channels: {})
Oh got it, thanks for the clarification.
Just tried it now, still getting a cast error for some reason.
This should be fixed in 3.1.0
. Let us know if the issue persists!
Passing channelGroups to hereNow call results in an error. I made sure the channel groups exit and contain channels.
When passing channels instead to the hereNow call, it works as expected.
Code:
Error: