nc-photos/app/lib/widget/handler/double_tap_exit_handler.dart
2022-07-11 15:06:38 +08:00

34 lines
992 B
Dart

import 'package:flutter/material.dart';
import 'package:nc_photos/app_localizations.dart';
import 'package:nc_photos/k.dart' as k;
import 'package:nc_photos/pref.dart';
import 'package:nc_photos/snack_bar_manager.dart';
class DoubleTapExitHandler {
factory DoubleTapExitHandler() => _inst;
DoubleTapExitHandler._();
/// Return if this back button event should actually exit the app
bool call() {
if (!Pref().isDoubleTapExitOr()) {
return true;
}
final now = DateTime.now().toUtc();
_lastBackButtonAt ??= now.subtract(const Duration(days: 1));
if (now.difference(_lastBackButtonAt!) < const Duration(seconds: 5)) {
return true;
} else {
_lastBackButtonAt = now;
SnackBarManager().showSnackBar(SnackBar(
content: Text(L10n.global().doubleTapExitNotification),
duration: k.snackBarDurationShort,
));
return false;
}
}
static final _inst = DoubleTapExitHandler._();
DateTime? _lastBackButtonAt;
}