app_version_widget.dart 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. import 'package:ente_auth/utils/dialog_util.dart';
  2. import 'package:flutter/material.dart';
  3. import 'package:package_info_plus/package_info_plus.dart';
  4. class AppVersionWidget extends StatefulWidget {
  5. const AppVersionWidget({
  6. Key? key,
  7. }) : super(key: key);
  8. @override
  9. State<AppVersionWidget> createState() => _AppVersionWidgetState();
  10. }
  11. class _AppVersionWidgetState extends State<AppVersionWidget> {
  12. static const kTapThresholdForInspector = 5;
  13. static const kConsecutiveTapTimeWindowInMilliseconds = 2000;
  14. static const kDummyDelayDurationInMilliseconds = 1500;
  15. int? _lastTap;
  16. int _consecutiveTaps = 0;
  17. @override
  18. Widget build(BuildContext context) {
  19. return GestureDetector(
  20. behavior: HitTestBehavior.translucent,
  21. onTap: () async {
  22. final int now = DateTime.now().millisecondsSinceEpoch;
  23. if (now - (_lastTap ?? now) < kConsecutiveTapTimeWindowInMilliseconds) {
  24. _consecutiveTaps++;
  25. if (_consecutiveTaps == kTapThresholdForInspector) {
  26. final dialog =
  27. createProgressDialog(context, "Starting network inspector...");
  28. await dialog.show();
  29. await Future.delayed(
  30. const Duration(milliseconds: kDummyDelayDurationInMilliseconds),
  31. );
  32. await dialog.hide();
  33. }
  34. } else {
  35. _consecutiveTaps = 1;
  36. }
  37. _lastTap = now;
  38. },
  39. child: FutureBuilder<String>(
  40. future: _getAppVersion(),
  41. builder: (context, snapshot) {
  42. if (snapshot.hasData) {
  43. return Padding(
  44. padding: const EdgeInsets.all(20),
  45. child: Text(
  46. "Version: " + snapshot.data!,
  47. style: Theme.of(context).textTheme.bodySmall,
  48. ),
  49. );
  50. }
  51. return Container();
  52. },
  53. ),
  54. );
  55. }
  56. Future<String> _getAppVersion() async {
  57. final pkgInfo = await PackageInfo.fromPlatform();
  58. return pkgInfo.version;
  59. }
  60. }