forked from Nexus/nexus
add wip deregistering
This commit is contained in:
parent
0122feae1d
commit
129f0794f2
7 changed files with 113 additions and 40 deletions
|
|
@ -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,
|
||||
|
|
|
|||
Loading…
Reference in a new issue