Menu
CoddyTech

Ein StatefulWidget schreiben

Teil des Abschnitts Apps interaktiv gestalten der Flutter-Journey von Coddy. Lektion 12 von 34.

Dieses Mal schreibst du das StatefulWidget selbst. Auf dem Bildschirm steht I feel Sleepy, und durch Drücken von Kaffee trinken sollte sich die Anzeige zu I feel Awake ändern. Als StatelessWidget kann es das nie.

Ein StatelessWidget in ein StatefulWidget umzuwandeln, umfasst drei Schritte:

  1. Ändere extends StatelessWidget zu extends StatefulWidget und ersetze dessen build durch createState.
  2. Schreibe darunter die State-Klasse und verschiebe build unverändert dorthin.
  3. Verschiebe die veränderliche Variable aus build an den Anfang der State-Klasse.
class HomePage extends StatefulWidget {
  const HomePage({super.key});

  @override
  State<HomePage> createState() => _HomePageState();
}

class _HomePageState extends State<HomePage> {
  String _mood = 'Sleepy';

  @override
  Widget build(BuildContext context) {
    ...
  }
}

Schritt 3 ist wichtig. Eine Variable am Anfang von build wird jedes Mal neu erstellt, wenn build ausgeführt wird. Nach setState wäre ihr Wert also wieder 'Sleepy'. Am Anfang der State-Klasse wird sie einmal erstellt und behält den Wert, den du ihr zuweist.

challenge icon

Aufgabe

Mittel

Wandle HomePage in ein StatefulWidget mit einer Klasse _HomePageState um. Bewahre die Stimmung ganz oben im State in String _mood = 'Sleepy'; auf und lasse Drink coffee sie mit setState in 'Awake' ändern.

Probier es selbst

import 'package:flutter/material.dart';

void main() {
  runApp(const MyApp());
}

class MyApp extends StatelessWidget {
  const MyApp({super.key});

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      debugShowCheckedModeBanner: false,
      home: HomePage(),
    );
  }
}

class HomePage extends StatelessWidget {
  const HomePage({super.key});

  @override
  Widget build(BuildContext context) {
    String mood = 'Sleepy';
    return Scaffold(
      appBar: AppBar(title: Text('Mood')),
      body: Center(
        child: Column(
          mainAxisSize: MainAxisSize.min,
          children: [
            Text('I feel $mood', style: TextStyle(fontSize: 32)),
            SizedBox(height: 16),
            ElevatedButton(
              onPressed: () {},
              child: Text('Drink coffee'),
            ),
          ],
        ),
      ),
    );
  }
}
quiz iconTeste dich selbst

Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.

Alle Lektionen in Apps interaktiv gestalten

Übe selbstständig: Online-Flutter-Compiler