how_it_works.dart 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. import 'package:flutter/material.dart';
  2. import 'package:introduction_screen/introduction_screen.dart';
  3. import '../l10n/app_localizations.dart';
  4. class HowItWorksPage extends StatelessWidget {
  5. const HowItWorksPage({super.key});
  6. List<PageViewModel> _getPages(BuildContext context) {
  7. return [
  8. PageViewModel(
  9. title: AppLocalizations.of(context)?.howItWorksTitle1 ?? 'Secure your accounts',
  10. body: AppLocalizations.of(context)?.howItWorksBody1 ?? 'Add your accounts to generate time-based one-time passwords (TOTP) for secure sign-in.',
  11. image: const Icon(Icons.security, size: 120, color: Colors.blue),
  12. ),
  13. PageViewModel(
  14. title: AppLocalizations.of(context)?.howItWorksTitle2 ?? 'Scan QR codes',
  15. body: AppLocalizations.of(context)?.howItWorksBody2 ?? 'Easily add new accounts by scanning QR codes provided by your services.',
  16. image: const Icon(Icons.qr_code_scanner, size: 120, color: Colors.green),
  17. ),
  18. PageViewModel(
  19. title: AppLocalizations.of(context)?.howItWorksTitle3 ?? 'Backup & Restore',
  20. body: AppLocalizations.of(context)?.howItWorksBody3 ?? 'Backup your accounts securely and restore them when needed.',
  21. image: const Icon(Icons.backup, size: 120, color: Colors.orange),
  22. ),
  23. PageViewModel(
  24. title: AppLocalizations.of(context)?.howItWorksTitle4 ?? 'Offline & Private',
  25. body: AppLocalizations.of(context)?.howItWorksBody4 ?? 'All data stays on your device. No internet required for generating codes.',
  26. image: const Icon(Icons.lock, size: 120, color: Colors.purple),
  27. ),
  28. ];
  29. }
  30. @override
  31. Widget build(BuildContext context) {
  32. return IntroductionScreen(
  33. pages: _getPages(context),
  34. showSkipButton: true,
  35. skip: Text(AppLocalizations.of(context)?.skip ?? 'Skip'),
  36. next: const Icon(Icons.arrow_forward),
  37. done: Text(AppLocalizations.of(context)?.done ?? 'Done', style: const TextStyle(fontWeight: FontWeight.w600)),
  38. onDone: () => Navigator.of(context).pop(),
  39. onSkip: () => Navigator.of(context).pop(),
  40. dotsDecorator: const DotsDecorator(
  41. size: Size(10.0, 10.0),
  42. color: Colors.black26,
  43. activeSize: Size(22.0, 10.0),
  44. activeColor: Colors.blue,
  45. activeShape: RoundedRectangleBorder(
  46. borderRadius: BorderRadius.all(Radius.circular(25.0)),
  47. ),
  48. ),
  49. );
  50. }
  51. }