Aller au contenu principal

AsTextField

Un composant de saisie de texte polyvalent avec un style adaptatif à la plateforme, support de validation et apparence personnalisable.

Import

import 'package:alphasow_ui/alphasow_ui.dart';

Utilisation de Base

AsTextField(
labelText: 'Entrez votre nom',
onChanged: (value) {
print('Texte modifié : $value');
},
)

Avec Texte d'Aide et Assistant

AsTextField(
labelText: 'Email',
hintText: 'exemple@domaine.com',
helperText: 'Nous ne partagerons jamais votre email',
onChanged: (value) {},
)

Champ Mot de Passe

AsTextField(
labelText: 'Mot de passe',
obscureText: true,
suffixIcon: Icons.visibility,
onChanged: (value) {},
)

Avec Validation

class MyForm extends StatefulWidget {
@override
_MyFormState createState() => _MyFormState();
}

class _MyFormState extends State<MyForm> {
final _formKey = GlobalKey<FormState>();

@override
Widget build(BuildContext context) {
return Form(
key: _formKey,
child: Column(
children: [
AsTextField(
labelText: 'Email',
keyboardType: TextInputType.emailAddress,
validator: (value) {
if (value == null || value.isEmpty) {
return 'Veuillez saisir un email';
}
if (!value.contains('@')) {
return 'Veuillez saisir un email valide';
}
return null;
},
onChanged: (value) {},
),
AsButton(
onPressed: () {
if (_formKey.currentState!.validate()) {
// Le formulaire est valide
}
},
child: Text('Submit'),
),
],
),
);
}
}

Champ de Texte Multiligne

AsTextField(
labelText: 'Description',
maxLines: 4,
minLines: 2,
onChanged: (value) {},
)

Avec Préfixe et Suffixe

AsTextField(
labelText: 'Téléphone',
prefixIcon: Icons.phone,
suffixText: 'Requis',
keyboardType: TextInputType.phone,
onChanged: (value) {},
)

Référence API

Propriétés

PropriétéTypeDéfautDescription
controllerTextEditingController?nullContrôle le texte en cours d'édition
labelTextString?nullTexte d'étiquette affiché au-dessus du champ
hintTextString?nullTexte d'indice affiché quand le champ est vide
helperTextString?nullTexte d'aide affiché sous le champ
errorTextString?nullTexte d'erreur affiché quand la validation échoue
obscureTextboolfalseSi le texte en cours d'édition doit être masqué
enabledbooltrueSi le champ de texte est activé
readOnlyboolfalseSi le champ de texte est en lecture seule
maxLinesint?1Nombre maximum de lignes
minLinesint?nullNombre minimum de lignes
maxLengthint?nullNombre maximum de caractères
keyboardTypeTextInputType?nullType de clavier à afficher
textInputActionTextInputAction?nullBouton d'action sur le clavier
validatorString? Function(String?)?nullFonction de validation de formulaire
onChangedValueChanged<String>?nullAppelé quand le texte change
onSubmittedValueChanged<String>?nullAppelé quand l'utilisateur soumet
prefixIconIconData?nullIcône affichée au début
suffixIconIconData?nullIcône affichée à la fin
prefixTextString?nullTexte affiché au début
suffixTextString?nullTexte affiché à la fin

Exemples

Champ de Recherche

AsTextField(
labelText: 'Recherche',
prefixIcon: Icons.search,
hintText: 'Rechercher des éléments...',
onChanged: (value) {
// Effectuer la recherche
},
)

Saisie Numérique

AsTextField(
labelText: 'Âge',
keyboardType: TextInputType.number,
validator: (value) {
if (value == null || value.isEmpty) {
return 'Veuillez saisir votre âge';
}
final age = int.tryParse(value);
if (age == null || age < 0 || age > 150) {
return 'Veuillez saisir un âge valide';
}
return null;
},
onChanged: (value) {},
)

Saisie de Devise

AsTextField(
labelText: 'Prix',
prefixText: '€',
keyboardType: TextInputType.numberWithOptions(decimal: true),
onChanged: (value) {},
)

Saisie Contrôlée

class ControlledTextField extends StatefulWidget {
@override
_ControlledTextFieldState createState() => _ControlledTextFieldState();
}

class _ControlledTextFieldState extends State<ControlledTextField> {
final _controller = TextEditingController();

@override
void dispose() {
_controller.dispose();
super.dispose();
}

@override
Widget build(BuildContext context) {
return Column(
children: [
AsTextField(
controller: _controller,
labelText: 'Saisie Contrôlée',
onChanged: (value) {},
),
AsButton(
onPressed: () {
_controller.clear();
},
child: Text('Effacer'),
),
],
);
}
}

Différences de Plateforme

Material (Android/Web)

  • Utilise TextFormField avec le style Material
  • Décoration d'entrée Material Design
  • États de focus et d'erreur Material

Cupertino (iOS/macOS)

  • Utilise CupertinoTextFormFieldRow
  • Style de saisie iOS
  • Comportement clavier iOS natif

Voir Aussi