Watch
1
0
Fork
You've already forked nexus
0
forked from Nexus/nexus

add wip deregistering

This commit is contained in:
Henry Hiles 2026-08-26 16:27:43 -04:00
commit 129f0794f2
Signed by: Henry-Hiles
SSH key fingerprint: SHA256:VKQUdS31Q90KvX7EkKMHMBpUspcmItAh86a+v7PGiIs
7 changed files with 113 additions and 40 deletions

View file

@ -1,8 +1,9 @@
import "dart:io";
import "package:fast_immutable_collections/fast_immutable_collections.dart";
import "package:flutter_hooks/flutter_hooks.dart";
import "package:hooks_riverpod/hooks_riverpod.dart";
import "package:material_ui/material_ui.dart";
import "package:flutter_riverpod/flutter_riverpod.dart";
import "package:intl/intl.dart";
import "package:m3e_buttons/m3e_buttons.dart";
import "package:nexus/controllers/account_data.dart";
@ -105,14 +106,16 @@ class SettingsSectionsController
.new(
title: "Push notifications",
description: "Enable push notifications using Web Push",
builder: (title, description, icon) => Consumer(
builder: (title, description, icon) => HookConsumer(
builder: (context, ref, _) {
final loading = useState(false);
final pusherRegistered = ref.watch(
UnifiedPushController.provider,
);
final unifiedPushAllowed = ref.watch(
UnifiedPushAllowedController.provider,
);
return SwitchListTile(
title: Text(title),
subtitle: Text(
@ -127,34 +130,47 @@ class SettingsSectionsController
data: (value) => value,
orElse: () => false,
),
onChanged:
unifiedPushAllowed.maybeWhen(
data: (data) => data == null,
orElse: () => false,
)
onChanged: loading.value
? null
: unifiedPushAllowed.maybeWhen(
data: (data) => data == null,
orElse: () => false,
)
? pusherRegistered.maybeWhen(
data: (_) => (value) async {
if (value) {
if (await ref
.watch(
NotificationsController
.provider
.notifier,
)
.requestPermissions()) {
ref
try {
loading.value = true;
if (value) {
if (await ref
.watch(
NotificationsController
.provider
.notifier,
)
.requestPermissions()) {
await ref
.watch(
UnifiedPushController
.provider
.notifier,
)
.register();
} else {
// TODO: Handle not granted
}
} else {
await ref
.watch(
UnifiedPushController
.provider
.notifier,
)
.register()
.onError(showError);
} else {
// TODO: Handle not granted
.deregister();
}
} else {
// TODO: Deregister
} catch (error, stackTrace) {
showError(error, stackTrace);
} finally {
loading.value = false;
}
},
orElse: () => null,