Browse Source

Merge pull request #509 from provokateurin/fix/hide-useless-push-notifications-popups

fix(neon): Hide useless push notifications popups
pull/522/head
Kate 1 year ago committed by GitHub
parent
commit
2b919be213
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
  1. 1
      packages/neon/neon/lib/src/pages/home.dart
  2. 43
      packages/neon/neon/lib/src/utils/global_popups.dart

1
packages/neon/neon/lib/src/pages/home.dart

@ -74,6 +74,7 @@ class _HomePageState extends State<HomePage> {
@override @override
void dispose() { void dispose() {
unawaited(_versionCheckSubscription.cancel()); unawaited(_versionCheckSubscription.cancel());
GlobalPopups().dispose();
super.dispose(); super.dispose();
} }

43
packages/neon/neon/lib/src/utils/global_popups.dart

@ -1,9 +1,12 @@
import 'dart:async';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:meta/meta.dart'; import 'package:meta/meta.dart';
import 'package:neon/l10n/localizations.dart'; import 'package:neon/l10n/localizations.dart';
import 'package:neon/src/blocs/first_launch.dart'; import 'package:neon/src/blocs/first_launch.dart';
import 'package:neon/src/blocs/next_push.dart'; import 'package:neon/src/blocs/next_push.dart';
import 'package:neon/src/pages/settings.dart'; import 'package:neon/src/pages/settings.dart';
import 'package:neon/src/platform/platform.dart';
import 'package:neon/src/router.dart'; import 'package:neon/src/router.dart';
import 'package:neon/src/utils/global_options.dart'; import 'package:neon/src/utils/global_options.dart';
import 'package:provider/provider.dart'; import 'package:provider/provider.dart';
@ -22,8 +25,19 @@ class GlobalPopups {
static GlobalPopups? instance; static GlobalPopups? instance;
bool _registered = false; bool _registered = false;
late BuildContext _context;
final _subscriptions = <StreamSubscription>[];
void dispose() {
for (final subscription in _subscriptions) {
unawaited(subscription.cancel());
}
_subscriptions.clear();
_registered = false;
}
void register(final BuildContext context) { void register(final BuildContext context) {
_context = context;
if (_registered) { if (_registered) {
return; return;
} }
@ -31,29 +45,36 @@ class GlobalPopups {
final globalOptions = Provider.of<GlobalOptions>(context, listen: false); final globalOptions = Provider.of<GlobalOptions>(context, listen: false);
final firstLaunchBloc = Provider.of<FirstLaunchBloc>(context, listen: false); final firstLaunchBloc = Provider.of<FirstLaunchBloc>(context, listen: false);
final nextPushBloc = Provider.of<NextPushBloc>(context, listen: false); final nextPushBloc = Provider.of<NextPushBloc>(context, listen: false);
final platform = Provider.of<NeonPlatform>(context, listen: false);
_subscriptions.addAll([
if (platform.canUsePushNotifications) ...[
firstLaunchBloc.onFirstLaunch.listen((final _) { firstLaunchBloc.onFirstLaunch.listen((final _) {
if (globalOptions.pushNotificationsEnabled.enabled) { assert(context.mounted, 'Context should be mounted');
if (!context.mounted) { if (!globalOptions.pushNotificationsEnabled.enabled) {
return; return;
} }
ScaffoldMessenger.of(context).showSnackBar(
ScaffoldMessenger.of(_context).showSnackBar(
SnackBar( SnackBar(
content: Text(AppLocalizations.of(context).firstLaunchGoToSettingsToEnablePushNotifications), content: Text(AppLocalizations.of(_context).firstLaunchGoToSettingsToEnablePushNotifications),
action: SnackBarAction( action: SnackBarAction(
label: AppLocalizations.of(context).settings, label: AppLocalizations.of(_context).settings,
onPressed: () { onPressed: () {
const SettingsRoute(initialCategory: SettingsCageories.pushNotifications).go(context); const SettingsRoute(initialCategory: SettingsCageories.pushNotifications).go(_context);
}, },
), ),
), ),
); );
}),
nextPushBloc.onNextPushSupported.listen((final _) async {
assert(context.mounted, 'Context should be mounted');
if (!globalOptions.pushNotificationsEnabled.enabled) {
return;
} }
});
nextPushBloc.onNextPushSupported.listen((final _) async {
await showDialog( await showDialog(
context: context, context: _context,
builder: (final context) => AlertDialog( builder: (final context) => AlertDialog(
title: Text(AppLocalizations.of(context).nextPushSupported), title: Text(AppLocalizations.of(context).nextPushSupported),
content: Text(AppLocalizations.of(context).nextPushSupportedText), content: Text(AppLocalizations.of(context).nextPushSupportedText),
@ -77,7 +98,9 @@ class GlobalPopups {
], ],
), ),
); );
}); }),
],
]);
_registered = true; _registered = true;
} }

Loading…
Cancel
Save