Widgets

InputField

Introduzione

Il widget InputField e' il campo di testo avanzato di Nylo Website con supporto integrato per:

  • Validazione con messaggi di errore personalizzabili
  • Toggle di visibilita' della password
  • Mascheramento dell'input (numeri di telefono, carte di credito, ecc.)
  • Widget intestazione e pie' di pagina
  • Input cancellabile
  • Integrazione con la gestione dello stato
  • Dati fittizi per lo sviluppo

Utilizzo 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",
        ),
      ),
    ),
  );
}

Validazione

Usa il parametro formValidator per aggiungere regole di validazione:

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

Il campo si validera' quando l'utente sposta il focus altrove.

Gestore di Validazione Personalizzato

Gestisci gli errori di validazione in modo programmatico:

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

Consulta tutte le regole di validazione disponibili nella documentazione Validazione.

InputField.password

Un campo password preconfigurato con testo oscurato e toggle di visibilita':

final TextEditingController _passwordController = TextEditingController();

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

Personalizzazione della Visibilita' della Password

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

InputField.emailAddress

Un campo email preconfigurato con tastiera email e autofocus:

final TextEditingController _emailController = TextEditingController();

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

InputField.capitalizeWords

Capitalizza automaticamente la prima lettera di ogni parola:

final TextEditingController _nameController = TextEditingController();

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

Mascheramento dell'Input

Applica maschere di input per dati formattati come numeri di telefono o carte di credito:

// 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
)
Parametro Descrizione
mask Il modello di maschera usando # come segnaposto
maskMatch Pattern regex per i caratteri di input validi
maskedReturnValue Se true, restituisce il valore formattato; se false, restituisce l'input grezzo

Intestazione e Pie' di Pagina

Aggiungi widget sopra o sotto il campo di input:

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,
)

Input Cancellabile

Aggiungi un pulsante di cancellazione per svuotare rapidamente il campo:

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

Gestione dello Stato

Assegna un nome di stato al tuo campo di input per controllarlo in modo programmatico:

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

Azioni sullo Stato

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

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

Parametri

Parametri Comuni

Parametro Tipo Predefinito Descrizione
controller TextEditingController obbligatorio Controlla il testo in fase di modifica
labelText String? - Etichetta mostrata sopra il campo
hintText String? - Testo segnaposto
formValidator FormValidator? - Regole di validazione
validateOnFocusChange bool true Valida al cambio di focus
obscureText bool false Nascondi l'input (per le password)
keyboardType TextInputType text Tipo di tastiera
autoFocus bool false Focus automatico alla creazione
readOnly bool false Rendi il campo di sola lettura
enabled bool? - Abilita/disabilita il campo
maxLines int? 1 Numero massimo di righe
maxLength int? - Numero massimo di caratteri

Parametri di Stile

Parametro Tipo Descrizione
backgroundColor Color? Colore di sfondo del campo
borderRadius BorderRadius? Raggio del bordo
border InputBorder? Bordo predefinito
focusedBorder InputBorder? Bordo quando in focus
enabledBorder InputBorder? Bordo quando abilitato
contentPadding EdgeInsetsGeometry? Padding interno
style TextStyle? Stile del testo
labelStyle TextStyle? Stile del testo dell'etichetta
hintStyle TextStyle? Stile del testo segnaposto
prefixIcon Widget? Icona prima dell'input

Parametri di Mascheramento

Parametro Tipo Descrizione
mask String? Modello di maschera (es. "###-####")
maskMatch String? Regex per i caratteri validi
maskedReturnValue bool? Restituisci valore mascherato o grezzo

Parametri delle Funzionalita'

Parametro Tipo Descrizione
header Widget? Widget sopra il campo
footer Widget? Widget sotto il campo
clearable bool? Mostra pulsante di cancellazione
clearIcon Widget? Icona di cancellazione personalizzata
passwordVisible bool? Mostra toggle della password
passwordViewable bool? Consenti il toggle della visibilita' della password
dummyData String? Dati fittizi per lo sviluppo
stateName String? Nome per la gestione dello stato
onChanged Function(String)? Chiamato quando il valore cambia