From e6699735a68763787a74941b3402007738683c03 Mon Sep 17 00:00:00 2001 From: Iván Ávalos Date: Sun, 23 Apr 2023 17:24:03 -0600 Subject: Initial WIP for practice 6 --- lib/widgets/album_item.dart | 72 ++++++++++++++++++++++++++++++++++++++ lib/widgets/album_placeholder.dart | 21 +++++++++++ 2 files changed, 93 insertions(+) create mode 100644 lib/widgets/album_item.dart create mode 100644 lib/widgets/album_placeholder.dart (limited to 'lib/widgets') diff --git a/lib/widgets/album_item.dart b/lib/widgets/album_item.dart new file mode 100644 index 0000000..8794c24 --- /dev/null +++ b/lib/widgets/album_item.dart @@ -0,0 +1,72 @@ +import 'package:flutter/material.dart'; +import 'package:pmsna1/models/album.dart'; +import 'package:pmsna1/widgets/album_placeholder.dart'; + +class AlbumItem extends StatelessWidget { + final Album album; + + const AlbumItem(this.album, {super.key}); + + @override + Widget build(BuildContext context) { + Color textColor = Theme.of(context).colorScheme.onSurface; + return Card( + margin: const EdgeInsets.all(5.0), + semanticContainer: true, + clipBehavior: Clip.antiAliasWithSaveLayer, + child: InkWell( + onTap: () { + Navigator.of(context).pushNamed('/album', arguments: album); + }, + child: Column( + children: [ + FadeInImage( + placeholder: const AssetImage('assets/loading.gif'), + imageErrorBuilder: (context, error, stackTrace) => + const AspectRatio( + aspectRatio: 1.0, + child: AlbumPlaceholder(400), + ), + image: NetworkImage(album.coverUri.toString()), + fit: BoxFit.fill, + ), + Padding( + padding: const EdgeInsets.all(8.0), + child: Column( + children: [ + Text( + album.title, + style: Theme.of(context) + .typography + .englishLike + .labelLarge + ?.copyWith(color: textColor), + textAlign: TextAlign.center, + ), + const SizedBox(height: 4.0), + Text( + album.firstReleaseDate, + style: Theme.of(context) + .typography + .englishLike + .labelMedium + ?.copyWith(color: textColor), + ), + const SizedBox(height: 4.0), + Text( + "(${album.primaryType})", + style: Theme.of(context) + .typography + .englishLike + .labelSmall + ?.copyWith(color: textColor), + ), + ], + ), + ), + ], + ), + ), + ); + } +} diff --git a/lib/widgets/album_placeholder.dart b/lib/widgets/album_placeholder.dart new file mode 100644 index 0000000..420c2e9 --- /dev/null +++ b/lib/widgets/album_placeholder.dart @@ -0,0 +1,21 @@ +import 'package:flutter/material.dart'; + +class AlbumPlaceholder extends StatelessWidget { + final double size; + + const AlbumPlaceholder(this.size, {super.key}); + + @override + Widget build(BuildContext context) { + return Container( + height: size, + width: size, + color: Theme.of(context).colorScheme.secondaryContainer, + child: Icon( + Icons.album, + size: 60.0, + color: Theme.of(context).colorScheme.onSecondaryContainer, + ), + ); + } +} -- cgit v1.2.3