feat: Ajout de la gestion de la quantité pour les options d'événement
This commit is contained in:
@@ -1,11 +1,12 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:cloud_firestore/cloud_firestore.dart';
|
||||
import 'package:em2rp/models/event_model.dart';
|
||||
import 'package:em2rp/utils/colors.dart';
|
||||
import 'package:provider/provider.dart';
|
||||
import 'package:em2rp/providers/local_user_provider.dart';
|
||||
import 'package:em2rp/views/event_add_page.dart';
|
||||
|
||||
class EventDetailsHeader extends StatelessWidget {
|
||||
class EventDetailsHeader extends StatefulWidget {
|
||||
final EventModel event;
|
||||
|
||||
const EventDetailsHeader({
|
||||
@@ -13,6 +14,52 @@ class EventDetailsHeader extends StatelessWidget {
|
||||
required this.event,
|
||||
});
|
||||
|
||||
@override
|
||||
State<EventDetailsHeader> createState() => _EventDetailsHeaderState();
|
||||
}
|
||||
|
||||
class _EventDetailsHeaderState extends State<EventDetailsHeader> {
|
||||
String? _eventTypeName;
|
||||
bool _isLoadingEventType = true;
|
||||
|
||||
@override
|
||||
void initState() {
|
||||
super.initState();
|
||||
_fetchEventTypeName();
|
||||
}
|
||||
|
||||
Future<void> _fetchEventTypeName() async {
|
||||
try {
|
||||
if (widget.event.eventTypeId.isEmpty) {
|
||||
setState(() => _isLoadingEventType = false);
|
||||
return;
|
||||
}
|
||||
|
||||
final doc = await FirebaseFirestore.instance
|
||||
.collection('eventTypes')
|
||||
.doc(widget.event.eventTypeId)
|
||||
.get();
|
||||
|
||||
if (doc.exists) {
|
||||
setState(() {
|
||||
_eventTypeName = doc.data()?['name'] as String? ?? widget.event.eventTypeId;
|
||||
_isLoadingEventType = false;
|
||||
});
|
||||
} else {
|
||||
setState(() {
|
||||
_eventTypeName = widget.event.eventTypeId;
|
||||
_isLoadingEventType = false;
|
||||
});
|
||||
}
|
||||
} catch (e) {
|
||||
print('Erreur lors du chargement du type d\'événement: $e');
|
||||
setState(() {
|
||||
_eventTypeName = widget.event.eventTypeId;
|
||||
_isLoadingEventType = false;
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return Row(
|
||||
@@ -25,7 +72,7 @@ class EventDetailsHeader extends StatelessWidget {
|
||||
Container(
|
||||
constraints: const BoxConstraints(maxHeight: 80),
|
||||
child: SelectableText(
|
||||
event.name,
|
||||
widget.event.name,
|
||||
style: Theme.of(context).textTheme.headlineMedium?.copyWith(
|
||||
color: AppColors.noir,
|
||||
fontWeight: FontWeight.bold,
|
||||
@@ -34,7 +81,9 @@ class EventDetailsHeader extends StatelessWidget {
|
||||
),
|
||||
const SizedBox(height: 4),
|
||||
Text(
|
||||
event.eventTypeId,
|
||||
_isLoadingEventType
|
||||
? 'Chargement...'
|
||||
: _eventTypeName ?? widget.event.eventTypeId,
|
||||
style: Theme.of(context).textTheme.bodyMedium?.copyWith(
|
||||
color: AppColors.rouge,
|
||||
),
|
||||
@@ -43,7 +92,7 @@ class EventDetailsHeader extends StatelessWidget {
|
||||
),
|
||||
),
|
||||
const SizedBox(width: 12),
|
||||
_buildStatusIcon(event.status),
|
||||
_buildStatusIcon(widget.event.status),
|
||||
if (Provider.of<LocalUserProvider>(context, listen: false)
|
||||
.hasPermission('edit_event')) ...[
|
||||
const SizedBox(width: 8),
|
||||
@@ -53,7 +102,7 @@ class EventDetailsHeader extends StatelessWidget {
|
||||
onPressed: () {
|
||||
Navigator.of(context).push(
|
||||
MaterialPageRoute(
|
||||
builder: (context) => EventAddEditPage(event: event),
|
||||
builder: (context) => EventAddEditPage(event: widget.event),
|
||||
),
|
||||
);
|
||||
},
|
||||
|
||||
@@ -55,7 +55,11 @@ class EventDetailsInfo extends StatelessWidget {
|
||||
final total = event.basePrice +
|
||||
event.options.fold<num>(
|
||||
0,
|
||||
(sum, opt) => sum + (opt['price'] ?? 0.0),
|
||||
(sum, opt) {
|
||||
final price = opt['price'] ?? 0.0;
|
||||
final quantity = opt['quantity'] ?? 1;
|
||||
return sum + (price * quantity);
|
||||
},
|
||||
);
|
||||
return Padding(
|
||||
padding: const EdgeInsets.only(top: 8.0, bottom: 8.0),
|
||||
|
||||
Reference in New Issue
Block a user