Menu
CoddyTech

Scrivi uno StatefulWidget

Fa parte della sezione Rendere l’app interattiva del percorso Flutter di Coddy. Lezione 12 di 34.

Questa volta scrivi tu il StatefulWidget. La schermata mostra I feel Sleepy e premendo Bevi un caffè dovrebbe cambiare in I feel Awake. Come StatelessWidget, non può farlo.

Per trasformare un StatelessWidget in un StatefulWidget servono tre passaggi:

  1. Modifica extends StatelessWidget in extends StatefulWidget e sostituisci il suo build con createState.
  2. Scrivi sotto di esso la classe State e spostaci build senza modificarlo.
  3. Sposta la variabile che cambia fuori da build, all'inizio della classe State.
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) {
    ...
  }
}

Il passaggio 3 è importante. Una variabile all'inizio di build viene creata di nuovo ogni volta che viene eseguito build, quindi dopo setState tornerebbe a 'Sleepy'. All'inizio della classe State viene creata una sola volta e conserva il valore che le assegni.

challenge icon

Sfida

Medio

Trasforma HomePage in un StatefulWidget con una classe _HomePageState. Mantieni l’umore in String _mood = 'Sleepy'; all’inizio dello State e fai in modo che Drink coffee lo cambi in 'Awake' con setState.

Provalo tu

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 iconMettiti alla prova

Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.

Tutte le lezioni di Rendere l’app interattiva

Esercitati da solo: Compilatore Flutter online