84 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			Dart
		
	
	
	
			
		
		
	
	
			84 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			Dart
		
	
	
	
| import 'package:flutter/material.dart';
 | |
| 
 | |
| import 'package:flutter_gen/gen_l10n/l10n.dart';
 | |
| import 'package:go_router/go_router.dart';
 | |
| 
 | |
| import 'package:fluffychat/pages/settings_password/settings_password_view.dart';
 | |
| import 'package:fluffychat/utils/localized_exception_extension.dart';
 | |
| import 'package:fluffychat/widgets/matrix.dart';
 | |
| 
 | |
| class SettingsPassword extends StatefulWidget {
 | |
|   const SettingsPassword({super.key});
 | |
| 
 | |
|   @override
 | |
|   SettingsPasswordController createState() => SettingsPasswordController();
 | |
| }
 | |
| 
 | |
| class SettingsPasswordController extends State<SettingsPassword> {
 | |
|   final TextEditingController oldPasswordController = TextEditingController();
 | |
|   final TextEditingController newPassword1Controller = TextEditingController();
 | |
|   final TextEditingController newPassword2Controller = TextEditingController();
 | |
| 
 | |
|   String? oldPasswordError;
 | |
|   String? newPassword1Error;
 | |
|   String? newPassword2Error;
 | |
| 
 | |
|   bool loading = false;
 | |
| 
 | |
|   void changePassword() async {
 | |
|     setState(() {
 | |
|       oldPasswordError = newPassword1Error = newPassword2Error = null;
 | |
|     });
 | |
|     if (oldPasswordController.text.isEmpty) {
 | |
|       setState(() {
 | |
|         oldPasswordError = L10n.of(context).pleaseEnterYourPassword;
 | |
|       });
 | |
|       return;
 | |
|     }
 | |
|     if (newPassword1Controller.text.isEmpty ||
 | |
|         newPassword1Controller.text.length < 6) {
 | |
|       setState(() {
 | |
|         newPassword1Error = L10n.of(context).pleaseChooseAStrongPassword;
 | |
|       });
 | |
|       return;
 | |
|     }
 | |
|     if (newPassword1Controller.text != newPassword2Controller.text) {
 | |
|       setState(() {
 | |
|         newPassword2Error = L10n.of(context).passwordsDoNotMatch;
 | |
|       });
 | |
|       return;
 | |
|     }
 | |
| 
 | |
|     setState(() {
 | |
|       loading = true;
 | |
|     });
 | |
|     try {
 | |
|       final scaffoldMessenger = ScaffoldMessenger.of(context);
 | |
|       await Matrix.of(context).client.changePassword(
 | |
|             newPassword1Controller.text,
 | |
|             oldPassword: oldPasswordController.text,
 | |
|           );
 | |
|       scaffoldMessenger.showSnackBar(
 | |
|         SnackBar(
 | |
|           content: Text(L10n.of(context).passwordHasBeenChanged),
 | |
|         ),
 | |
|       );
 | |
|       if (mounted) context.pop();
 | |
|     } catch (e) {
 | |
|       setState(() {
 | |
|         newPassword2Error = e.toLocalizedString(
 | |
|           context,
 | |
|           ExceptionContext.changePassword,
 | |
|         );
 | |
|       });
 | |
|     } finally {
 | |
|       setState(() {
 | |
|         loading = false;
 | |
|       });
 | |
|     }
 | |
|   }
 | |
| 
 | |
|   @override
 | |
|   Widget build(BuildContext context) => SettingsPasswordView(this);
 | |
| }
 |