will_exit_after_2_back.dart 1.1 KB

123456789101112131415161718192021222324252627282930313233343536373839
  1. import 'dart:io';
  2. import 'package:flutter/material.dart';
  3. import 'package:get/get.dart';
  4. class WillExitAfter2BackController extends GetxController{
  5. DateTime? lastPressedAt; //上次点击时间
  6. }
  7. class WillExitAfter2Back extends GetView<WillExitAfter2BackController>{
  8. const WillExitAfter2Back({super.key, required this.child});
  9. final Widget child;
  10. @override
  11. Widget build(BuildContext context) {
  12. return GetBuilder<WillExitAfter2BackController>(
  13. init: WillExitAfter2BackController(),
  14. builder: (c){
  15. return WillPopScope(
  16. onWillPop: () async {
  17. if (c.lastPressedAt == null ||
  18. DateTime.now().difference(c.lastPressedAt!) > const Duration(seconds: 2)) {
  19. //两次点击间隔超过1秒则重新计时
  20. c.lastPressedAt = DateTime.now();
  21. ScaffoldMessenger.of(context).showSnackBar(SnackBar(
  22. content: const Text('再按一次退出'),
  23. duration: 2.seconds,
  24. ));
  25. return false;
  26. }
  27. // return true;
  28. exit(0);
  29. },
  30. child: child,
  31. );
  32. });
  33. }
  34. }