diff --git a/lib/pages/settings_notifications/settings_notifications.dart b/lib/pages/settings_notifications/settings_notifications.dart index 828152a3..d0058116 100644 --- a/lib/pages/settings_notifications/settings_notifications.dart +++ b/lib/pages/settings_notifications/settings_notifications.dart @@ -1,5 +1,6 @@ import 'package:flutter/material.dart'; +import 'package:adaptive_dialog/adaptive_dialog.dart'; import 'package:collection/collection.dart' show IterableExtension; import 'package:flutter_gen/gen_l10n/l10n.dart'; import 'package:future_loading_dialog/future_loading_dialog.dart'; @@ -94,6 +95,40 @@ class SettingsNotificationsController extends State { ); } + void onPusherTap(Pusher pusher) async { + final delete = await showModalActionSheet( + context: context, + title: pusher.deviceDisplayName, + message: '${pusher.appDisplayName} (${pusher.appId})', + actions: [ + SheetAction( + label: L10n.of(context)!.delete, + isDestructiveAction: true, + key: true, + ) + ], + ); + if (delete != true) return; + + final success = await showFutureLoadingDialog( + context: context, + future: () => Matrix.of(context).client.deletePusher( + PusherId( + appId: pusher.appId, + pushkey: pusher.pushkey, + ), + ), + ); + + if (success.error != null) return; + + setState(() { + pusherFuture = null; + }); + } + + Future?>? pusherFuture; + @override Widget build(BuildContext context) => SettingsNotificationsView(this); } diff --git a/lib/pages/settings_notifications/settings_notifications_view.dart b/lib/pages/settings_notifications/settings_notifications_view.dart index c01d8220..919e1f66 100644 --- a/lib/pages/settings_notifications/settings_notifications_view.dart +++ b/lib/pages/settings_notifications/settings_notifications_view.dart @@ -77,7 +77,8 @@ class SettingsNotificationsView extends StatelessWidget { ), ), FutureBuilder?>( - future: Matrix.of(context).client.getPushers(), + future: controller.pusherFuture ??= + Matrix.of(context).client.getPushers(), builder: (context, snapshot) { if (snapshot.hasError) { Center( @@ -100,6 +101,7 @@ class SettingsNotificationsView extends StatelessWidget { title: Text( '${pushers[i].appDisplayName} - ${pushers[i].appId}'), subtitle: Text(pushers[i].data.url.toString()), + onTap: () => controller.onPusherTap(pushers[i]), ), ); },