import 'package:flutter/material.dart'; import 'package:mensaappbackend/modules/ratingCard.dart'; import 'package:provider/provider.dart'; import 'package:mensaappbackend/providers/timeProvider.dart'; class BuilderTodayAverage { static Widget _getRatingWidget( var q1, var q2, var page, var essen, var ratingNames, var context) { Widget card = Column( children: [ Container( padding: const EdgeInsets.all(15), decoration: BoxDecoration( boxShadow: [ BoxShadow( color: Colors.grey.withOpacity(0.5), spreadRadius: 5, blurRadius: 7, offset: const Offset(0, 3)) ], borderRadius: BorderRadius.circular(15), color: Theme.of(context).colorScheme.surface.withOpacity(0.8)), child: RatingCard( rating1: q1, rating2: q2, title: ratingNames[page]["title"] + (essen == -1 ? "" : "$essen"), rating1Title: ratingNames[page]["q1"], rating2Title: ratingNames[page]["q2"], text: "", ), ), const SizedBox( height: 20, ) ], ); if (q1 != 0) { return card; } else { return Container(); } } static Widget build(var context, var snapshot, var ratingNames) { var data = snapshot.data; if (data == null) { return const Center(); } var avgP1F1 = [0.0, 0.0, 0]; var avgP1F2 = [0.0, 0.0, 0]; var avgP1F3 = [0.0, 0.0, 0]; var avgP2 = [0.0, 0.0, 0]; var avgP3 = [0.0, 0.0, 0]; var foodIdx = 1; var foodNameMap = {}; var foodMap = {1: avgP1F1, 2: avgP1F2, 3: avgP1F3}; for (var map in data) { var ratings = map["ratings"]; ratings["page1"]["food"] = ratings["page1"]["food"].toString(); print(ratings["page1"]["food"]); ratings["page1"]["food"] = ratings["page1"]["food"]; if (!foodNameMap.containsKey(ratings["page1"]["food"])) { foodNameMap[ratings["page1"]["food"]] = foodIdx; foodIdx++; } var food = foodNameMap[ratings["page1"]["food"]]; var page1 = ratings["page1"], page2 = ratings["page2"], page3 = ratings["page3"]; foodMap[food]?[0] += page1["q1"]; foodMap[food]?[1] += page1["q2"]; foodMap[food]?[2] += page1["q1"] == 0 ? 0 : 1; avgP2[0] += page2["q1"]; avgP2[1] += page2["q2"]; avgP2[2] += page2["q1"] == 0 ? 0 : 1; avgP3[0] += page3["q1"]; avgP3[1] += page3["q2"]; avgP3[2] += page3["q1"] == 0 ? 0 : 1; } for (var i in [1, 2, 3]) { foodMap[i]?[0] = (foodMap[i]![0] / (foodMap[i]![2] == 0 ? 1 : foodMap[i]![2])).toInt(); foodMap[i]?[1] = (foodMap[i]![1] / (foodMap[i]![2] == 0 ? 1 : foodMap[i]![2])).toInt(); } avgP2[0] = (avgP2[0] / avgP2[2] == 0 ? 1 : avgP2[2]).toInt(); avgP2[1] = (avgP2[1] / avgP2[2] == 0 ? 1 : avgP2[2]).toInt(); avgP3[0] = (avgP3[0] / avgP3[2] == 0 ? 1 : avgP3[2]).toInt(); avgP3[1] = (avgP3[1] / avgP3[2] == 0 ? 1 : avgP3[2]).toInt(); return SingleChildScrollView( child: Center( child: Column( crossAxisAlignment: CrossAxisAlignment.center, children: [ const SizedBox( height: 20, ), Consumer( builder: (context, timeProvider, child) { // Dynamischer Text basierend auf TimeProvider String text = timeProvider.selectedTime == 1 ? "Heute - Durchschnitt" : "Letzte 7 Tage - Durchschnitt"; return Text( text, style: const TextStyle(fontSize: 25), ); }, ), const SizedBox( height: 20, ), Column( crossAxisAlignment: CrossAxisAlignment.center, children: [ _getRatingWidget(avgP1F1[0], avgP1F1[1], "page1", foodNameMap.keys.elementAtOrNull(0), ratingNames, context), _getRatingWidget(avgP1F2[0], avgP1F2[1], "page1", foodNameMap.keys.elementAtOrNull(1), ratingNames, context), _getRatingWidget(avgP1F3[0], avgP1F3[1], "page1", foodNameMap.keys.elementAtOrNull(2), ratingNames, context), _getRatingWidget( avgP2[0], avgP2[1], "page2", -1, ratingNames, context), _getRatingWidget( avgP3[0], avgP3[1], "page3", -1, ratingNames, context) ], ) ], ), ), ); } }