Add ability to select distance unit
Some checks failed
Some checks failed
This commit is contained in:
@@ -2,6 +2,7 @@ import 'package:flutter/material.dart';
|
||||
import 'package:intl/intl.dart';
|
||||
import 'package:mileograph_flutter/objects/objects.dart';
|
||||
import 'package:mileograph_flutter/services/data_service.dart';
|
||||
import 'package:mileograph_flutter/services/distance_unit_service.dart';
|
||||
import 'package:provider/provider.dart';
|
||||
|
||||
class StatsPage extends StatefulWidget {
|
||||
@@ -12,7 +13,6 @@ class StatsPage extends StatefulWidget {
|
||||
}
|
||||
|
||||
class _StatsPageState extends State<StatsPage> {
|
||||
final NumberFormat _mileageFormat = NumberFormat('#,##0.##');
|
||||
final NumberFormat _countFormat = NumberFormat.decimalPattern();
|
||||
|
||||
@override
|
||||
@@ -30,16 +30,20 @@ class _StatsPageState extends State<StatsPage> {
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
final data = context.watch<DataService>();
|
||||
final distanceUnits = context.watch<DistanceUnitService>();
|
||||
return Scaffold(
|
||||
appBar: AppBar(title: const Text('Stats')),
|
||||
body: RefreshIndicator(
|
||||
onRefresh: () => _loadStats(force: true),
|
||||
child: _buildContent(data),
|
||||
child: _buildContent(data, distanceUnits),
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
Widget _buildContent(DataService data) {
|
||||
Widget _buildContent(
|
||||
DataService data,
|
||||
DistanceUnitService distanceUnits,
|
||||
) {
|
||||
final stats = data.aboutStats;
|
||||
final loading = data.isAboutStatsLoading;
|
||||
|
||||
@@ -79,13 +83,14 @@ class _StatsPageState extends State<StatsPage> {
|
||||
itemBuilder: (context, index) {
|
||||
return Padding(
|
||||
padding: EdgeInsets.only(bottom: index == years.length - 1 ? 0 : 12),
|
||||
child: _buildYearCard(context, years[index]),
|
||||
child: _buildYearCard(context, years[index], distanceUnits),
|
||||
);
|
||||
},
|
||||
);
|
||||
}
|
||||
|
||||
Widget _buildYearCard(BuildContext context, StatsYear year) {
|
||||
Widget _buildYearCard(
|
||||
BuildContext context, StatsYear year, DistanceUnitService distanceUnits) {
|
||||
final theme = Theme.of(context);
|
||||
return Card(
|
||||
child: Padding(
|
||||
@@ -109,7 +114,7 @@ class _StatsPageState extends State<StatsPage> {
|
||||
_buildInfoChip(
|
||||
context,
|
||||
label: 'Mileage',
|
||||
value: '${_mileageFormat.format(year.mileage)} mi',
|
||||
value: distanceUnits.format(year.mileage, decimals: 1),
|
||||
),
|
||||
_buildInfoChip(
|
||||
context,
|
||||
@@ -126,25 +131,29 @@ class _StatsPageState extends State<StatsPage> {
|
||||
title: 'Top classes',
|
||||
items: year.topClasses,
|
||||
emptyLabel: 'No class data',
|
||||
itemBuilder: (item, index) => ListTile(
|
||||
dense: true,
|
||||
contentPadding: const EdgeInsets.symmetric(horizontal: 8),
|
||||
title: Text(item.locoClass),
|
||||
trailing: Text('${_mileageFormat.format(item.mileage)} mi'),
|
||||
itemBuilder: (item, index) => ListTile(
|
||||
dense: true,
|
||||
contentPadding: const EdgeInsets.symmetric(horizontal: 8),
|
||||
title: Text(item.locoClass),
|
||||
trailing: Text(
|
||||
distanceUnits.format(item.mileage, decimals: 1),
|
||||
),
|
||||
),
|
||||
),
|
||||
),
|
||||
_buildSection<StatsNetworkMileage>(
|
||||
context,
|
||||
title: 'Top networks',
|
||||
items: year.topNetworks,
|
||||
emptyLabel: 'No network data',
|
||||
itemBuilder: (item, index) => ListTile(
|
||||
dense: true,
|
||||
contentPadding: const EdgeInsets.symmetric(horizontal: 8),
|
||||
title: Text(item.network),
|
||||
trailing: Text('${_mileageFormat.format(item.mileage)} mi'),
|
||||
itemBuilder: (item, index) => ListTile(
|
||||
dense: true,
|
||||
contentPadding: const EdgeInsets.symmetric(horizontal: 8),
|
||||
title: Text(item.network),
|
||||
trailing: Text(
|
||||
distanceUnits.format(item.mileage, decimals: 1),
|
||||
),
|
||||
),
|
||||
),
|
||||
),
|
||||
_buildSection<StatsStationVisits>(
|
||||
context,
|
||||
title: 'Top stations',
|
||||
|
||||
Reference in New Issue
Block a user