- 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.
85 lines
3.0 KiB
Dart
85 lines
3.0 KiB
Dart
import 'package:flutter/material.dart';
|
|
import 'package:provider/provider.dart';
|
|
import '../estado/estado_radio.dart';
|
|
|
|
/// Pantalla de ajustes — por ahora muestra info de la app.
|
|
/// En Fase 3 se añadirá Export/Import config y gestión PRO.
|
|
class PantallaAjustes extends StatelessWidget {
|
|
const PantallaAjustes({super.key});
|
|
|
|
@override
|
|
Widget build(BuildContext context) {
|
|
final theme = Theme.of(context);
|
|
final estado = context.read<EstadoRadio>();
|
|
|
|
return Scaffold(
|
|
appBar: AppBar(title: const Text('Ajustes')),
|
|
body: ListView(
|
|
children: [
|
|
// Info app
|
|
ListTile(
|
|
leading: const Icon(Icons.info_outline),
|
|
title: const Text('PluriWave'),
|
|
subtitle: const Text('v0.3.0 — Radio mundial'),
|
|
),
|
|
const Divider(),
|
|
// Favoritos
|
|
FutureBuilder<int>(
|
|
future: estado.favoritos.obtenerTodos().then((l) => l.length),
|
|
builder: (ctx, snap) => ListTile(
|
|
leading: const Icon(Icons.favorite_outline),
|
|
title: const Text('Favoritos guardados'),
|
|
trailing: Text(
|
|
snap.data?.toString() ?? '—',
|
|
style: theme.textTheme.bodyLarge,
|
|
),
|
|
),
|
|
),
|
|
const Divider(),
|
|
// Filtro emisoras
|
|
ListTile(
|
|
leading: const Icon(Icons.verified_outlined),
|
|
title: const Text('Filtro de emisoras'),
|
|
subtitle: const Text('Solo emisoras verificadas como activas'),
|
|
trailing: const Icon(Icons.check_circle, color: Colors.green),
|
|
),
|
|
ListTile(
|
|
leading: const Icon(Icons.music_off_outlined),
|
|
title: const Text('Audio en background'),
|
|
subtitle: const Text('Activo — continúa al apagar pantalla'),
|
|
trailing: const Icon(Icons.check_circle, color: Colors.green),
|
|
),
|
|
const Divider(),
|
|
// Próximamente
|
|
const Padding(
|
|
padding: EdgeInsets.fromLTRB(16, 12, 16, 4),
|
|
child: Text('PRÓXIMAMENTE', style: TextStyle(fontSize: 12, letterSpacing: 1.2)),
|
|
),
|
|
ListTile(
|
|
leading: const Icon(Icons.upload_outlined),
|
|
title: const Text('Exportar configuración'),
|
|
subtitle: const Text('Favoritos, radios custom, presets EQ'),
|
|
enabled: false,
|
|
),
|
|
ListTile(
|
|
leading: const Icon(Icons.download_outlined),
|
|
title: const Text('Importar configuración'),
|
|
enabled: false,
|
|
),
|
|
ListTile(
|
|
leading: const Icon(Icons.add_circle_outline),
|
|
title: const Text('Añadir radio personalizada'),
|
|
enabled: false,
|
|
),
|
|
ListTile(
|
|
leading: const Icon(Icons.equalizer_outlined),
|
|
title: const Text('Ecualizador'),
|
|
subtitle: const Text('5 bandas, presets por emisora'),
|
|
enabled: false,
|
|
),
|
|
],
|
|
),
|
|
);
|
|
}
|
|
}
|