change password
continuous-integration/drone/push Build is passing
Details
continuous-integration/drone/push Build is passing
Details
parent
7b8a9182dd
commit
c2df7f2512
After Width: | Height: | Size: 3.4 KiB |
@ -0,0 +1,307 @@
|
||||
import 'package:firebase_auth/firebase_auth.dart';
|
||||
|
||||
import 'package:flutter/Material.dart';
|
||||
import 'package:flutter/cupertino.dart';
|
||||
import 'package:flutter/services.dart';
|
||||
import 'package:flutter_screenutil/flutter_screenutil.dart';
|
||||
import 'package:google_fonts/google_fonts.dart';
|
||||
import 'package:justmusic/main.dart';
|
||||
|
||||
import '../values/constants.dart';
|
||||
|
||||
class ChangePasswordScreen extends StatefulWidget {
|
||||
const ChangePasswordScreen({super.key});
|
||||
|
||||
@override
|
||||
State<ChangePasswordScreen> createState() => _ChangePasswordScreenState();
|
||||
}
|
||||
|
||||
class _ChangePasswordScreenState extends State<ChangePasswordScreen> {
|
||||
final _currentPasswordTextField = TextEditingController();
|
||||
final _newPasswordTextField = TextEditingController();
|
||||
final _confirmPasswordTextField = TextEditingController();
|
||||
final _formKey = GlobalKey<FormState>();
|
||||
Future<void> resetFullScreen() async {
|
||||
await SystemChannels.platform.invokeMethod<void>(
|
||||
'SystemChrome.restoreSystemUIOverlays',
|
||||
);
|
||||
}
|
||||
|
||||
handleChange() async {
|
||||
print("test");
|
||||
if (_formKey.currentState!.validate()) {
|
||||
var error;
|
||||
try {
|
||||
await FirebaseAuth.instance.signInWithEmailAndPassword(
|
||||
email: MyApp.userViewModel.userCurrent.mail,
|
||||
password: _currentPasswordTextField.text,
|
||||
);
|
||||
if (_newPasswordTextField.text == _confirmPasswordTextField.text) {
|
||||
await FirebaseAuth.instance.currentUser?.updatePassword(_confirmPasswordTextField.text);
|
||||
ScaffoldMessenger.of(context).showSnackBar(
|
||||
SnackBar(
|
||||
content: Text(
|
||||
"Mot de passe mis à jour",
|
||||
style: GoogleFonts.plusJakartaSans(color: Colors.white, fontWeight: FontWeight.w400, fontSize: 15.h),
|
||||
),
|
||||
backgroundColor: primaryColor,
|
||||
closeIconColor: Colors.white,
|
||||
),
|
||||
);
|
||||
} else {
|
||||
throw FirebaseAuthException(code: "not-same", message: "Les mots de passe ne correspondent pas");
|
||||
}
|
||||
} on FirebaseAuthException catch (e) {
|
||||
if (e.code == "wrong-password") {
|
||||
error = "Mot de passe incorrect";
|
||||
} else if (e.code == "too-many-requests") {
|
||||
error = "Trop de tentatives infructueuses. Veuillez réessayer plus tard";
|
||||
} else if (e.code == "channel-error") {
|
||||
error = "Impossible de vérifier le mot de passe";
|
||||
} else if (e.code == "weak-password") {
|
||||
error = "Le mot de passe doit contenir 6 caractères minimum";
|
||||
}
|
||||
ScaffoldMessenger.of(context).showSnackBar(
|
||||
SnackBar(
|
||||
content: Text(
|
||||
error ?? e.message,
|
||||
style: GoogleFonts.plusJakartaSans(color: Colors.white, fontWeight: FontWeight.w400, fontSize: 15.h),
|
||||
),
|
||||
backgroundColor: Colors.red,
|
||||
closeIconColor: Colors.white,
|
||||
),
|
||||
);
|
||||
}
|
||||
setState(() {
|
||||
_currentPasswordTextField.clear();
|
||||
_newPasswordTextField.clear();
|
||||
_confirmPasswordTextField.clear();
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return GestureDetector(
|
||||
onTap: () {
|
||||
FocusScopeNode currentFocus = FocusScope.of(context);
|
||||
if (!currentFocus.hasPrimaryFocus) {
|
||||
currentFocus.unfocus();
|
||||
resetFullScreen();
|
||||
}
|
||||
},
|
||||
child: Scaffold(
|
||||
appBar: PreferredSize(
|
||||
preferredSize: Size(double.infinity, 58),
|
||||
child: Container(
|
||||
height: double.infinity,
|
||||
color: bgAppBar,
|
||||
child: Padding(
|
||||
padding: const EdgeInsets.symmetric(horizontal: defaultPadding),
|
||||
child: Stack(
|
||||
alignment: Alignment.centerLeft,
|
||||
children: [
|
||||
GestureDetector(
|
||||
behavior: HitTestBehavior.translucent,
|
||||
onTap: () {
|
||||
Navigator.pop(context, true);
|
||||
},
|
||||
child: Container(
|
||||
padding: EdgeInsets.symmetric(horizontal: 10),
|
||||
height: 30,
|
||||
width: 30,
|
||||
child: Image(
|
||||
image: AssetImage("assets/images/return_icon.png"),
|
||||
height: 8,
|
||||
),
|
||||
)),
|
||||
Align(
|
||||
child: Text(
|
||||
"Mettre le mot de passe à jour",
|
||||
style:
|
||||
GoogleFonts.plusJakartaSans(color: Colors.white, fontSize: 14, fontWeight: FontWeight.bold),
|
||||
),
|
||||
)
|
||||
],
|
||||
),
|
||||
),
|
||||
),
|
||||
),
|
||||
body: Container(
|
||||
width: double.infinity,
|
||||
height: double.infinity,
|
||||
color: bgColor,
|
||||
child: SingleChildScrollView(
|
||||
physics: const BouncingScrollPhysics(decelerationRate: ScrollDecelerationRate.fast),
|
||||
child: Padding(
|
||||
padding: const EdgeInsets.symmetric(horizontal: settingPadding),
|
||||
child: Column(
|
||||
mainAxisAlignment: MainAxisAlignment.start,
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
children: [
|
||||
Padding(
|
||||
padding: EdgeInsets.only(top: 30, bottom: 40),
|
||||
child: SizedBox(
|
||||
width: double.infinity,
|
||||
child: Form(
|
||||
key: _formKey,
|
||||
child: Stack(
|
||||
alignment: Alignment.center,
|
||||
children: [
|
||||
Column(
|
||||
children: [
|
||||
Row(
|
||||
mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
||||
children: [
|
||||
Flexible(
|
||||
child: Padding(
|
||||
padding: const EdgeInsets.only(right: 10),
|
||||
child: Text(
|
||||
"Mot de passe actuel",
|
||||
style: GoogleFonts.plusJakartaSans(
|
||||
color: Colors.white, fontWeight: FontWeight.w800, fontSize: 16),
|
||||
),
|
||||
)),
|
||||
Expanded(
|
||||
child: TextFormField(
|
||||
controller: _currentPasswordTextField,
|
||||
decoration: InputDecoration(
|
||||
enabledBorder: OutlineInputBorder(
|
||||
borderSide: const BorderSide(color: Colors.transparent),
|
||||
),
|
||||
// Hides the border when you click the TextField
|
||||
focusedBorder: OutlineInputBorder(
|
||||
borderSide: const BorderSide(color: Colors.transparent),
|
||||
),
|
||||
// Hides the border when the TextField is disabled
|
||||
disabledBorder: OutlineInputBorder(
|
||||
borderSide: const BorderSide(color: Colors.transparent),
|
||||
),
|
||||
filled: true,
|
||||
hintText: '6 caractères minimum',
|
||||
hintStyle: GoogleFonts.plusJakartaSans(color: strokeTextField)),
|
||||
maxLines: 1,
|
||||
obscureText: true,
|
||||
cursorColor: primaryColor,
|
||||
style: GoogleFonts.plusJakartaSans(
|
||||
color: grayText, fontWeight: FontWeight.w400, fontSize: 16),
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
SizedBox(
|
||||
height: 10,
|
||||
),
|
||||
Row(
|
||||
mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
||||
children: [
|
||||
Flexible(
|
||||
child: Padding(
|
||||
padding: const EdgeInsets.only(right: 10),
|
||||
child: Text(
|
||||
"Nouveau mot de passe",
|
||||
style: GoogleFonts.plusJakartaSans(
|
||||
color: Colors.white, fontWeight: FontWeight.w800, fontSize: 16),
|
||||
),
|
||||
)),
|
||||
Expanded(
|
||||
child: TextField(
|
||||
controller: _newPasswordTextField,
|
||||
decoration: InputDecoration(
|
||||
enabledBorder: OutlineInputBorder(
|
||||
borderSide: const BorderSide(color: Colors.transparent),
|
||||
),
|
||||
// Hides the border when you click the TextField
|
||||
focusedBorder: OutlineInputBorder(
|
||||
borderSide: const BorderSide(color: Colors.transparent),
|
||||
),
|
||||
// Hides the border when the TextField is disabled
|
||||
disabledBorder: OutlineInputBorder(
|
||||
borderSide: const BorderSide(color: Colors.transparent),
|
||||
),
|
||||
filled: true,
|
||||
hintText: '6 caractères minimum',
|
||||
hintStyle: GoogleFonts.plusJakartaSans(color: strokeTextField)),
|
||||
maxLines: 1,
|
||||
obscureText: true,
|
||||
cursorColor: primaryColor,
|
||||
style: GoogleFonts.plusJakartaSans(
|
||||
color: grayText, fontWeight: FontWeight.w400, fontSize: 16),
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
SizedBox(
|
||||
height: 10,
|
||||
),
|
||||
Row(
|
||||
mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
||||
children: [
|
||||
Flexible(
|
||||
child: Padding(
|
||||
padding: const EdgeInsets.only(right: 10),
|
||||
child: Text(
|
||||
"Confirmer",
|
||||
style: GoogleFonts.plusJakartaSans(
|
||||
color: Colors.white, fontWeight: FontWeight.w800, fontSize: 16),
|
||||
),
|
||||
)),
|
||||
Expanded(
|
||||
child: TextField(
|
||||
obscureText: true,
|
||||
controller: _confirmPasswordTextField,
|
||||
decoration: InputDecoration(
|
||||
enabledBorder: OutlineInputBorder(
|
||||
borderSide: const BorderSide(color: Colors.transparent),
|
||||
),
|
||||
// Hides the border when you click the TextField
|
||||
focusedBorder: OutlineInputBorder(
|
||||
borderSide: const BorderSide(color: Colors.transparent),
|
||||
),
|
||||
// Hides the border when the TextField is disabled
|
||||
disabledBorder: OutlineInputBorder(
|
||||
borderSide: const BorderSide(color: Colors.transparent),
|
||||
),
|
||||
filled: true,
|
||||
hintText: '6 caractères minimum',
|
||||
hintStyle: GoogleFonts.plusJakartaSans(color: strokeTextField)),
|
||||
maxLines: 1,
|
||||
cursorColor: primaryColor,
|
||||
style: GoogleFonts.plusJakartaSans(
|
||||
color: grayText, fontWeight: FontWeight.w400, fontSize: 16),
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
],
|
||||
)
|
||||
],
|
||||
),
|
||||
),
|
||||
),
|
||||
),
|
||||
GestureDetector(
|
||||
onTap: handleChange,
|
||||
child: Align(
|
||||
child: Container(
|
||||
height: 35,
|
||||
width: 160,
|
||||
decoration:
|
||||
BoxDecoration(color: primaryColor, borderRadius: BorderRadius.all(Radius.circular(10))),
|
||||
child: Center(
|
||||
child: Text(
|
||||
"Mettre à jour",
|
||||
style: GoogleFonts.plusJakartaSans(color: Colors.white),
|
||||
),
|
||||
),
|
||||
),
|
||||
),
|
||||
)
|
||||
],
|
||||
),
|
||||
),
|
||||
),
|
||||
),
|
||||
));
|
||||
}
|
||||
}
|
Loading…
Reference in new issue