mine_page.dart 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101
  1. import 'package:flutter/material.dart';
  2. import 'package:flutter_riverpod/flutter_riverpod.dart';
  3. import 'package:go_router/go_router.dart';
  4. import 'package:sino_med_cloud/l10n/app_localizations.dart';
  5. import '../../main_tab_provider.dart';
  6. import '../../auth/data/login_provider.dart';
  7. import '../data/change_password_provider.dart';
  8. import '../domain/mine_service.dart';
  9. import 'change_password_page.dart';
  10. class MinePage extends ConsumerStatefulWidget {
  11. const MinePage({super.key});
  12. @override
  13. ConsumerState<MinePage> createState() => _MinePageState();
  14. }
  15. class _MinePageState extends ConsumerState<MinePage>
  16. with SingleTickerProviderStateMixin {
  17. @override
  18. Widget build(BuildContext context) {
  19. final l10n = AppLocalizations.of(context)!;
  20. return Scaffold(
  21. appBar: AppBar(
  22. title: Text(l10n.mine),
  23. elevation: 0,
  24. ),
  25. body: ListView.builder(
  26. itemCount: 2,
  27. itemBuilder: (BuildContext context, int index) {
  28. if (index == 0) {
  29. return ListTile(
  30. leading: const Icon(Icons.lock_outline),
  31. title: Text(l10n.changePassword),
  32. trailing: const Icon(Icons.chevron_right),
  33. onTap: _handleChangePassword,
  34. );
  35. } else if (index == 1) {
  36. return ListTile(
  37. leading: const Icon(Icons.logout, color: Colors.red),
  38. title: Text(
  39. l10n.logout,
  40. style: const TextStyle(color: Colors.red),
  41. ),
  42. trailing: const Icon(Icons.chevron_right),
  43. onTap: _handleLogout,
  44. );
  45. }
  46. return const SizedBox.shrink();
  47. },
  48. ),
  49. );
  50. }
  51. // 退出登录
  52. void _handleLogout() async {
  53. await MineService.logout(loginSystem: "YUN_HIS_PC_WEB");
  54. // 重置主页 Tab 索引
  55. ref.read(currentTabIndexProvider.notifier).state = 0;
  56. // 重置登录页面状态
  57. ref.read(loginTabIndexProvider.notifier).state = 0;
  58. ref.read(passwordObscureProvider.notifier).state = true;
  59. ref.read(smsCountdownProvider.notifier).state = 0;
  60. ref.read(smsHasReceivedProvider.notifier).state = false;
  61. ref.read(smsCodeFromServerProvider.notifier).state = '';
  62. ref.read(passwordLoginPhoneProvider.notifier).state = '';
  63. ref.read(passwordLoginPasswordProvider.notifier).state = '';
  64. ref.read(smsLoginPhoneProvider.notifier).state = '';
  65. ref.read(smsLoginCodeProvider.notifier).state = '';
  66. Future.microtask(() {
  67. if (mounted) {
  68. context.replace('/');
  69. }
  70. });
  71. }
  72. void _handleChangePassword() {
  73. if (mounted) {
  74. // 打开对话框前重置所有状态,确保每次打开都是干净的
  75. ref.read(changePwdPhoneProvider.notifier).state = '';
  76. ref.read(changePwdServerSmsCodeProvider.notifier).state = '';
  77. ref.read(changePwdPasswordProvider.notifier).state = '';
  78. ref.read(changePwdPasswordVisibleProvider.notifier).state = false;
  79. ref.read(changePwdConfirmPasswordProvider.notifier).state = '';
  80. ref.read(changePwdConfirmPasswordVisibleProvider.notifier).state = false;
  81. ref.read(changePwdSmsHasSentProvider.notifier).state = false;
  82. ref.read(changePwdSmsCountdownProvider.notifier).state = 0;
  83. ref.read(changePwdShowPasswordErrorProvider.notifier).state = false;
  84. showDialog(
  85. context: context,
  86. builder: (context) => const ChangePasswordPage(),
  87. );
  88. }
  89. }
  90. }