feat(v0.4.0): PantallaReproductor + PantallaAjustes + MiniReproductor tappable
- PantallaReproductor: artwork grande con sombra animada al reproducir, info chips (país/idioma), codec/bitrate, controles play/pause/stop, indicador en vivo, botón favorito toggle, widget timer inline, animaciones entrada (scale + fadeIn + slideY), transición slide-up. - PantallaAjustes: estado sistema (filtro, background), conteo favoritos, preview de features futuras (Export/Import, radio custom, EQ). - MiniReproductor: GestureDetector → abre PantallaReproductor al tap. - app.dart: 4 tabs (Inicio/Buscar/Favoritos/Ajustes), AppBar condicional.
This commit is contained in:
30
lib/app.dart
30
lib/app.dart
@@ -5,6 +5,7 @@ import 'estado/estado_radio.dart';
|
||||
import 'pantallas/pantalla_inicio.dart';
|
||||
import 'pantallas/pantalla_buscar.dart';
|
||||
import 'pantallas/pantalla_favoritos.dart';
|
||||
import 'pantallas/pantalla_ajustes.dart';
|
||||
import 'widgets/mini_reproductor.dart';
|
||||
|
||||
class PluriWaveApp extends StatelessWidget {
|
||||
@@ -63,6 +64,7 @@ class _PaginaPrincipalState extends State<_PaginaPrincipal> {
|
||||
PantallaInicio(),
|
||||
PantallaBuscar(),
|
||||
PantallaFavoritos(),
|
||||
PantallaAjustes(),
|
||||
];
|
||||
|
||||
static const _destinos = [
|
||||
@@ -81,12 +83,16 @@ class _PaginaPrincipalState extends State<_PaginaPrincipal> {
|
||||
selectedIcon: Icon(Icons.favorite),
|
||||
label: 'Favoritos',
|
||||
),
|
||||
NavigationDestination(
|
||||
icon: Icon(Icons.settings_outlined),
|
||||
selectedIcon: Icon(Icons.settings),
|
||||
label: 'Ajustes',
|
||||
),
|
||||
];
|
||||
|
||||
@override
|
||||
void didChangeDependencies() {
|
||||
super.didChangeDependencies();
|
||||
// Suscribir al stream de errores → SnackBar flotante
|
||||
context.read<EstadoRadio>().errorStream.listen((msg) {
|
||||
if (!mounted) return;
|
||||
ScaffoldMessenger.of(context).showSnackBar(
|
||||
@@ -102,16 +108,18 @@ class _PaginaPrincipalState extends State<_PaginaPrincipal> {
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return Scaffold(
|
||||
appBar: AppBar(
|
||||
title: const Text('PluriWave'),
|
||||
actions: [
|
||||
IconButton(
|
||||
icon: const Icon(Icons.bedtime_outlined),
|
||||
tooltip: 'Timer de sueño',
|
||||
onPressed: () => _mostrarTimerDialog(context),
|
||||
),
|
||||
],
|
||||
),
|
||||
appBar: _indice == 3
|
||||
? null // PantallaAjustes tiene su propio AppBar
|
||||
: AppBar(
|
||||
title: const Text('PluriWave'),
|
||||
actions: [
|
||||
IconButton(
|
||||
icon: const Icon(Icons.bedtime_outlined),
|
||||
tooltip: 'Timer de sueño',
|
||||
onPressed: () => _mostrarTimerDialog(context),
|
||||
),
|
||||
],
|
||||
),
|
||||
body: _paginas[_indice],
|
||||
bottomNavigationBar: Column(
|
||||
mainAxisSize: MainAxisSize.min,
|
||||
|
||||
Reference in New Issue
Block a user