page.dart 2.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  1. import 'dart:async';
  2. import 'package:flutter/material.dart';
  3. import 'package:go_router/go_router.dart';
  4. import 'package:maxkey_flutter/maxkey/maxkey.dart';
  5. import 'package:maxkey_flutter/maxkey/services/users.service.dart';
  6. import 'package:maxkey_flutter/persistent.dart';
  7. import 'package:maxkey_flutter/repeat_tween_animation_builder.dart';
  8. import 'package:maxkey_flutter/totp.dart';
  9. import 'package:maxkey_flutter/utils.dart';
  10. import 'package:flutter_gen/gen_l10n/app_localizations.dart';
  11. part 'package:maxkey_flutter/pages/home_page/components/new_totp_btn.dart';
  12. part 'package:maxkey_flutter/pages/home_page/components/totp_list_view.dart';
  13. part 'package:maxkey_flutter/pages/home_page/components/user_card.dart';
  14. class HomePage extends StatefulWidget {
  15. const HomePage({super.key});
  16. @override
  17. State<HomePage> createState() => _HomePageState();
  18. }
  19. class _HomePageState extends State<HomePage> {
  20. var profile = MaxKey.instance.usersService.getBasicUserInfo();
  21. final controller = _TotpListViewController();
  22. void _update() {
  23. setState(() {
  24. profile = MaxKey.instance.usersService.getBasicUserInfo();
  25. });
  26. }
  27. @override
  28. void initState() {
  29. super.initState();
  30. MaxKey.instance.addListener(_update);
  31. }
  32. @override
  33. void dispose() {
  34. super.dispose();
  35. MaxKey.instance.removeListener(_update);
  36. }
  37. @override
  38. Widget build(BuildContext context) {
  39. return Scaffold(
  40. body: SafeArea(
  41. child: Padding(
  42. padding: const EdgeInsets.all(16.0),
  43. child: Column(
  44. children: [
  45. FutureBuilder(
  46. future: profile,
  47. builder: (context, snapshot) {
  48. if (snapshot.data == null) {
  49. return const _LoadingUserCard();
  50. }
  51. return _UserCard(user: snapshot.data!);
  52. },
  53. ),
  54. const SizedBox(height: 8),
  55. _NewTotpBtn(controller: controller),
  56. const SizedBox(height: 8),
  57. _TotpListView(controller: controller),
  58. ],
  59. ),
  60. ),
  61. ),
  62. );
  63. }
  64. }