-
-
Notifications
You must be signed in to change notification settings - Fork 271
Description
Describe the bug
I'm experiencing an issue on Flutter desktop especially on MacOS (other platforms not properly tested yet). When the OS goes into sleep mode and awakens after a longer period of time streams seem to not be reconnecting properly.
I'm getting a couple of error messages:
First a couple of these:
[ERROR:flutter/runtime/dart_vm_initializer.cc(41)] Unhandled Exception:
#0 SupabaseStreamBuilder._addException (package:supabase/src/supabase_stream_builder.dart:442:67)
#1 SupabaseStreamBuilder._getStreamData.<anonymous closure> (package:supabase/src/supabase_stream_builder.dart:348:9)
#2 RealtimeChannel.subscribe.<anonymous closure> (package:realtime_client/src/realtime_channel.dart:202:39)
#3 RealtimeChannel.onError.<anonymous closure> (package:realtime_client/src/realtime_channel.dart:331:36)
#4 RealtimeChannel.trigger (package:realtime_client/src/realtime_channel.dart:569:22)
#5 RealtimeClient._triggerChanError (package:realtime_client/src/realtime_client.dart:408:15)
#6 RealtimeClient._onConnClose (package:realtime_client/src/realtime_client.dart:389:7)
#7 RealtimeClient.connect.<anonymous closure> (package:realtime_client/src/realtime_client.dart:147:11)
#8 _RootZone.runGuarded (dart:async/zone.dart:1581:10)
#9 _BufferingStreamSubscription._sendDone.sendDone (dart:async/stream_impl.dart:392:13)
#10 _BufferingStreamSubscription._sendDone (dart:async/stream_impl.dart:402:7)
#11 _BufferingStreamSubscription._close (dart:async/stream_impl.dart:291:7)
#12 _ForwardingStream._handleDone (dart:async/stream_pipe.dart:99:10)
#13 _ForwardingStreamSubscription._handleDone (dart:async/stream_pipe.dart:161:13)
#14 _RootZone.runGuarded (dart:async/zone.dart:1581:10)
#15 _BufferingStreamSubscription._sendDone.sendDone (dart:async/stream_impl.dart:392:13)
#16 _BufferingStreamSubscription._sendDone (dart:async/stream_impl.dart:402:7)
#17 _BufferingStreamSubscription._close (dart:async/stream_impl.dart:291:7)
#18 _SyncStreamControllerDispatch._sendDone (dart:async/stream_controller.dart:782:19)
#19 _StreamController._closeUnchecked (dart:async/stream_controller.dart:637:7)
#20 _StreamController.close (dart:async/stream_controller.dart:630:5)
#21 _RootZone.run (dart:async/zone.dart:1654:54)
#22 _FutureListener.handleWhenComplete (dart:async/future_impl.dart:190:18)
#23 Future._propagateToListeners.handleWhenCompleteCallback (dart:async/future_impl.dart:737:39)
#24 Future._propagateToListeners (dart:async/future_impl.dart:793:11)
#25 Future._completeWithValue (dart:async/future_impl.dart:567:5)
#26 Future._asyncCompleteWithValue.<anonymous closure> (dart:async/future_impl.dart:640:7)
#27 _microtaskLoop (dart:async/schedule_microtask.dart:40:21)
#28 _startMicrotaskLoop (dart:async/schedule_microtask.dart:49:5)
Then there is this one:
[ERROR:flutter/runtime/dart_vm_initializer.cc(41)] Unhandled Exception: Exception: "{:error, [message: \"Invalid token\", claim: \"exp\", claim_val: 1690999365]}"
#0 SupabaseStreamBuilder._addException (package:supabase/src/supabase_stream_builder.dart:442:67)
#1 SupabaseStreamBuilder._getStreamData.<anonymous closure> (package:supabase/src/supabase_stream_builder.dart:348:9)
#2 RealtimeChannel.subscribe.<anonymous closure> (package:realtime_client/src/realtime_channel.dart:277:19)
#3 Push._matchReceive.<anonymous closure> (package:realtime_client/src/push.dart:136:17)
#4 Iterable.forEach (dart:core/iterable.dart:325:35)
#5 Push._matchReceive (package:realtime_client/src/push.dart:135:48)
#6 Push.startTimeout.<anonymous closure> (package:realtime_client/src/push.dart:99:7)
#7 RealtimeChannel.trigger (package:realtime_client/src/realtime_channel.dart:569:22)
#8 new RealtimeChannel.<anonymous closure> (package:realtime_client/src/realtime_channel.dart:171:7)
#9 RealtimeChannel.trigger (package:realtime_client/src/realtime_channel.dart:569:22)
#10 RealtimeClient.onConnMessage.<anonymous closure>.<anonymous closure> (package:realtime_client/src/realtime_client.dart:310:41)
#11 Iterable.forEach (dart:core/iterable.dart:325:35)
#12 RealtimeClient.onConnMessage.<anonymous closure> (package:realtime_client/src/realtime_client.dart:310:12)
#13 new RealtimeClient.<anonymous closure> (package:realtime_client/src/realtime_client.dart:110:21)
#14 RealtimeClient.onConnMessage (package:realtime_client/src/realtime_client.dart:293:11)
#15 RealtimeClient.connect.<anonymous closure> (package:realtime_client/src/realtime_client.dart:140:22)
#16 _RootZone.runUnaryGuarded (dart:async/zone.dart:1593:10)
#17 _BufferingStreamSubscription._sendData (dart:async/stream_impl.dart:339:11)
#18 _BufferingStreamSubscription._add (dart:async/stream_impl.dart:271:7)
#19 _ForwardingStreamSubscription._add (dart:async/stream_pipe.dart:123:11)
#20 _HandleErrorStream._handleData (dart:async/stream_pipe.dart:253:10)
#21 _ForwardingStreamSubscription._handleData (dart:async/stream_pipe.dart:153:13)
#22 _RootZone.runUnaryGuarded (dart:async/zone.dart:1593:10)
#23 _BufferingStreamSubscription._sendData (dart:async/stream_impl.dart:339:11)
#24 _BufferingStreamSubscription._add (dart:async/stream_impl.dart:271:7)
#25 _SyncStreamControllerDispatch._sendData (dart:async/stream_controller.dart:774:19)
#26 _StreamController._add (dart:async/stream_controller.dart:648:7)
#27 _RootZone.runUnaryGuarded (dart:async/zone.dart:1593:10)
#28 _BufferingStreamSubscription._sendData (dart:async/stream_impl.dart:339:11)
#29 _BufferingStreamSubscription._add (dart:async/stream_impl.dart:271:7)
#30 _SyncStreamControllerDispatch._sendData (dart:async/stream_controller.dart:774:19)
#31 _StreamController._add (dart:async/stream_controller.dart:648:7)
#32 _StreamController.add (dart:async/stream_controller.dart:596:5)
#33 new _WebSocketImpl._fromSocket.<anonymous closure> (dart:_http/websocket_impl.dart:1144:21)
#34 _RootZone.runUnaryGuarded (dart:async/zone.dart:1593:10)
#35 _BufferingStreamSubscription._sendData (dart:async/stream_impl.dart:339:11)
#36 _BufferingStreamSubscription._add (dart:async/stream_impl.dart:271:7)
#37 _SinkTransformerStreamSubscription._add (dart:async/stream_transformers.dart:63:11)
#38 _EventSinkWrapper.add (dart:async/stream_transformers.dart:13:11)
#39 _WebSocketProtocolTransformer._messageFrameEnd (dart:_http/websocket_impl.dart:332:23)
#40 _WebSocketProtocolTransformer.add (dart:_http/websocket_impl.dart:226:46)
#41 _SinkTransformerStreamSubscription._handleData (dart:async/stream_transformers.dart:111:24)
#42 _RootZone.runUnaryGuarded (dart:async/zone.dart:1593:10)
#43 _BufferingStreamSubscription._sendData (dart:async/stream_impl.dart:339:11)
#44 _BufferingStreamSubscription._add (dart:async/stream_impl.dart:271:7)
#45 _SyncStreamControllerDispatch._sendData (dart:async/stream_controller.dart:774:19)
#46 _StreamController._add (dart:async/stream_controller.dart:648:7)
#47 _StreamController.add (dart:async/stream_controller.dart:596:5)
#48 _Socket._onData (dart:io-patch/socket_patch.dart:2355:41)
#49 _RootZone.runUnaryGuarded (dart:async/zone.dart:1593:10)
#50 _BufferingStreamSubscription._sendData (dart:async/stream_impl.dart:339:11)
#51 _BufferingStreamSubscription._add (dart:async/stream_impl.dart:271:7)
#52 _SyncStreamControllerDispatch._sendData (dart:async/stream_controller.dart:774:19)
#53 _StreamController._add (dart:async/stream_controller.dart:648:7)
#54 _StreamController.add (dart:async/stream_controller.dart:596:5)
#55 _RawSecureSocket._sendReadEvent (dart:io/secure_socket.dart:1111:19)
#56 Timer._createTimer.<anonymous closure> (dart:async-patch/timer_patch.dart:18:15)
#57 _Timer._runTimers (dart:isolate-patch/timer_impl.dart:398:19)
#58 _Timer._handleMessage (dart:isolate-patch/timer_impl.dart:429:5)
#59 _RawReceivePort._handleMessage (dart:isolate-patch/isolate_patch.dart:192:26)
When I trigger a request to Supabase the token gets refreshed, which is good. All requests to Supabase seem to work fine, but streams don't.
[ERROR:flutter/runtime/dart_vm_initializer.cc(41)] Unhandled Exception: Bad state: Cannot add event after closing
#0 _StreamController.add (dart:async/stream_controller.dart:595:24)
#1 _CompleterSink.add (package:web_socket_channel/src/sink_completer.dart:90:27)
#2 RealtimeClient.push.callback.<anonymous closure> (package:realtime_client/src/realtime_client.dart:267:55)
#3 new RealtimeClient.<anonymous closure> (package:realtime_client/src/realtime_client.dart:107:21)
#4 RealtimeClient.push.callback (package:realtime_client/src/realtime_client.dart:267:13)
#5 RealtimeClient.push (package:realtime_client/src/realtime_client.dart:284:9)
#6 Push.send (package:realtime_client/src/push.dart:61:36)
#7 Push.resend (package:realtime_client/src/push.dart:52:5)
#8 RealtimeChannel.rejoin (package:realtime_client/src/realtime_channel.dart:510:14)
#9 RealtimeChannel.rejoinUntilConnected (package:realtime_client/src/realtime_channel.dart:181:7)
#10 new RealtimeChannel.<anonymous closure> (package:realtime_client/src/realtime_channel.dart:134:26)
#11 RetryTimer.scheduleTimeout.<anonymous closure> (package:realtime_client/src/retry_timer.dart:46:15)
#12 Timer._createTimer.<anonymous closure> (dart:async-patch/timer_patch.dart:18:15)
#13 _Timer._runTimers (dart:isolate-patch/timer_impl.dart:398:19)
#14 _Timer._handleMessage (dart:isolate-patch/timer_impl.dart:429:5)
#15 _RawReceivePort._handleMessage (dart:isolate-patch/isolate_patch.dart:192:26)
To Reproduce
Steps to reproduce the behavior:
- Start Flutter desktop application
- get MacOS into sleep mode (e.g. by closing the MacBook)
- wake up after a while
Expected behavior
I would expect the streams to reconnect and load all data that's changed while the system was suspended.
Version (please complete the following information):
On macOS
│ ├── supabase_flutter...
├── supabase_flutter 1.10.11
│ ├── supabase 1.9.9
│ │ ├── functions_client 1.3.2
│ │ ├── gotrue 1.11.2
│ │ ├── postgrest 1.4.0
│ │ ├── realtime_client 1.1.3
│ │ ├── storage_client 1.5.1
I experienced an issue with all requests failing after system sleep due to invalid JWT, but this seems to be solved with the newest package version. Therefore my remaining problem could be related.