Files
flux/lib/ui/dashboard/dashboard_view.dart

118 lines
3.4 KiB
Dart
Raw Normal View History

2026-04-04 17:13:25 +02:00
import 'package:flutter/material.dart';
import 'package:flux/theme.dart';
class DashboardView extends StatelessWidget {
const DashboardView({super.key});
@override
Widget build(BuildContext context) {
// Iniezione del Bloc per la creazione di operazioni (da implementare)
return /* BlocProvider(
create: (context) => OperazioneBloc(), // Implementa la logica nel Bloc
child: */ Scaffold(
appBar: AppBar(title: Text('FLUX')),
body: SingleChildScrollView(
padding: EdgeInsets.all(16.0),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
_WelcomeHeader(),
SizedBox(height: 24),
_QuickActions(), // Contiene "Nuova Operazione"
SizedBox(height: 24),
_RecentActivityPreview(),
],
),
),
);
// );
}
}
class _WelcomeHeader extends StatelessWidget {
const _WelcomeHeader();
@override
Widget build(BuildContext context) {
return Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Text('Benvenuto,', style: Theme.of(context).textTheme.bodyMedium),
Text(
'Negozio Piacenza Centro',
style: Theme.of(context).textTheme.headlineMedium,
),
],
);
}
}
class _QuickActions extends StatelessWidget {
const _QuickActions();
@override
Widget build(BuildContext context) {
return Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Text(
'AZIONI RAPIDE',
style: Theme.of(
context,
).textTheme.titleSmall?.copyWith(color: FluxColors.accentTurquoise),
),
const SizedBox(height: 12),
ElevatedButton.icon(
onPressed: () {
// Emetti evento al Bloc: BlocProvider.of<OperazioneBloc>(context).add(IniziaNuovaOperazione());
ScaffoldMessenger.of(context).showSnackBar(
const SnackBar(content: Text('Avvio Nuova Operazione...')),
);
},
icon: const Icon(Icons.add),
label: const Text('NUOVA OPERAZIONE TELCO'),
style: ElevatedButton.styleFrom(
minimumSize: const Size(double.infinity, 50),
),
),
],
);
}
}
class _RecentActivityPreview extends StatelessWidget {
const _RecentActivityPreview();
@override
Widget build(BuildContext context) {
return Card(
child: Padding(
padding: const EdgeInsets.all(16.0),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
const Text(
'Attività Recenti',
style: TextStyle(fontSize: 18, fontWeight: FontWeight.bold),
),
const Divider(color: FluxColors.textSecondary),
// Sostituire con BlocBuilder
_activityTile('Nuova Linea', 'Mario Rossi', '10 min fa'),
_activityTile('Assistenza Tech', 'iPhone 13', '45 min fa'),
],
),
),
);
}
Widget _activityTile(String title, String subtitle, String time) {
return ListTile(
contentPadding: EdgeInsets.zero,
leading: const Icon(Icons.history, color: FluxColors.accentTurquoise),
title: Text(title, style: const TextStyle(color: FluxColors.textPrimary)),
subtitle: Text(subtitle),
trailing: Text(
time,
style: const TextStyle(color: FluxColors.textSecondary, fontSize: 12),
),
);
}
}