Lecteur de musique : Commandes
Fait partie de la section Des mises en page adaptées du Journey Flutter de Coddy. Leçon 29 sur 30.
La dernière ligne contient les boutons : précédent, lecture et suivant. Ils doivent se partager la largeur équitablement, avec le bouton de lecture exactement au milieu, sur tous les téléphones.
En enveloppant chaque IconButton dans Expanded, chacun occupe un tiers de la ligne et le bouton se trouve au milieu de son tiers. Donne au bouton de lecture une valeur iconSize: plus grande pour le faire ressortir.
Le bouton de lecture change : il affiche Icons.pause pendant la lecture de la chanson et Icons.play_arrow quand elle ne l’est pas. Cela se fait avec un bool dans l’état et un ? : pour choisir l’icône.
Défi
FacileSous les durées, après un SizedBox(height: 16), ajoute une Row composée de trois widgets Expanded IconButton :
Icons.skip_previous,iconSize: 40- le bouton de lecture,
iconSize: 64:Icons.pauselorsque le nouveau champbool _playing = false;est vrai,Icons.play_arrowlorsqu’il est faux ; appuyer dessus inverse la valeur de_playingdanssetState Icons.skip_next,iconSize: 40
Essayez vous-même
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> {
double _position = 0.3;
@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: [
Stack(
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),
),
),
Positioned(
top: 12,
right: 12,
child: Container(
padding: const EdgeInsets.symmetric(horizontal: 8, vertical: 4),
decoration: BoxDecoration(
color: Colors.black54,
borderRadius: BorderRadius.circular(8),
),
child: const Text(
'HD',
style: TextStyle(color: Colors.white, fontWeight: FontWeight.bold),
),
),
),
],
),
const SizedBox(height: 24),
const Text(
'Midnight Drive',
style: TextStyle(fontSize: 24, fontWeight: FontWeight.bold),
),
const SizedBox(height: 4),
const Text('The Night Owls', style: TextStyle(color: Colors.grey)),
const SizedBox(height: 16),
Slider(
value: _position,
onChanged: (value) {
setState(() {
_position = value;
});
},
),
const Row(
children: [
Text('1:12'),
Spacer(),
Text('3:45'),
],
),
],
),
),
),
);
}
}
Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.
Toutes les leçons de Des mises en page adaptées
1Partager une ligne
Expanded remplit la lignePartager l’espace avec flexFlexible épouse son enfantSpacer écarte les éléments4Tailles et points de rupture
Pleine largeur : double.infinityUne largeur maximaleTaille de l’écran : MediaQueryPoints de rupture de LayoutBuilder7Projet : Lecteur de musique
Lecteur de musique : Pochette d’albumLecteur de musique : Informations sur le morceau2L’erreur de débordement
L’erreur de débordementCorrection du débordement : agrandirCorrection du débordement : faire défilerCorrection du débordement : renvoyer à la ligneEspacement à l’intérieur d’un renvoi à la ligne5Énumérations et switch
Énumérations pour les types d’écranUtiliser switch avec une énumérationExpressions switchEntraînez-vous par vous-même : Compilateur Flutter en ligne