2026-04-04 17:13:25 +02:00
|
|
|
import 'package:flutter/material.dart';
|
2026-04-04 19:25:55 +02:00
|
|
|
import 'package:flux/theme/theme.dart';
|
2026-04-04 17:13:25 +02:00
|
|
|
|
|
|
|
|
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),
|
|
|
|
|
),
|
2026-04-05 10:06:26 +02:00
|
|
|
Divider(color: Theme.of(context).textTheme.bodyMedium?.color),
|
2026-04-04 17:13:25 +02:00
|
|
|
// Sostituire con BlocBuilder
|
2026-04-05 10:06:26 +02:00
|
|
|
_activityTile('Nuova Linea', 'Mario Rossi', '10 min fa', context),
|
|
|
|
|
_activityTile('Assistenza Tech', 'iPhone 13', '45 min fa', context),
|
2026-04-04 17:13:25 +02:00
|
|
|
],
|
|
|
|
|
),
|
|
|
|
|
),
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
2026-04-05 10:06:26 +02:00
|
|
|
Widget _activityTile(
|
|
|
|
|
String title,
|
|
|
|
|
String subtitle,
|
|
|
|
|
String time,
|
|
|
|
|
BuildContext context,
|
|
|
|
|
) {
|
2026-04-04 17:13:25 +02:00
|
|
|
return ListTile(
|
|
|
|
|
contentPadding: EdgeInsets.zero,
|
|
|
|
|
leading: const Icon(Icons.history, color: FluxColors.accentTurquoise),
|
2026-04-05 10:06:26 +02:00
|
|
|
title: Text(title, style: Theme.of(context).textTheme.titleLarge),
|
2026-04-04 17:13:25 +02:00
|
|
|
subtitle: Text(subtitle),
|
2026-04-05 10:06:26 +02:00
|
|
|
trailing: Text(time, style: Theme.of(context).textTheme.bodyMedium),
|
2026-04-04 17:13:25 +02:00
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
}
|