Flutter-Widgets

Aus Info-Theke
Version vom 25. September 2022, 07:50 Uhr von Hamatoma (Diskussion | Beiträge) (Die Seite wurde neu angelegt: „= Links = * Flutter = Häufige Widgets = == Column / Row == Ein Container, in dem die Unterelemente senkrecht (Column) oder waagrecht (Row) angeordnet wer…“)
(Unterschied) ← Nächstältere Version | Aktuelle Version (Unterschied) | Nächstjüngere Version → (Unterschied)
Zur Navigation springen Zur Suche springen

Links

Häufige Widgets

Column / Row

Ein Container, in dem die Unterelemente senkrecht (Column) oder waagrecht (Row) angeordnet werden. Die Unterelemente bestimmen

List<Widget> = [
  Col( children = [
    Row( children: [
      Expanded(
        child: const Text('Be surprised!'),
      ),
      const SizedBox(width: 16),
      ElevatedButton(
        child: Text('Click it'),
        onPressed: () => sayHello(),
      ),
      ]),
    const SizedBox(height: 16),
    Row( children: [
      const Expanded (flex: 7, 
        child: Text('You need help?'),
      ),
      const SizedBox(height: padding),
      const Expanded (flex: 2,
        child: ElevatedButton(
          child: Text('Help me'),
          onPressed: () => help(),
        ),
      ),
      ]),
  ]),
];

Platzverteilung

Normalerweise bestimmen die Unterelemente (children) die Dimensionen, sie werden einfach untereinander / hintereinander positioniert.

Will man eine automatische Anpassung, werden die "dynamischen" Elemente jeweils in ein Expanded-Element eingebettet. In diesem Fall wird der Restplatz an alle dynamischen Elemente gleichmäßig verteilt. Mit dem Parameter 'flex von Expanded kann das Verhältnis eingestellt werden.

Formular

Jedes Formular benötigt einen Key, der normalerweise im Controller erzeugt/gespeichert wird:

key = GlobalKey<FormState>(debugLabel: 'MyForm');

Ein Formular bietet die Möglichkeit der Eingabeprüfung (Validierung).

  • Dazu wird für jedes Formularfeld eine (eventuell anonyme) Funktion angegeben, die im Fehlerfall einen Fehlertext zurückgibt, sonst null.
  • Außerdem hat das Formularfeld einen Parameter onSave, der eine Funktion entgegennimmt, die das Speichern des Wertes übernimmt.
  • Die Validierung wird normalerweise beim Anklicken eines Buttons angestoßen: Alle Textfelder werden validiert.
  • Ist die Validierung erfolgreich, wird formKey.currentKey.store() aufgerufen.
  • Dies löst bei allen Textfeldern den Aufruf der Parameterfunktion onSave auf.
final form = Form(
  key: controller.formKey,
  child: Column(
    children: [
      TextFormField(
        validator: checkInt,
        onSaved: (input) => controller.controllerData = input,
        controller: ,
      ),
  ]),
);
String? checkInt(String input) int.parseInt(input) == null ? 'Not an integer' : null;

void store(controller, String input){
    if (controller, formKey.currentState?.validate() ?? false) {
      controller.formKey.currentState?.save();
    }
}
<pre>

= Rückgabe der GetView.build() Methode =

<pre>
  Widget build(BuildContext context) {
    return Scaffold(
        appBar: controller.applicationData.appBarBuilder('Demo'),
        drawer: controller.applicationData.drawerBuilder(context),
        body: Text('Hello world!'),
  }

Grundgerüst einer GUI-App

void main() {
  globalLogger = GetxLogger();
  ApplicationData.createDummy();
  runApp(
    GetMaterialApp(
      title: "MyApp",
      initialRoute: AppPages.initialRoute,
      getPages: AppPages.routes,
    ),
  );
}