Validation des e-mails dans Flutter
Sommaire
- 1- Objectif
- 2- Présentation
- 3- Validation des e-mails Flutter à l'aide d'une expression régulière
- 3.1.1- Code de l'exemple
- 3.1.2- Résultat après exécution
- 3.1.3- Code de l'exemple
- 3.1.4- Résultat après exécution
- 4- Utiliser
email_validator
pour valider un email - 4.1- Ajout d'
email_validator
dans le fichier pubspec.yaml - 4.2- Importez le package
email_validator
dans le fichier main.dart. - 4.3- Validation de l'adresse e-mail avec
email_validator
: - 4.3.1- Cours Flutter
Validation des e-mails dans Flutter
-
Objectif
- Cet article explique comment valider un e-mail TextField en flutter.
-
Présentation
- La validation des e-mails est une partie importante de chaque application qui utilise l’authentification dans l’application.
- Voici les règles pour une adresse e-mail valide.
- L’e-mail comporte différentes parties valides – nom de l’expéditeur, symbole @ et nom de domaine
- Les noms de destinataire et de domaine peuvent contenir des chiffres en minuscules et en majuscules
- Le nom de domaine contient une extension séparée par un point (.)
- Les caractères spéciaux sont autorisés dans le nom de l’expéditeur
- La longueur du nom de l’expéditeur est de 64 caractères
- Le nom de domaine est de 256 caractères
- Pour vérifier l’adresse e-mail, nous pouvons utiliser un modèle regEx, qui est un peu plus complexe à construire.
- Au lieu d’utiliser le modèle regEx (expressions régulières), nous pouvons utiliser le package le plus cool de pub.dev appelé
email_validator
pour obtenir le même résultat. Dans cet article, nous allons nous intéresser au packageemail_validator
. email_validator
est une simple classe Dart pour valider les adresses e-mail sans utiliser RegEx.-
Validation des e-mails Flutter à l’aide d’une expression régulière
- Pour valider des e-mails dans Flutter, vous pouvez utiliser une expression régulière pour vérifier le format de l’adresse e-mail. Voici un exemple de code :
- Ce code vérifie si l’adresse e-mail correspond au format standard de l’adresse e-mail (xxx@yyy.zzz).
- Dans l’exemple suivant, nous utiliserons RegExp pour valider le champ de texte de l’e-mail . Il s’agira d’un formulaire de validation d’e-mail en temps réel lorsque l’utilisateur tape dans le formulaire. Nous vérifierons la validation pour chaque chaîne saisie par l’utilisateur.
-
Code de l’exemple
-
Résultat après exécution
- Dans l’exemple suivant, nous utiliserons RegExp pour valider le champ de texte de l’e-mail . Il s’agira d’un formulaire de validation d’e-mail avec un bouton lorsque l’utilisateur tape dans le formulaire. Nous vérifierons la validation après l’appuie sur le bouton.
-
Code de l’exemple
-
Résultat après exécution
-
Utiliser
email_validator
pour valider un email -
Ajout d’
email_validator
dans le fichier pubspec.yaml - Ajoutez le plugin
email_validator
dans les dépendances du fichier pubspec.yaml. Cliquez ensuite sur la pub pour arriver en haut. -
Importez le package
email_validator
dans le fichier main.dart. - Nous pouvons l’utiliser dans notre code Dart après avoir installé le package.
-
Validation de l’adresse e-mail avec
email_validator
: - La méthode statique validate() de la classe
EmailValidator
sera utilisée pour valider l’adresse e-mail. Il renvoie une valeur booléenne ; si l’adresse e-mail est valide, la valeur renvoyée est true ; sinon, la valeur renvoyée est fausse. - Dans l’exemple ci-dessus, on a passé simplement l’adresse e-mail sous forme de chaîne à validate(..) , qui renvoie une valeur booléenne.
- On a déclaré une variable constante nommée « email » qui a la valeur d’un email de test.
- Et une autre variable nommée « isValid » qui est de type de données booléenne contient la valeur
EmailValidator.validate(email)
. - Le Emailvalidator.validate(email) renverra une valeur booléenne, si l’e-mail est correct ou valide, il renverra vrai, sinon il renverra faux. Le résultat est stocké dans la variable isValid , que nous pouvons utiliser pour notre validation.
String email = ...;
String pattern = r'^(([^<>()[\]\\.,;:\s@\"]+(\.[^<>()[\]\\.,;:\s@\"]+)*)|(\".+\"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$';
RegExp regExp = RegExp(pattern);
if(regExp.hasMatch(email)) {
print('Email valide');
} else {
print('Email non valide');
}
Afficher le code
import 'package:flutter/material.dart';
void main() {
runApp(const MyApp());
}
class MyApp extends StatelessWidget {
const MyApp({Key? key}) : super(key: key);
// This widget is the root of your application.
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Validation d\'émail',
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: const MyHomePage(),
);
}
}
class MyHomePage extends StatefulWidget {
const MyHomePage({Key? key}) : super(key: key);
@override
_MyHomePageState createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
final GlobalKey<FormState> _formkey = GlobalKey<FormState>();
//TextController to read text entered in text field
TextEditingController textEditingControllerEmail = TextEditingController();
@override
Widget build(BuildContext context) {
return Scaffold(
body: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
Form(
key: _formkey,
child: Padding(
padding: const EdgeInsets.only(bottom: 15, left: 10, right: 10),
child: TextFormField(
controller: textEditingControllerEmail,
onChanged: (val) {
_formkey.currentState?.validate();
},
keyboardType: TextInputType.text,
decoration: buildInputDecoration(Icons.email, "Email"),
validator: (value) {
//print(value);
if (value!.isEmpty) {
return "Veuillez saisir un e-mail";
//r'\S+@\S+\.\S+'
} else if (!RegExp(
r'^(([^<>()[\]\\.,;:\s@\"]+(\.[^<>()[\]\\.,;:\s@\"]+)*)|(\".+\"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$')
.hasMatch(value)) {
return "Veuillez saisir un e-mail valide";
}
return null;
},
),
),
),
],
),
);
}
}
// TextFormField Border Decoration
InputDecoration buildInputDecoration(IconData icons, String hinttext) {
return InputDecoration(
hintText: hinttext,
prefixIcon: Icon(icons),
focusedBorder: OutlineInputBorder(
borderRadius: BorderRadius.circular(15.0),
borderSide: const BorderSide(color: Colors.green, width: 1.5),
),
border: OutlineInputBorder(
borderRadius: BorderRadius.circular(15.0),
borderSide: const BorderSide(
color: Colors.blue,
width: 1.5,
),
),
enabledBorder: OutlineInputBorder(
borderRadius: BorderRadius.circular(15.0),
borderSide: const BorderSide(
color: Colors.blue,
width: 1.5,
),
),
);
}
Afficher le code
import 'package:flutter/material.dart';
void main() {
runApp(const MyApp());
}
class MyApp extends StatelessWidget {
const MyApp({Key? key}) : super(key: key);
@override
Widget build(BuildContext context) {
return MaterialApp(
// Hide the debug banner
debugShowCheckedModeBanner: false,
title: 'validation Email',
theme: ThemeData.light(),
home: const HomePage(),
);
}
}
class HomePage extends StatefulWidget {
const HomePage({Key? key}) : super(key: key);
@override
State<HomePage> createState() => _HomePageState();
}
class _HomePageState extends State<HomePage> {
final _form = GlobalKey<FormState>();
bool _isValid = false;
void _saveForm() {
setState(() {
_isValid = _form.currentState!.validate();
});
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: const Text('Validation d\'Email avec RegExp'),
),
body: Padding(
padding: const EdgeInsets.all(25),
// the Form here
child: Form(
key: _form,
child: Column(
children: [
TextFormField(
//decoration:
//const InputDecoration(labelText: 'Enter your email'),
decoration:
buildInputDecoration(Icons.email, "Entrer votre Email"),
keyboardType: TextInputType.emailAddress,
validator: (value) {
// Check if this field is empty
if (value == null || value.isEmpty) {
return 'Ce champ est obligatoire';
}
// using regular expression
if (!RegExp(r'\S+@\S+\.\S+').hasMatch(value)) {
return "S'il vous plaît, mettez une adresse email valide";
}
// the email is valid
return null;
},
),
const SizedBox(height: 25),
ElevatedButton(
onPressed: _saveForm, child: const Text('Vérifier l\'email')),
const SizedBox(height: 25),
_isValid ? const Text("Votre e-mail a l'air sympa!") : Container()
],
),
),
),
);
}
}
// TextFormField Border Decoration
InputDecoration buildInputDecoration(IconData icons, String hinttext) {
return InputDecoration(
hintText: hinttext,
prefixIcon: Icon(icons),
focusedBorder: OutlineInputBorder(
borderRadius: BorderRadius.circular(15.0),
borderSide: const BorderSide(color: Colors.green, width: 1.5),
),
border: OutlineInputBorder(
borderRadius: BorderRadius.circular(15.0),
borderSide: const BorderSide(
color: Colors.blue,
width: 1.5,
),
),
enabledBorder: OutlineInputBorder(
borderRadius: BorderRadius.circular(15.0),
borderSide: const BorderSide(
color: Colors.blue,
width: 1.5,
),
),
);
}
dependencies:
flutter:
sdk: flutter
email_validator: ^2.0.1
import 'package:email_validator/email_validator.dart';
const String email = 'test1234@gmail.com';
final bool isValid = EmailValidator.validate(email);
print('L'e-mail est-il valide ?' + (isValid ? 'Oui' : 'Non'));
Dans notre exemple, nous avons utilisé une instruction conditionnelle simple utilisant l’opérateur ternaire, si l’e-mail est valide, il imprimera « oui » et si l’e-mail n’est pas valide, il imprimera « Non » dans le terminal.