Lettore musicale: Copertina dell’album
Fa parte della sezione Layout adattabili del percorso Flutter di Coddy. Lezione 26 di 30.
È il momento di usare l’intera sezione. Nelle prossime cinque lezioni costruirai la schermata In riproduzione di un’app musicale: la copertina dell’album con un badge, il brano e l’artista, un cursore di avanzamento, i controlli di riproduzione e una modalità scura.
Un lettore musicale è un buon test di layout: ogni parte deve adattarsi al telefono, i controlli devono condividere equamente la larghezza e la copertina deve avere un’etichetta sovrapposta.
MyApp è già un StatefulWidget, perché il cursore, il pulsante di riproduzione e la modalità scura avranno bisogno di stato. Per ora, lo State non contiene nulla.
Inizia dalla copertina. Uno Stack sovrappone il badge all’immagine e Positioned lo colloca in un angolo.
Sfida
FacileInserisci la copertina dell’album in uno Stack e, sopra di essa, un badge HD nell’angolo in alto a destra, a 12 pixel dall’alto e da destra:
- il badge è un
Containercon paddingEdgeInsets.symmetric(horizontal: 8, vertical: 4)e unaBoxDecorationColors.black54con angoli di8 - il suo elemento figlio è
HDin bianco e in grassetto
Provalo tu
import 'package:flutter/material.dart';
void main() {
runApp(const MyApp());
}
class MyApp extends StatefulWidget {
const MyApp({super.key});
@override
State<MyApp> createState() => _MyAppState();
}
class _MyAppState extends State<MyApp> {
@override
Widget build(BuildContext context) {
return MaterialApp(
debugShowCheckedModeBanner: false,
theme: ThemeData(
colorScheme: ColorScheme.fromSeed(seedColor: Colors.deepPurple),
),
home: Scaffold(
appBar: AppBar(title: const Text('Now Playing')),
body: Padding(
padding: const EdgeInsets.all(24),
child: Column(
children: [
Container(
width: double.infinity,
height: 300,
decoration: BoxDecoration(
color: Colors.deepPurple,
borderRadius: BorderRadius.circular(24),
),
child: const Center(
child: Icon(Icons.album, size: 120, color: Colors.white),
),
),
],
),
),
),
);
}
}
Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.
Tutte le lezioni di Layout adattabili
1Condividere una riga
Expanded riempie la rigaCondividere lo spazio con flexFlexible si adatta al suo elemento figlioSpacer tiene gli elementi separati4Dimensioni e breakpoint
Larghezza completa: double.infinityUna larghezza massimaDimensioni dello schermo: MediaQueryBreakpoint con LayoutBuilder7Progetto: Lettore musicale
Lettore musicale: Copertina dell’albumLettore musicale: Informazioni sul branoEsercitati da solo: Compilatore Flutter online