feat: 两次退出确认

This commit is contained in:
guozhigq
2023-08-30 09:18:34 +08:00
parent 52e44fb95b
commit fceb55aaa3
2 changed files with 63 additions and 46 deletions

View File

@ -1,5 +1,6 @@
import 'dart:async'; import 'dart:async';
import 'package:flutter_smart_dialog/flutter_smart_dialog.dart';
import 'package:get/get.dart'; import 'package:get/get.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:hive/hive.dart'; import 'package:hive/hive.dart';
@ -53,6 +54,7 @@ class MainController extends GetxController {
final StreamController<bool> bottomBarStream = final StreamController<bool> bottomBarStream =
StreamController<bool>.broadcast(); StreamController<bool>.broadcast();
Box setting = GStrorage.setting; Box setting = GStrorage.setting;
DateTime? _lastPressedAt;
@override @override
void onInit() { void onInit() {
@ -61,4 +63,16 @@ class MainController extends GetxController {
Utils.checkUpdata(); Utils.checkUpdata();
} }
} }
Future<bool> onBackPressed(BuildContext context) {
if (_lastPressedAt == null ||
DateTime.now().difference(_lastPressedAt!) >
const Duration(seconds: 2)) {
// 两次点击时间间隔超过2秒重新记录时间戳
_lastPressedAt = DateTime.now();
SmartDialog.showToast("再按一次退出Pili");
return Future.value(false); // 不退出应用
}
return Future.value(true); // 退出应用
}
} }

View File

@ -110,7 +110,9 @@ class _MainAppState extends State<MainApp> with SingleTickerProviderStateMixin {
MediaQuery.of(context).size.width * 9 / 16; MediaQuery.of(context).size.width * 9 / 16;
localCache.put('sheetHeight', sheetHeight); localCache.put('sheetHeight', sheetHeight);
localCache.put('statusBarHeight', statusBarHeight); localCache.put('statusBarHeight', statusBarHeight);
return Scaffold( return WillPopScope(
onWillPop: () => _mainController.onBackPressed(context),
child: Scaffold(
extendBody: true, extendBody: true,
body: FadeTransition( body: FadeTransition(
opacity: _fadeAnimation!, opacity: _fadeAnimation!,
@ -160,6 +162,7 @@ class _MainAppState extends State<MainApp> with SingleTickerProviderStateMixin {
); );
}, },
), ),
),
); );
} }
} }