Widgets

InputField

Introduction

Le widget InputField est le champ de texte ameliore de Nylo Website avec un support integre pour :

  • La validation avec des messages d'erreur personnalisables
  • Le bouton de visibilite du mot de passe
  • Le masquage de saisie (numeros de telephone, cartes de credit, etc.)
  • Les widgets d'en-tete et de pied de page
  • La saisie effacable
  • L'integration de la gestion d'etat
  • Les donnees factices pour le developpement

Utilisation de base

final TextEditingController _controller = TextEditingController();

@override
Widget build(BuildContext context) {
  return Scaffold(
    body: SafeArea(
      child: Padding(
        padding: EdgeInsets.all(16),
        child: InputField(
          controller: _controller,
          labelText: "Username",
          hintText: "Enter your username",
        ),
      ),
    ),
  );
}

Validation

Utilisez le parametre formValidator pour ajouter des regles de validation :

InputField(
  controller: _controller,
  labelText: "Email",
  formValidator: FormValidator.rule("email|not_empty"),
  validateOnFocusChange: true,
)

Le champ se validera lorsque l'utilisateur deplacera le focus hors de celui-ci.

Gestionnaire de validation personnalise

Gerez les erreurs de validation par programmation :

InputField(
  controller: _controller,
  labelText: "Username",
  formValidator: FormValidator.rule("not_empty|min:3"),
  handleValidationError: (FormValidationResult result) {
    if (!result.isValid) {
      print("Error: ${result.getFirstErrorMessage()}");
    }
  },
)

Consultez toutes les regles de validation disponibles dans la documentation de Validation.

InputField.password

Un champ de mot de passe preconfigure avec texte masque et bouton de visibilite :

final TextEditingController _passwordController = TextEditingController();

InputField.password(
  controller: _passwordController,
  labelText: "Password",
  formValidator: FormValidator.rule("not_empty|min:8"),
)

Personnaliser la visibilite du mot de passe

InputField.password(
  controller: _passwordController,
  passwordVisible: true, // Show/hide toggle icon
  passwordViewable: true, // Allow user to toggle visibility
)

InputField.emailAddress

Un champ d'email preconfigure avec clavier email et autofocus :

final TextEditingController _emailController = TextEditingController();

InputField.emailAddress(
  controller: _emailController,
  formValidator: FormValidator.rule("email|not_empty"),
)

InputField.capitalizeWords

Met automatiquement en majuscule la premiere lettre de chaque mot :

final TextEditingController _nameController = TextEditingController();

InputField.capitalizeWords(
  controller: _nameController,
  labelText: "Full Name",
)

Masquage de saisie

Appliquez des masques de saisie pour les donnees formatees comme les numeros de telephone ou les cartes de credit :

// Phone number mask
InputField(
  controller: _phoneController,
  labelText: "Phone Number",
  mask: "(###) ###-####",
  maskMatch: r'[0-9]',
  maskedReturnValue: false, // Returns unmasked value: 1234567890
)

// Credit card mask
InputField(
  controller: _cardController,
  labelText: "Card Number",
  mask: "#### #### #### ####",
  maskMatch: r'[0-9]',
  maskedReturnValue: true, // Returns masked value: 1234 5678 9012 3456
)
Parametre Description
mask Le motif de masque utilisant # comme espace reserve
maskMatch Motif regex pour les caracteres de saisie valides
maskedReturnValue Si vrai, retourne la valeur formatee ; si faux, retourne la saisie brute

En-tete et pied de page

Ajoutez des widgets au-dessus ou en dessous du champ de saisie :

InputField(
  controller: _controller,
  labelText: "Bio",
  header: Text(
    "Tell us about yourself",
    style: TextStyle(fontWeight: FontWeight.bold),
  ),
  footer: Text(
    "Max 200 characters",
    style: TextStyle(color: Colors.grey, fontSize: 12),
  ),
  maxLength: 200,
)

Saisie effacable

Ajoutez un bouton d'effacement pour vider rapidement le champ :

InputField(
  controller: _searchController,
  labelText: "Search",
  clearable: true,
  clearIcon: Icon(Icons.close, size: 20), // Custom clear icon
  onChanged: (value) {
    // Handle search
  },
)

Gestion d'etat

Donnez a votre champ de saisie un nom d'etat pour le controler par programmation :

InputField(
  controller: _controller,
  labelText: "Username",
  stateName: "username_field",
)

Actions d'etat

// Clear the field
InputField.stateActions("username_field").clear();

// Set a value
updateState("username_field", data: {
  "action": "setValue",
  "value": "new_value"
});

Parametres

Parametres courants

Parametre Type Par defaut Description
controller TextEditingController requis Controle le texte en cours d'edition
labelText String? - Label affiche au-dessus du champ
hintText String? - Texte de remplacement
formValidator FormValidator? - Regles de validation
validateOnFocusChange bool true Valider lors du changement de focus
obscureText bool false Masquer la saisie (pour les mots de passe)
keyboardType TextInputType text Type de clavier
autoFocus bool false Auto-focus a la construction
readOnly bool false Rendre le champ en lecture seule
enabled bool? - Activer/desactiver le champ
maxLines int? 1 Nombre maximum de lignes
maxLength int? - Nombre maximum de caracteres

Parametres de style

Parametre Type Description
backgroundColor Color? Couleur d'arriere-plan du champ
borderRadius BorderRadius? Rayon de bordure
border InputBorder? Bordure par defaut
focusedBorder InputBorder? Bordure avec le focus
enabledBorder InputBorder? Bordure active
contentPadding EdgeInsetsGeometry? Espacement interne
style TextStyle? Style du texte
labelStyle TextStyle? Style du texte du label
hintStyle TextStyle? Style du texte de remplacement
prefixIcon Widget? Icone avant la saisie

Parametres de masquage

Parametre Type Description
mask String? Motif de masque (par exemple, "###-####")
maskMatch String? Regex pour les caracteres valides
maskedReturnValue bool? Retourner la valeur masquee ou brute

Parametres de fonctionnalite

Parametre Type Description
header Widget? Widget au-dessus du champ
footer Widget? Widget en dessous du champ
clearable bool? Afficher le bouton d'effacement
clearIcon Widget? Icone d'effacement personnalisee
passwordVisible bool? Afficher le bouton de visibilite du mot de passe
passwordViewable bool? Permettre le basculement de visibilite du mot de passe
dummyData String? Donnees factices pour le developpement
stateName String? Nom pour la gestion d'etat
onChanged Function(String)? Appele lorsque la valeur change