app_version_widget.dart 1.6 KB

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