İçeriğe geç / Skip to content / Zum Inhalt
Ahmet Balaman LogoAhmet Balaman

Flutter: Form-Widget und Eingabevalidierung

Ahmet Balaman
FlutterFormValidationTextFormFieldWidgetInput

Form ist ein Widget in Flutter, mit dem Eingabefelder gruppiert und validiert werden. Mit Form verwalten wir mehrere Eingabefelder in einer Struktur und prüfen sie gemeinsam.

Live-Demo

Sie können dieses Widget im interaktiven Beispiel unten ausprobieren:

💡 Falls das Beispiel oben nicht lädt, klicken Sie auf DartPad, um es in einem neuen Tab auszuführen.
💡 Falls das Beispiel oben nicht lädt, können Sie es über DartPad in einem neuen Tab ausführen.

Grundlegende Verwendung

Das Form-Widget wird über einen GlobalKey verwaltet:

final _formKey = GlobalKey<FormState>();

Form(
  key: _formKey,
  child: Column(
    children: [
      TextFormField(
        validator: (value) {
          if (value == null || value.isEmpty) {
            return 'This field cannot be empty';
          }
          return null;
        },
      ),
      ElevatedButton(
        onPressed: () {
          if (_formKey.currentState!.validate()) {
            // Form is valid, perform operation
          }
        },
        child: Text('Submit'),
      ),
    ],
  ),
)

Eigenschaften von TextFormField

TextFormField(
  controller: _controller,
  decoration: InputDecoration(
    labelText: 'Email',
    hintText: '[email protected]',
    prefixIcon: Icon(Icons.email),
    suffixIcon: Icon(Icons.check),
    border: OutlineInputBorder(),
    errorBorder: OutlineInputBorder(
      borderSide: BorderSide(color: Colors.red),
    ),
  ),
  validator: (value) => value!.isEmpty ? 'Required field' : null,
  keyboardType: TextInputType.emailAddress,
  textInputAction: TextInputAction.next,
  obscureText: false, // true for password
  maxLength: 50,
  maxLines: 1,
)

Validierungsfunktionen

// Email validation
String? validateEmail(String? value) {
  if (value == null || value.isEmpty) {
    return 'Email is required';
  }
  final regex = RegExp(r'^[\w-\.]+@([\w-]+\.)+[\w-]{2,4}$');
  if (!regex.hasMatch(value)) {
    return 'Invalid email format';
  }
  return null;
}

// Password validation
String? validatePassword(String? value) {
  if (value == null || value.length < 6) {
    return 'Password must be at least 6 characters';
  }
  return null;
}

Methoden des Formulars

Methode Beschreibung
validate() Prüft alle Felder
save() Ruft die onSaved-Callbacks auf
reset() Setzt das Formular zurück

AutovalidateMode

Form(
  key: _formKey,
  autovalidateMode: AutovalidateMode.onUserInteraction,
  // AutovalidateMode.disabled - Manual validation
  // AutovalidateMode.always - Always validate
  // AutovalidateMode.onUserInteraction - Validate on user interaction
  child: ...
)

onSaved verwenden

String? _email;

TextFormField(
  onSaved: (value) {
    _email = value;
  },
)

// When form is submitted
if (_formKey.currentState!.validate()) {
  _formKey.currentState!.save(); // Calls onSaved callbacks
  print(_email);
}

Zusammenfassung

  • Form: Gruppiert Eingabefelder
  • GlobalKey: Verwaltet den Zustand des Formulars
  • TextFormField: Texteingabe mit Validierung
  • validator: Validierungsfunktion
  • validate(): Prüft alle Felder

Das Form-Widget ist unverzichtbar für die Verwaltung von Nutzereingaben.

Kommentare