mirror of
https://github.com/SyncrowIOT/web.git
synced 2025-07-10 15:17:31 +00:00
randomize generated fake data in FakeAirQualityDistributionService
.
This commit is contained in:
@ -11,23 +11,54 @@ class FakeAirQualityDistributionService implements AirQualityDistributionService
|
|||||||
Future<List<AirQualityDataModel>> getAirQualityDistribution(
|
Future<List<AirQualityDataModel>> getAirQualityDistribution(
|
||||||
GetAirQualityDistributionParam param,
|
GetAirQualityDistributionParam param,
|
||||||
) async {
|
) async {
|
||||||
return List.generate(30, (index) {
|
return Future.delayed(
|
||||||
final date = DateTime(2025, 5, 1).add(Duration(days: index));
|
const Duration(milliseconds: 400),
|
||||||
|
() => List.generate(30, (index) {
|
||||||
|
final date = DateTime(2025, 5, 1).add(Duration(days: index));
|
||||||
|
|
||||||
final values = _generateRandomPercentages();
|
final values = _generateRandomPercentages();
|
||||||
|
final nullMask = List.generate(6, (_) => _shouldBeNull());
|
||||||
|
|
||||||
return AirQualityDataModel(
|
// If all values are null, force at least one to be non-null
|
||||||
date: date,
|
if (nullMask.every((isNull) => isNull)) {
|
||||||
good: values[0],
|
nullMask[_random.nextInt(6)] = false;
|
||||||
moderate: values[1],
|
}
|
||||||
poor: values[2],
|
|
||||||
unhealthy: values[3],
|
// Redistribute percentages among non-null values
|
||||||
severe: values[4],
|
final nonNullValues = _redistributePercentages(values, nullMask);
|
||||||
hazardous: values[5],
|
|
||||||
);
|
return AirQualityDataModel(
|
||||||
|
date: date,
|
||||||
|
good: nullMask[0] ? null : nonNullValues[0],
|
||||||
|
moderate: nullMask[1] ? null : nonNullValues[1],
|
||||||
|
poor: nullMask[2] ? null : nonNullValues[2],
|
||||||
|
unhealthy: nullMask[3] ? null : nonNullValues[3],
|
||||||
|
severe: nullMask[4] ? null : nonNullValues[4],
|
||||||
|
hazardous: nullMask[5] ? null : nonNullValues[5],
|
||||||
|
);
|
||||||
|
}),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
List<double> _redistributePercentages(
|
||||||
|
List<double> originalValues, List<bool> nullMask) {
|
||||||
|
// Calculate total of non-null values
|
||||||
|
double nonNullSum = 0;
|
||||||
|
for (int i = 0; i < originalValues.length; i++) {
|
||||||
|
if (!nullMask[i]) {
|
||||||
|
nonNullSum += originalValues[i];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Redistribute percentages to maintain 100% total
|
||||||
|
return List.generate(originalValues.length, (i) {
|
||||||
|
if (nullMask[i]) return 0;
|
||||||
|
return (originalValues[i] / nonNullSum * 100).roundToDouble();
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool _shouldBeNull() => _random.nextDouble() < 0.6;
|
||||||
|
|
||||||
List<double> _generateRandomPercentages() {
|
List<double> _generateRandomPercentages() {
|
||||||
final values = List.generate(6, (_) => _random.nextDouble());
|
final values = List.generate(6, (_) => _random.nextDouble());
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user