page.dart 2.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. import 'dart:async';
  2. import 'dart:typed_data';
  3. import 'package:flutter/material.dart';
  4. import 'package:go_router/go_router.dart';
  5. import 'package:maxkey_flutter/maxkey/maxkey.dart';
  6. import 'package:maxkey_flutter/utils.dart';
  7. import 'package:flutter_gen/gen_l10n/app_localizations.dart';
  8. part 'package:maxkey_flutter/pages/login_page/components/captcha_view.dart';
  9. part 'package:maxkey_flutter/pages/login_page/components/login_view.dart';
  10. class LoginPage extends StatefulWidget {
  11. const LoginPage({super.key});
  12. @override
  13. State<LoginPage> createState() => _LoginPageState();
  14. }
  15. class _LoginPageState extends State<LoginPage> {
  16. var loginGetFuture = MaxKey.instance.authnService.get();
  17. void _update() {
  18. setState(() {
  19. loginGetFuture = MaxKey.instance.authnService.get();
  20. });
  21. }
  22. @override
  23. void initState() {
  24. super.initState();
  25. MaxKey.instance.addListener(_update);
  26. }
  27. @override
  28. void dispose() {
  29. super.dispose();
  30. MaxKey.instance.removeListener(_update);
  31. }
  32. @override
  33. Widget build(BuildContext context) {
  34. return Scaffold(
  35. body: Center(
  36. child: SingleChildScrollView(
  37. child: Padding(
  38. padding: const EdgeInsets.all(16.0),
  39. child: Column(
  40. mainAxisAlignment: MainAxisAlignment.center,
  41. crossAxisAlignment: CrossAxisAlignment.center,
  42. children: [
  43. Image.asset("assets/logo_maxkey.png"),
  44. const SizedBox(height: 32.0),
  45. FutureBuilder(
  46. future: loginGetFuture,
  47. builder: (context, snapshot) {
  48. if (snapshot.data == null) {
  49. return const SizedBox(
  50. width: 24,
  51. height: 24,
  52. child: CircularProgressIndicator(),
  53. );
  54. }
  55. return _NormalLoginView(loginState: snapshot.data!);
  56. },
  57. ),
  58. const SizedBox(height: 8.0),
  59. TextButton(
  60. onPressed: () {
  61. context.push(RoutePath.settingsPage);
  62. },
  63. child: Text(AppLocalizations.of(context)!.loginPageSettingBtn),
  64. ),
  65. ],
  66. ),
  67. ),
  68. ),
  69. ),
  70. );
  71. }
  72. }