From 6fbdf65b4e90881bfb1a2d9e134fd871bc3be718 Mon Sep 17 00:00:00 2001 From: leok18 <178525594+leok18@users.noreply.github.com> Date: Sat, 28 Feb 2026 14:46:53 -0800 Subject: [PATCH 1/3] improve graphs in team lookup --- lib/metrics.dart | 25 ++++++++++++---- .../team_lookup/team_lookup_details.dart | 29 ++++++++++++------- 2 files changed, 39 insertions(+), 15 deletions(-) diff --git a/lib/metrics.dart b/lib/metrics.dart index cc61abe..e5c8a3f 100644 --- a/lib/metrics.dart +++ b/lib/metrics.dart @@ -8,6 +8,7 @@ class CategoryMetric { this.hideOverview = false, this.hideFlag = false, this.max, + this.units = "", }); String abbreviatedLocalizedName; @@ -16,7 +17,7 @@ class CategoryMetric { bool hideOverview; bool hideFlag; double? max; - + String units; String path; String Function(dynamic)? valueToString; @@ -84,10 +85,9 @@ String numToStringRounded(num? num) { final List metricCategories = [ MetricCategoryData("Score", [ CategoryMetric( - localizedName: "Total", - abbreviatedLocalizedName: "Total", - path: "totalPoints", - ), + localizedName: "Total", + abbreviatedLocalizedName: "Total", + path: "totalPoints"), CategoryMetric( localizedName: "Auto", abbreviatedLocalizedName: "Auto", @@ -104,12 +104,15 @@ final List metricCategories = [ localizedName: "Scoring Rate (Fuel / Second)", abbreviatedLocalizedName: "Scoring Rate", valueToString: ((p0) => "$p0 bps"), + units: " bps", path: "fuelPerSecond", ), CategoryMetric( localizedName: "Accuracy when shooting fuel", abbreviatedLocalizedName: "Accuracy", valueToString: ((p0) => "$p0%"), + units: "%", + max: 100, path: "accuracy", ), CategoryMetric( @@ -123,12 +126,14 @@ final List metricCategories = [ localizedName: "Time Spent Feeding", abbreviatedLocalizedName: "Time Feeding", valueToString: ((p0) => "${p0}s"), + units: "s", path: "timeFeeding", ), CategoryMetric( localizedName: "Feeding Rate (Fuel / Second)", abbreviatedLocalizedName: "Feeding Rate", valueToString: ((p0) => "$p0 bps"), + units: "bps", path: "feedingRate", ), CategoryMetric( @@ -143,30 +148,36 @@ final List metricCategories = [ abbreviatedLocalizedName: "Driver Ability", valueToString: ((p0) => "$p0/5"), max: 5, + units: "1-5", path: "driverAbility", ), CategoryMetric( localizedName: "Contact Defense Time", abbreviatedLocalizedName: "Contact Defense Time", valueToString: ((p0) => "${p0}s"), + units: "s", path: "contactDefenseTime", ), CategoryMetric( localizedName: "Defense effectiveness", abbreviatedLocalizedName: "Defense effectiveness", valueToString: ((p0) => "$p0/5"), + units: "1-5", + max: 5, path: "defenseEffectiveness", ), CategoryMetric( localizedName: "Camping Defense Time", abbreviatedLocalizedName: "Camping Defense Time", valueToString: ((p0) => "${p0}s"), + units: "s", path: "campingDefenseTime", ), CategoryMetric( localizedName: "Total Defense Time (Camping + Contact)", abbreviatedLocalizedName: "Total Defense Time", valueToString: ((p0) => "${p0}s"), + units: "s", path: "totalDefenseTime", ) ]), @@ -175,24 +186,28 @@ final List metricCategories = [ localizedName: "Seconds left when starting to climb L1", abbreviatedLocalizedName: "L1 Time", valueToString: ((p0) => "${p0}s left"), + units: "s left", path: "l1StartTime", ), CategoryMetric( localizedName: "Seconds left when starting to climb L2", abbreviatedLocalizedName: "L2 Time", valueToString: ((p0) => "${p0}s left"), + units: "s left", path: "l2StartTime", ), CategoryMetric( localizedName: "Seconds left when starting to climb L3", abbreviatedLocalizedName: "L3 Time", valueToString: ((p0) => "${p0}s left"), + units: "s left", path: "l3StartTime", ), CategoryMetric( localizedName: "Seconds left in auto when starting to climb in auto", abbreviatedLocalizedName: "Auto Time", valueToString: ((p0) => "${p0}s left"), + units: "s left", path: "autoClimbStartTime", ), ]), diff --git a/lib/pages/team_lookup/team_lookup_details.dart b/lib/pages/team_lookup/team_lookup_details.dart index 09b720e..210ffb4 100644 --- a/lib/pages/team_lookup/team_lookup_details.dart +++ b/lib/pages/team_lookup/team_lookup_details.dart @@ -276,18 +276,27 @@ class AnalysisOverview bottomTitles: const AxisTitles(), topTitles: const AxisTitles(), leftTitles: AxisTitles( - axisNameWidget: Text(analysisFunction - .metric.abbreviatedLocalizedName), + axisNameWidget: Text( + "${analysisFunction.metric.abbreviatedLocalizedName} ${analysisFunction.metric.units != "" ? "(${analysisFunction.metric.units})" : ""}"), sideTitles: SideTitles( showTitles: true, - getTitlesWidget: (value, meta) => - SideTitleWidget( - meta: meta, - child: Text( - analysisFunction.metric - .valueVizualizationBuilder(value), - ), - ), + maxIncluded: true, + getTitlesWidget: (value, meta) { + final interval = meta.appliedInterval; + final isAligned = + value % interval > interval / 2; + + if (value == meta.max && + !isAligned && + max == null) { + return const Text(""); + } + + return SideTitleWidget( + meta: meta, + child: Text(numToStringRounded(value)), + ); + }, reservedSize: 50), ), rightTitles: const AxisTitles(), From 5c67007741179eccd462c773469499495ac5e932 Mon Sep 17 00:00:00 2001 From: MangoSwirl Date: Mon, 2 Mar 2026 13:20:09 -0800 Subject: [PATCH 2/3] fix formatting --- lib/metrics.dart | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/lib/metrics.dart b/lib/metrics.dart index e5c8a3f..ccba644 100644 --- a/lib/metrics.dart +++ b/lib/metrics.dart @@ -85,9 +85,10 @@ String numToStringRounded(num? num) { final List metricCategories = [ MetricCategoryData("Score", [ CategoryMetric( - localizedName: "Total", - abbreviatedLocalizedName: "Total", - path: "totalPoints"), + localizedName: "Total", + abbreviatedLocalizedName: "Total", + path: "totalPoints", + ), CategoryMetric( localizedName: "Auto", abbreviatedLocalizedName: "Auto", From 5838a8f82bd6dcd20dfa063d079993189191bc45 Mon Sep 17 00:00:00 2001 From: leok18 <178525594+leok18@users.noreply.github.com> Date: Tue, 3 Mar 2026 16:58:35 -0800 Subject: [PATCH 3/3] fix code --- lib/metrics.dart | 42 +++++++++---------- .../team_lookup/team_lookup_details.dart | 6 +-- 2 files changed, 23 insertions(+), 25 deletions(-) diff --git a/lib/metrics.dart b/lib/metrics.dart index ccba644..eb55e11 100644 --- a/lib/metrics.dart +++ b/lib/metrics.dart @@ -8,7 +8,7 @@ class CategoryMetric { this.hideOverview = false, this.hideFlag = false, this.max, - this.units = "", + this.units, }); String abbreviatedLocalizedName; @@ -17,27 +17,38 @@ class CategoryMetric { bool hideOverview; bool hideFlag; double? max; - String units; + String? units; String path; + /// Optional override for completely custom formatting. + /// If null, default formatting is used (number + units). String Function(dynamic)? valueToString; + String get abbreviatedNameWithUnits { + if (units == null || units!.trim().isEmpty) { + return abbreviatedLocalizedName; + } + return "$abbreviatedLocalizedName (${units!.trim()})"; + } + String valueVizualizationBuilder(dynamic val) { + if (val == null) return "--"; + + // If a custom formatter is provided, use it if (valueToString != null) { if (val is num) { return valueToString!(numToStringRounded(val)); - } else if (val == null) { - return "--"; - } else { - return valueToString!(val); } + return valueToString!(val); } + // Default behavior: number + units (if present) if (val is num) { - return numToStringRounded(val); + final value = numToStringRounded(val); + return units != null ? "$value$units" : value; } - return "--"; + return val.toString(); } } @@ -104,14 +115,12 @@ final List metricCategories = [ CategoryMetric( localizedName: "Scoring Rate (Fuel / Second)", abbreviatedLocalizedName: "Scoring Rate", - valueToString: ((p0) => "$p0 bps"), units: " bps", path: "fuelPerSecond", ), CategoryMetric( localizedName: "Accuracy when shooting fuel", abbreviatedLocalizedName: "Accuracy", - valueToString: ((p0) => "$p0%"), units: "%", max: 100, path: "accuracy", @@ -126,15 +135,13 @@ final List metricCategories = [ CategoryMetric( localizedName: "Time Spent Feeding", abbreviatedLocalizedName: "Time Feeding", - valueToString: ((p0) => "${p0}s"), units: "s", path: "timeFeeding", ), CategoryMetric( localizedName: "Feeding Rate (Fuel / Second)", abbreviatedLocalizedName: "Feeding Rate", - valueToString: ((p0) => "$p0 bps"), - units: "bps", + units: " bps", path: "feedingRate", ), CategoryMetric( @@ -147,7 +154,6 @@ final List metricCategories = [ CategoryMetric( localizedName: "Driver Ability", abbreviatedLocalizedName: "Driver Ability", - valueToString: ((p0) => "$p0/5"), max: 5, units: "1-5", path: "driverAbility", @@ -155,14 +161,12 @@ final List metricCategories = [ CategoryMetric( localizedName: "Contact Defense Time", abbreviatedLocalizedName: "Contact Defense Time", - valueToString: ((p0) => "${p0}s"), units: "s", path: "contactDefenseTime", ), CategoryMetric( localizedName: "Defense effectiveness", abbreviatedLocalizedName: "Defense effectiveness", - valueToString: ((p0) => "$p0/5"), units: "1-5", max: 5, path: "defenseEffectiveness", @@ -170,14 +174,12 @@ final List metricCategories = [ CategoryMetric( localizedName: "Camping Defense Time", abbreviatedLocalizedName: "Camping Defense Time", - valueToString: ((p0) => "${p0}s"), units: "s", path: "campingDefenseTime", ), CategoryMetric( localizedName: "Total Defense Time (Camping + Contact)", abbreviatedLocalizedName: "Total Defense Time", - valueToString: ((p0) => "${p0}s"), units: "s", path: "totalDefenseTime", ) @@ -186,28 +188,24 @@ final List metricCategories = [ CategoryMetric( localizedName: "Seconds left when starting to climb L1", abbreviatedLocalizedName: "L1 Time", - valueToString: ((p0) => "${p0}s left"), units: "s left", path: "l1StartTime", ), CategoryMetric( localizedName: "Seconds left when starting to climb L2", abbreviatedLocalizedName: "L2 Time", - valueToString: ((p0) => "${p0}s left"), units: "s left", path: "l2StartTime", ), CategoryMetric( localizedName: "Seconds left when starting to climb L3", abbreviatedLocalizedName: "L3 Time", - valueToString: ((p0) => "${p0}s left"), units: "s left", path: "l3StartTime", ), CategoryMetric( localizedName: "Seconds left in auto when starting to climb in auto", abbreviatedLocalizedName: "Auto Time", - valueToString: ((p0) => "${p0}s left"), units: "s left", path: "autoClimbStartTime", ), diff --git a/lib/pages/team_lookup/team_lookup_details.dart b/lib/pages/team_lookup/team_lookup_details.dart index 210ffb4..092c150 100644 --- a/lib/pages/team_lookup/team_lookup_details.dart +++ b/lib/pages/team_lookup/team_lookup_details.dart @@ -277,10 +277,10 @@ class AnalysisOverview topTitles: const AxisTitles(), leftTitles: AxisTitles( axisNameWidget: Text( - "${analysisFunction.metric.abbreviatedLocalizedName} ${analysisFunction.metric.units != "" ? "(${analysisFunction.metric.units})" : ""}"), + analysisFunction.metric.abbreviatedNameWithUnits, + ), sideTitles: SideTitles( showTitles: true, - maxIncluded: true, getTitlesWidget: (value, meta) { final interval = meta.appliedInterval; final isAligned = @@ -297,7 +297,7 @@ class AnalysisOverview child: Text(numToStringRounded(value)), ); }, - reservedSize: 50), + reservedSize: 40), ), rightTitles: const AxisTitles(), ),