From 51ebeea554eae481b0d8c6da9d24994e7819aa14 Mon Sep 17 00:00:00 2001 From: nkloos <2020633@stud.hs-mannheim.de> Date: Tue, 6 Jun 2023 12:32:59 +0200 Subject: [PATCH] passwor reset, bild hochladen --- assets/images/password.png | Bin 0 -> 9730 bytes lib/forget_passwort/forget_pass_screen.dart | 136 +++++++++++++++----- lib/login_page/login_screen.dart | 3 +- lib/signup_page/signup_screen.dart | 3 +- 4 files changed, 104 insertions(+), 38 deletions(-) create mode 100644 assets/images/password.png diff --git a/assets/images/password.png b/assets/images/password.png new file mode 100644 index 0000000000000000000000000000000000000000..ca59c448bfb0979831045095a21c76038d271b35 GIT binary patch literal 9730 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 createState() => _ForgetPasswortState(); -} +import '../login_page/login_screen.dart'; +import '../services/global_variables.dart'; -class _ForgetPasswortState extends State { +class ForgetPasswort extends StatelessWidget { final TextEditingController _emailController = TextEditingController(); + final FirebaseAuth _auth = FirebaseAuth.instance; + + ForgetPasswort({Key? key}) : super(key: key); + + void _forgetPassSubmitForm(BuildContext context) async { + try { + await _auth.sendPasswordResetEmail( + email: _emailController.text, + ); + Navigator.pushReplacement( + context, + MaterialPageRoute(builder: (_) => Login()), + ); + } catch (error) { + Fluttertoast.showToast(msg: error.toString()); + } + } @override Widget build(BuildContext context) { + Size size = MediaQuery.of(context).size; + return Scaffold( - appBar: AppBar( - title: const Text('Passwort vergessen'), - ), - body: Padding( - padding: const EdgeInsets.all(16.0), - child: Column( - crossAxisAlignment: CrossAxisAlignment.stretch, - children: [ - const Text( - 'Geben Sie Ihre E-Mail-Adresse ein, um das Passwort zurückzusetzen:', - style: TextStyle(fontSize: 16), - ), - const SizedBox(height: 16), - TextFormField( - controller: _emailController, - keyboardType: TextInputType.emailAddress, - decoration: InputDecoration( - labelText: 'E-Mail-Adresse', - border: OutlineInputBorder(), + body: SingleChildScrollView( + child: Container( + height: size.height - 18, // Adjust for bottom overflow + child: Stack( + children: [ + Image.network( + signupUrlImage, + fit: BoxFit.cover, + width: double.infinity, + height: double.infinity, ), - ), - const SizedBox(height: 16), - ElevatedButton( - onPressed: () { - final email = _emailController.text; - // Fügen Sie hier den Code für das Zurücksetzen des Passworts hinzu - }, - child: const Text('Passwort zurücksetzen'), - ), - ], + Center( + child: Padding( + padding: const EdgeInsets.symmetric(horizontal: 16, vertical: 80), + child: Column( + mainAxisAlignment: MainAxisAlignment.center, + crossAxisAlignment: CrossAxisAlignment.stretch, + children: [ + Padding( + padding: const EdgeInsets.only(left: 80, right: 80), + child: Transform.scale( + scale: 0.8, // 20% smaller + child: Image.asset('assets/images/password.png'), + ), + ), + const SizedBox(height: 15), + const Text( + 'Geben Sie Ihre E-Mail-Adresse ein, um das Passwort zurückzusetzen:', + style: TextStyle(fontSize: 16), + ), + const SizedBox(height: 16), + TextFormField( + controller: _emailController, + style: TextStyle(color: Colors.white), + decoration: InputDecoration( + labelText: 'E-Mail', + filled: true, + fillColor: Colors.blueGrey.withOpacity(0.2), + errorBorder: const UnderlineInputBorder( + borderSide: BorderSide(color: Colors.red), + ), + ), + validator: (value) { + if (value!.isEmpty) { + return 'Bitte geben Sie Ihre E-Mail-Adresse ein'; + } + return null; + }, + ), + const SizedBox(height: 15), + ElevatedButton( + onPressed: () { + _forgetPassSubmitForm(context); + }, + style: ElevatedButton.styleFrom( + primary: Colors.cyan, + shape: RoundedRectangleBorder( + borderRadius: BorderRadius.circular(13), + ), + ), + child: Padding( + padding: EdgeInsets.symmetric(vertical: 14), + child: Text( + 'Reset Passwort', + style: TextStyle( + color: Colors.white, + fontWeight: FontWeight.bold, + ), + ), + ), + ), + ], + ), + ), + ), + ], + ), ), ), ); } -} +} \ No newline at end of file diff --git a/lib/login_page/login_screen.dart b/lib/login_page/login_screen.dart index ef08e31..67561f0 100644 --- a/lib/login_page/login_screen.dart +++ b/lib/login_page/login_screen.dart @@ -1,10 +1,11 @@ import 'package:cached_network_image/cached_network_image.dart'; -import 'package:cpd_ss23/ForgetPasswort/forget_pass_screen.dart'; +import 'package:cpd_ss23/forget_passwort/forget_pass_screen.dart'; import 'package:cpd_ss23/services/global_methods.dart'; import 'package:cpd_ss23/services/global_variables.dart'; import 'package:firebase_auth/firebase_auth.dart'; import 'package:flutter/material.dart'; +import '../forget_passwort/forget_pass_screen.dart'; import '../signup_page/signup_screen.dart'; class Login extends StatefulWidget { diff --git a/lib/signup_page/signup_screen.dart b/lib/signup_page/signup_screen.dart index 8a677b8..8c268c3 100644 --- a/lib/signup_page/signup_screen.dart +++ b/lib/signup_page/signup_screen.dart @@ -109,7 +109,7 @@ class _SignUpState extends State { 'createdAt': Timestamp.now(), }); - Navigator.canPop(context) ? Navigator.of(context) : null; + Navigator.canPop(context) ? Navigator.pop(context) : null; } catch (e) { // Handle any errors that occur during sign-up setState(){ @@ -117,7 +117,6 @@ class _SignUpState extends State { } GlobalMethod.showErrorDialog(error: e.toString(), ctx: context); } - setState(() { _isLoading = false; });