Esercizi extra di ripasso — Flet
Come usarli
Section titled “Come usarli”Questi esercizi sono pensati per essere svolti IN ORDINE. Ogni esercizio introduce un concetto nuovo o rinforza uno già visto. Sono più brevi degli esercizi a fine lezione — perfetti per iniziare la lezione come “riscaldamento”.
🟢 Livello 1 — Base
Section titled “🟢 Livello 1 — Base”E01: Colori preferiti
Section titled “E01: Colori preferiti”Crea un’app che mostra 5 rettangoli colorati in una riga, ognuno con il nome del colore scritto sopra.
Requisiti: Container, Row, Text, bgcolor
Suggerimento:
ft.Container( content=ft.Text("Rosso"), bgcolor="red", width=100, height=100, border_radius=10, alignment=ft.alignment.center,)E02: Contatore con step
Section titled “E02: Contatore con step”Crea un contatore con 3 bottoni: “+1”, “+5”, “Reset”.
Requisiti: Text, ElevatedButton, eventi, nonlocal
E03: Lista nomi
Section titled “E03: Lista nomi”Crea un input dove scrivere un nome e un bottone “Aggiungi”. I nomi appaiono in una lista sotto. Se il nome è vuoto, mostra un errore.
Requisiti: TextField, ListView, validazione base
E04: Password checker
Section titled “E04: Password checker”Crea un campo password (nascosto) e un testo che mostra “Debole” (rossa), “Media” (gialla) o “Forte” (verde) in base alla lunghezza della password.
| Lunghezza | Giudizio |
|---|---|
| < 6 | Debole ❌ |
| 6-10 | Media ⚠️ |
| > 10 | Forte ✅ |
Requisiti: TextField(password=True), on_change, logica condizionale
E05: Card cliccabile
Section titled “E05: Card cliccabile”Crea una card con un testo. Quando la clicchi, il testo cambia da “Non letto” a “Letto” e lo sfondo diventa verde chiaro.
Requisiti: Container(on_click=...), stato, bgcolor
🟡 Livello 2 — Intermedio
Section titled “🟡 Livello 2 — Intermedio”E06: Galleria dinamica
Section titled “E06: Galleria dinamica”Crea una griglia (GridView) di colori. Quando clicchi su un colore, viene aggiunto un nuovo colore casuale alla griglia.
Requisiti: GridView, random, eventi
import randomcolori = ["red", "blue", "green", "amber", "purple"]colore_casuale = random.choice(colori)E07: Timer pomodoro
Section titled “E07: Timer pomodoro”Crea un timer per la tecnica del pomodoro: 25 minuti di lavoro, poi 5 di pausa.
Requisiti: threading, time, aggiornamento UI
Bonus: Mostra il messaggio ”🍅 Lavoro!” o ”☕ Pausa!” a seconda della fase.
E08: App note con data
Section titled “E08: App note con data”Crea un’app che permette di scrivere note. Ogni nota ha titolo, testo e data automatica. Mostra le note in ordine (dalla più recente).
Requisiti: JSON persistenza, datetime.date.today()
E09: Cerca nella lista
Section titled “E09: Cerca nella lista”Partendo dalla rubrica o todo list, aggiungi un campo di ricerca che filtra gli elementi mentre l’utente digita.
Requisiti: on_change, filtro su lista, ricostruisci_ui()
Suggerimento:
def cerca(e): termine = e.control.value.lower() filtrati = [el for el in dati if termine in el["testo"].lower()] ricostruisci_ui_con(filtrati)E10: Tema personalizzato
Section titled “E10: Tema personalizzato”Crea un’app con 3 bottoni: “Tema chiaro”, “Tema scuro”, “Tema arcobaleno” (il tema arcobaleno cambia il primary in un colore casuale ogni volta).
Requisiti: page.theme_mode, page.theme, random
🔴 Livello 3 — Avanzato
Section titled “🔴 Livello 3 — Avanzato”E11: Sondaggio con risultati
Section titled “E11: Sondaggio con risultati”Un’app con una domanda e 4 opzioni di risposta (radio button). Quando voti, mostra un grafico a barre con i risultati usando ft.Column con altezze proporzionali.
Requisiti: RadioGroup, Radio, proporzioni, JSON
E12: Conversione valute
Section titled “E12: Conversione valute”Usa un’API gratuita (es. https://api.exchangerate-api.com/v4/latest/EUR) per convertire tra EUR, USD e GBP.
Requisiti: API HTTP, dropdown per selezionare valuta
E13: App meteo con preferiti
Section titled “E13: App meteo con preferiti”Partendo dall’app meteo della Lezione 11, aggiungi:
- Bottone “❤️ Aggiungi ai preferiti” che salva la città
- Schermata “Preferiti” con lista città salvate
- Click sulla città preferita → mostra subito il meteo
Requisiti: Navigazione, JSON persistenza, API
E14: Gioco “Indovina il numero”
Section titled “E14: Gioco “Indovina il numero””Il computer sceglie un numero tra 1 e 100. L’utente prova a indovinare. L’app dice “Troppo alto” o “Troppo basso”. Conta i tentativi.
Requisiti: TextField, feedback, contatore tentativi
E15: Lista con drag & drop (sfida!)
Section titled “E15: Lista con drag & drop (sfida!)”Crea una lista di elementi che possono essere riordinati tramite bottoni ”↑” e ”↓” (sposta elemento di una posizione).
Requisiti: Liste, bottoni, spostamento indici
def sposta_su(idx): if idx > 0: dati[idx], dati[idx-1] = dati[idx-1], dati[idx] salva_dati(dati) ricostruisci_ui()💡 Sfide extra per progetto
Section titled “💡 Sfide extra per progetto”S01: Statistiche app
Section titled “S01: Statistiche app”Aggiungi una schermata “Statistiche” alla tua app che mostra:
- Quanti elementi hai aggiunto oggi
- Quanti in totale
- Media elementi/giorno
S02: Esporta dati
Section titled “S02: Esporta dati”Aggiungi un bottone “Esporta” che salva i dati anche in formato leggibile (es. .txt con formattazione migliore).
S03: Dark mode automatica
Section titled “S03: Dark mode automatica”Usa datetime per cambiare tema automaticamente dopo le 20:00 (tema scuro) e prima delle 7:00 (tema chiaro).