Verify email done
continuous-integration/drone/push Build is passing Details

VERIFY_MAIL_EKA
Emre KARTAL 2 years ago
parent ebc09e5969
commit 02dc68e458

@ -16,6 +16,7 @@ import 'package:justmusic/screens/launching_rocker_screen.dart';
import 'package:justmusic/screens/post_screen.dart';
import 'package:justmusic/screens/profile_screen.dart';
import 'package:justmusic/screens/registration_screen.dart';
import 'package:justmusic/screens/verify_email_screen.dart';
import 'package:justmusic/screens/welcome_screen.dart';
import 'package:justmusic/view_model/CommentViewModel.dart';
import 'package:justmusic/view_model/MusicViewModel.dart';
@ -100,6 +101,7 @@ class _MyAppState extends State<MyApp> {
'/explanation': (context) => const ExplanationsScreen(),
'/addFriend': (context) => const AddFriendScreen(),
'/launchingRocket': (context) => const LaunchingRocketScreen(),
'/verifyEmail': (context) => const VerifyEmailScreen(),
},
debugShowCheckedModeBanner: false,
theme: ThemeData(

@ -31,7 +31,7 @@ class _RegistrationScreenState extends State<RegistrationScreen> {
if (_formKey.currentState!.validate()) {
try {
await MyApp.userViewModel.register(_userPseudoTextField.text, _passwordTextField.text, _userMailTextField.text);
Navigator.pushNamed(context, '/explanation');
Navigator.pushNamed(context, '/verifyEmail');
} catch (e) {
ScaffoldMessenger.of(context).showSnackBar(
SnackBar(

@ -0,0 +1,120 @@
import 'dart:async';
import 'package:firebase_auth/firebase_auth.dart';
import 'package:flutter/Material.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:google_fonts/google_fonts.dart';
import 'package:justmusic/main.dart';
class VerifyEmailScreen extends StatefulWidget {
const VerifyEmailScreen({Key? key}) : super(key: key);
@override
State<VerifyEmailScreen> createState() => _VerifyEmailScreenState();
}
class _VerifyEmailScreenState extends State<VerifyEmailScreen> {
bool isEmailVerified = false;
bool canResendEmail = false;
Timer? timer;
@override
void initState() {
super.initState();
isEmailVerified = FirebaseAuth.instance.currentUser!.emailVerified;
if (!isEmailVerified) {
sendVerificationEmail();
timer = Timer.periodic(
Duration(seconds: 3),
(_) => checkEmailVerified(),
);
}
}
@override
void dispose() {
timer?.cancel();
super.dispose();
}
Future checkEmailVerified() async {
await FirebaseAuth.instance.currentUser!.reload();
setState(() {
isEmailVerified = FirebaseAuth.instance.currentUser!.emailVerified;
});
if (isEmailVerified) timer?.cancel();
}
cancel() {
Navigator.pushNamed(context, '/welcome');
MyApp.userViewModel.delete();
}
Future sendVerificationEmail() async {
try {
final user = FirebaseAuth.instance.currentUser!;
await user.sendEmailVerification();
setState(() => canResendEmail = false);
await Future.delayed(Duration(minutes: 1));
setState(() => canResendEmail = true);
} catch (e) {
ScaffoldMessenger.of(context).showSnackBar(
SnackBar(
content: Text(
e.toString() ?? "",
style: GoogleFonts.plusJakartaSans(
color: Colors.white,
fontWeight: FontWeight.w400,
fontSize: 20.h),
),
backgroundColor: Colors.red,
),
);
}
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Verify Email'),
),
body: Padding(
padding: EdgeInsets.all(16),
child:
Column(mainAxisAlignment: MainAxisAlignment.center, children: [
Text('A verification email has been sent to your email.',
style: TextStyle(fontSize: 20), textAlign: TextAlign.center),
SizedBox(height: 24),
ElevatedButton.icon(
style: ElevatedButton.styleFrom(
minimumSize: Size.fromHeight(50),
),
icon: Icon(Icons.email, size: 32),
label: Text(
'ResentEmail',
style: TextStyle(fontSize: 24),
),
onPressed: canResendEmail ? sendVerificationEmail : null,
),
SizedBox(height: 8),
TextButton(
style: ElevatedButton.styleFrom(
minimumSize: Size.fromHeight(50),
),
child: Text(
'Cancel',
style: TextStyle(fontSize: 24),
),
onPressed: cancel,
)
])));
}
}

@ -103,7 +103,6 @@ class AuthService {
await currentUser?.delete();
await FirebaseAuth.instance.signOut();
} on FirebaseAuthException catch (e) {
if (e.code == 'requires-recent-login') {
throw ('Please log in again to delete your account');

@ -35,13 +35,17 @@ class UserViewModel {
try {
var token;
await authService.login(pseudo, password);
await updateUserCurrent();
if (!kIsWeb) {
token = await FirebaseMessaging.instance.getToken();
if (_userCurrent.token != token) {
_userService.updateTokenNotify(_userCurrent.id, token);
_userCurrent.token = token;
if (firebase_auth.FirebaseAuth.instance.currentUser!.emailVerified) {
await updateUserCurrent();
if (!kIsWeb) {
token = await FirebaseMessaging.instance.getToken();
if (_userCurrent.token != token) {
_userService.updateTokenNotify(_userCurrent.id, token);
_userCurrent.token = token;
}
}
} else {
throw ("Le mail n'a pas encore été vérifié");
}
} catch (e) {
rethrow;

Loading…
Cancel
Save