View
SimulatorSession ListView
class SimulatorSessionListView extends ConsumerWidget {
const SimulatorSessionListView({Key? key}): super(key: key);
@override
Widget build(BuildContext context, WidgetRef ref) {
// rebuild the widget when the SimulatorSession list changes
List<SimulatorSessionState> simulatorSessions = ref.watch(simulatorSessionsProvider);
// Let's render the SimulatorSessions in a scrollable list view
return ListView(
children: [
for (final simulatorSession in simulatorSessions)
WidgetSimulatorSessionTile(
isMainSimulatorSession: simulatorSession.isMainSimulatorSession,
// When pin is tapped, change its isMainSimulatorSession value
onPinChanged: (value) => ref.read(simulatorSessionsProvider.notifier).setIsMainSimulation(simulatorSession.id),
// When tile is swipe on the left, remove the current SimulatorSession
onRemoved: (value) => ref.read(simulatorSessionsProvider.notifier).remove(simulatorSession.id),
title: Text(simulatorSession.name),
),
],
WidgetButton(
child: Text('Nouvelle SimulatorSession'),
// When button tapped, add new SimulatorSession
onTapped: (simulatorSession) => ref.read(simulatorSessionsProvider.notifier).add(simulatorSession),
)
);
}
}SimulatorSessionItem ListView
class SimulatorSessionItemListView extends ConsumerWidget {
final Function<bool> setIsMainSimulationCallback;
const SimulatorSessionItemListView({Key? key}): super(key: key);
@override
Widget build(BuildContext context, WidgetRef ref) {
// rebuild the widget when the SimulatorSession changes
SimulatorSessionState simulatorSession = ref.watch(simulatorSessionDetailProvider);
// Let's render the SimulatorSessions in a scrollable list view
return ListView(
children: [
WidgetSimulatorSessionContext(
isMainSimulatorSession: (value) => setIsMainSimulationCallback(value),
onValidationTriggered: (context) => updateContext(context)
),
for (final SimulatorSessionItemCategory in SimulatorSession.SimulatorSessionItemItems)
WidgetSimulatorSessionItemItemTile(
// When pin is tapped, change its isMainSimulatorSession value
onAdded: (itemId) => ref.read(simulatorSessionsProvider.notifier).addSimulatorSessionItem(simulatorSession.id, itemId),
// When pin is tapped, change its isMainSimulatorSession value
onChanged: (itemId) => ref.read(simulatorSessionsProvider.notifier).updateSimulatorSessionItem(simulatorSession.id, itemId),
// When tile is swipe on the left, remove the current SimulatorSession
onRemoved: (itemId) => ref.read(simulatorSessionDetailProvider.notifier).removeSimulatorSessionItem(simulatorSession.id, itemId),
title: Text(simulatorSessionItemCategory.title),
simulatorSessionItemItems: simulatorSessionItemCategory.items
)
],
);
}
}Simulation Details
WidgetSimulationDetailsTotal
- List
groups; - double remainingCostAmount; -> Si remainingCostAmount < 0 => "Reste à financer" en rouge -> Sinon (>= 0) => "Solde" en vert
WidgetSimulationStats
SimulationGroupStatsItemViewModel {
String label;
double amount;
Color color;
}
// Input
- List<WidgetSimulationGroupStatsItemViewModel> itemsPréparation par Riverpod de la List
WidgetSimulationStickySummary
La ligne tout en bas de l'écran toujours visible.
final double totalResourcesAmount;
final double totalCostsAmount;
final double remainingCostAmount;WidgetSimulationDetailsFooter
final Currency currentCurrency;