Skip to content

Commit

Permalink
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
314: badges completed
Browse files Browse the repository at this point in the history
- set margin between badges correctly
- store recent stats to only update every 5 minutes
Stift committed Jan 28, 2025
1 parent 448045c commit 0ae6125
Showing 8 changed files with 63 additions and 22 deletions.
1 change: 1 addition & 0 deletions lib/app/services/converters.dart
Original file line number Diff line number Diff line change
@@ -28,3 +28,4 @@ part 'converters/poi_parsing.dart';
part 'converters/slider_range_parsing.dart';
part 'converters/place_parser.dart';
part 'converters/string_extension.dart';
part 'converters/date_time_parsing.dart';
13 changes: 13 additions & 0 deletions lib/app/services/converters/date_time_parsing.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
part of '../converters.dart';

extension DateTimeParsing on DateTime {
String getAsLocalDateTimeString() {
DateTime utcDateTime = this;
DateTime localDateTime = utcDateTime.toLocal();
final dateString = DateFormat(t.campaigns.poster.date_format).format(localDateTime);
final timeString = DateFormat(t.campaigns.poster.time_format).format(localDateTime);
return t.campaigns.poster.datetime_display_template
.replaceAll('{date}', dateString)
.replaceAll('{time}', timeString);
}
}
18 changes: 2 additions & 16 deletions lib/app/services/gruene_api_campaigns_statistics_service.dart
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
import 'package:flutter/material.dart';
import 'package:get_it/get_it.dart';
import 'package:gruene_app/features/campaigns/models/statistics/campaign_statistics.dart';
import 'package:gruene_app/features/campaigns/models/statistics/campaign_statistics_set.dart';
import 'package:gruene_app/swagger_generated_code/gruene_api.swagger.dart';

class GrueneApiCampaignsStatisticsService {
@@ -41,19 +43,3 @@ extension PoiStatisticsParser on PoiStatistics {
);
}
}

class CampaignStatisticsSet {
final double own, division, state, germany;

const CampaignStatisticsSet({required this.own, required this.division, required this.state, required this.germany});
}

class CampaignStatistics {
final CampaignStatisticsSet flyerStats, houseStats, posterStats;

const CampaignStatistics({
required this.flyerStats,
required this.houseStats,
required this.posterStats,
});
}
4 changes: 4 additions & 0 deletions lib/features/campaigns/helper/campaign_session_settings.dart
Original file line number Diff line number Diff line change
@@ -1,10 +1,14 @@
import 'package:gruene_app/app/services/nominatim_service.dart';
import 'package:gruene_app/features/campaigns/models/statistics/campaign_statistics.dart';
import 'package:maplibre_gl/maplibre_gl.dart';

class CampaignSessionSettings {
LatLng? lastPosition;
double? lastZoomLevel;

CampaignStatistics? recentStatistics;
DateTime? recentStatisticsFetchTimestamp;

bool imageConsentConfirmed = false;

String? searchString;
11 changes: 11 additions & 0 deletions lib/features/campaigns/models/statistics/campaign_statistics.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
import 'package:gruene_app/features/campaigns/models/statistics/campaign_statistics_set.dart';

class CampaignStatistics {
final CampaignStatisticsSet flyerStats, houseStats, posterStats;

const CampaignStatistics({
required this.flyerStats,
required this.houseStats,
required this.posterStats,
});
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
class CampaignStatisticsSet {
final double own, division, state, germany;

const CampaignStatisticsSet({
required this.own,
required this.division,
required this.state,
required this.germany,
});
}
25 changes: 20 additions & 5 deletions lib/features/campaigns/screens/statistics_screen.dart
Original file line number Diff line number Diff line change
@@ -1,9 +1,13 @@
import 'package:flutter/material.dart';
import 'package:flutter_svg/flutter_svg.dart';
import 'package:get_it/get_it.dart';
import 'package:gruene_app/app/services/converters.dart';
import 'package:gruene_app/app/services/gruene_api_campaigns_statistics_service.dart';
import 'package:gruene_app/app/theme/theme.dart';
import 'package:gruene_app/features/campaigns/helper/app_settings.dart';
import 'package:gruene_app/features/campaigns/helper/campaign_constants.dart';
import 'package:gruene_app/features/campaigns/models/statistics/campaign_statistics.dart';
import 'package:gruene_app/features/campaigns/models/statistics/campaign_statistics_set.dart';
import 'package:gruene_app/i18n/translations.g.dart';
import 'package:intl/intl.dart';

@@ -26,6 +30,7 @@ class StatisticsScreen extends StatelessWidget {
}

SingleChildScrollView _buildStatScreen(CampaignStatistics statistics, ThemeData theme, BuildContext context) {
var lastUpdateTime = GetIt.I<AppSettings>().campaign.recentStatisticsFetchTimestamp ?? DateTime.now();
return SingleChildScrollView(
child: Container(
padding: EdgeInsets.all(16),
@@ -57,7 +62,7 @@ class StatisticsScreen extends StatelessWidget {
child: Align(
alignment: Alignment.centerLeft,
child: Text(
'Stand: ${DateTime.now().toString()} (${t.campaigns.statistic.update_info})',
'${t.campaigns.statistic.as_at}: ${lastUpdateTime.getAsLocalDateTimeString()} (${t.campaigns.statistic.update_info})',
style: theme.textTheme.labelMedium!.apply(color: ThemeColors.textDisabled),
),
),
@@ -111,7 +116,6 @@ class StatisticsScreen extends StatelessWidget {
}

Widget _getBadgeRow(String title, int ownCounter, ThemeData theme) {
// var rng = Random();
return Container(
decoration: BoxDecoration(
border: Border(
@@ -158,7 +162,7 @@ class StatisticsScreen extends StatelessWidget {
alignment: Alignment.center,
child: Text(
currentThreshold.toString(),
style: theme.textTheme.labelMedium!.apply(fontWeightDelta: 3),
style: theme.textTheme.labelMedium!.apply(fontWeightDelta: 3, fontStyle: FontStyle.italic),
),
),
),
@@ -193,7 +197,7 @@ class StatisticsScreen extends StatelessWidget {
),
);
}
widgets.add(SizedBox(width: 6));
if (currentThreshold != thresholds.last) widgets.add(SizedBox(width: 5));
}
return widgets;
}
@@ -266,7 +270,18 @@ class StatisticsScreen extends StatelessWidget {
}

Future<CampaignStatistics> _loadStatistics() async {
var campaignSettings = GetIt.I<AppSettings>().campaign;

if (campaignSettings.recentStatistics != null &&
DateTime.now().isBefore(campaignSettings.recentStatisticsFetchTimestamp!.add(Duration(minutes: 5)))) {
return campaignSettings.recentStatistics!;
}
var statApiService = GetIt.I<GrueneApiCampaignsStatisticsService>();
return await statApiService.getStatistics();
var campaignStatistics = await statApiService.getStatistics();

campaignSettings.recentStatistics = campaignStatistics;
campaignSettings.recentStatisticsFetchTimestamp = DateTime.now();

return campaignStatistics;
}
}
3 changes: 2 additions & 1 deletion lib/i18n/app_de.json
Original file line number Diff line number Diff line change
@@ -122,7 +122,8 @@
"by_my_KV": "von meinen Kreisverband",
"by_my_LV": "von meinem Landesverband",
"in_germany": "deutschlandweit",
"update_info": "wird alle 5 Minuten aktualisiert"
"update_info": "wird alle 5 Minuten aktualisiert",
"as_at": "Stand"
},
"address": {
"street": "Straße",

0 comments on commit 0ae6125

Please sign in to comment.