
when my internet is cut and reconnect, the subscription is changed and i do not get the updates how can i reconnect to the subscription or how can i close it

You could add an EventListener on window
for offline
to detect when you lose connection. You can then call the unsubscribe()
function to close the connection.

Then you can listen for online
again, and on reconnect, either reload the page, or recreate the subscribe.

I think he using flutter for this issue because base on the tagged its flutter indication

You can still adapt the procedure of @ideclon in flutter but that depends on what state management your app used. In instance, if riverpod you can actually use the AutoDisposeAsyncNotifier here. and call the ref.invalidate to refresh the provider

Whoops, sorry! Should have checked the tags!

final consultationRolesControllerProvider =
AutoDisposeAsyncNotifierProvider<ConsultationRolesController, List<Role>>(
() => throw UnimplementedError());
class ConsultationRolesController extends AutoDisposeAsyncNotifier<List<Role>> {
@override
FutureOr<List<Role>> build() async {
state = const AsyncValue.loading();
ref.onDispose(() {
_subscription?.cancel();
});
final consultId = ref.read(consultationdIdProvider);
final roles = await ref.read(consultationRepoProvider).getRoles(queries: [
Query.equal("consultationRef", consultId),
]);
roles.removeWhere((element) => element.name == "owner");
subscribe();
return roles;
}
StreamSubscription<ConsultationRealtime<ConsultationRole>>? _subscription;
void subscribe() {
_subscription = ref
.read(consultationRepoProvider)
.getConsultationRoleStream(
Realtime(AppwriteClient.instance.client),
)
.listen((roles) => _rolesListener(roles),
onError: _rolesErrorListener, cancelOnError: true);
}
void _rolesErrorListener(Object error, StackTrace stackTrace) {
state = AsyncValue.error(error, stackTrace);
}
void _rolesListener(ConsultationRealtime<ConsultationRole> roles) {
if (roles.type == ConsultationRealtimeType.create) {
final merge = [...state.value!, roles.data];
state = AsyncData(merge);
} else if (roles.type == ConsultationRealtimeType.delete) {
final merge = [...state.value!];
merge.removeWhere((element) => element.id == roles.data.id);
state = AsyncData(merge);
} else if (roles.type == ConsultationRealtimeType.update) {
final merge = [...state.value!];
final index = merge.indexWhere((element) => element.id == roles.data.id);
merge[index] = roles.data;
state = AsyncData(merge);
}
}

As you can see in build method we have
ref.onDispose(() {
_subscription?.cancel();
});
Now if you trigger this ref.invalidate(consultationRolesControllerProvider) it will refresh your provider and that ref.onDispose will also be triggered. And that Happen your provider will be refreshed
Recommended threads
- Flutter OAuth2 Google does not return to...
When the flow starts, the browser opens, I select an account, and it keeps showing: """ Page not found The page you're looking for doesn't exist. `general_rout...
- Redirect URL sends HTTP instead of HTTPS...
I am not sure since when this issue is present, but my Google and Apple redirect URI are no longer pointing to the HTTPS redirect URI when I try to use OAuth. ...
- Failing to run document operations on sd...
Could someone point me in the right direction I'm going in cirlces. I have a problem with sdks and my self-hosted server in production (for ~3 years) I have bee...
