add filter by network for legs, add full export for traction
All checks were successful
Release / meta (push) Successful in 1m45s
Release / linux-build (push) Successful in 1m48s
Release / web-build (push) Successful in 1m56s
Release / android-build (push) Successful in 7m33s
Release / release-dev (push) Successful in 30s
Release / release-master (push) Successful in 5s
All checks were successful
Release / meta (push) Successful in 1m45s
Release / linux-build (push) Successful in 1m48s
Release / web-build (push) Successful in 1m56s
Release / android-build (push) Successful in 7m33s
Release / release-dev (push) Successful in 30s
Release / release-master (push) Successful in 5s
This commit is contained in:
@@ -1,5 +1,6 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:mileograph_flutter/components/legs/leg_card.dart';
|
||||
import 'package:mileograph_flutter/components/widgets/multi_select_filter.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';
|
||||
@@ -19,6 +20,9 @@ class _LegsPageState extends State<LegsPage> {
|
||||
bool _initialised = false;
|
||||
bool _unallocatedOnly = false;
|
||||
bool _showMoreFilters = false;
|
||||
bool _loadingNetworks = false;
|
||||
List<String> _availableNetworks = [];
|
||||
List<String> _selectedNetworks = [];
|
||||
|
||||
@override
|
||||
void didChangeDependencies() {
|
||||
@@ -26,9 +30,21 @@ class _LegsPageState extends State<LegsPage> {
|
||||
if (!_initialised) {
|
||||
_initialised = true;
|
||||
_refreshLegs();
|
||||
_loadNetworks();
|
||||
}
|
||||
}
|
||||
|
||||
Future<void> _loadNetworks() async {
|
||||
setState(() => _loadingNetworks = true);
|
||||
final data = context.read<DataService>();
|
||||
await data.fetchStationNetworks();
|
||||
if (!mounted) return;
|
||||
setState(() {
|
||||
_availableNetworks = data.stationNetworks;
|
||||
_loadingNetworks = false;
|
||||
});
|
||||
}
|
||||
|
||||
Future<void> _refreshLegs() async {
|
||||
final data = context.read<DataService>();
|
||||
await data.fetchLegs(
|
||||
@@ -36,6 +52,7 @@ class _LegsPageState extends State<LegsPage> {
|
||||
dateRangeStart: _formatDate(_startDate),
|
||||
dateRangeEnd: _formatDate(_endDate),
|
||||
unallocatedOnly: _unallocatedOnly,
|
||||
networkFilter: _selectedNetworks,
|
||||
);
|
||||
}
|
||||
|
||||
@@ -48,6 +65,7 @@ class _LegsPageState extends State<LegsPage> {
|
||||
offset: data.legs.length,
|
||||
append: true,
|
||||
unallocatedOnly: _unallocatedOnly,
|
||||
networkFilter: _selectedNetworks,
|
||||
);
|
||||
}
|
||||
|
||||
@@ -90,6 +108,7 @@ class _LegsPageState extends State<LegsPage> {
|
||||
_sortDirection = 0;
|
||||
_unallocatedOnly = false;
|
||||
_showMoreFilters = false;
|
||||
_selectedNetworks = [];
|
||||
});
|
||||
_refreshLegs();
|
||||
}
|
||||
@@ -209,6 +228,16 @@ class _LegsPageState extends State<LegsPage> {
|
||||
spacing: 12,
|
||||
runSpacing: 12,
|
||||
children: [
|
||||
MultiSelectFilter(
|
||||
label: 'Networks',
|
||||
options: _availableNetworks,
|
||||
selected: _selectedNetworks,
|
||||
onChanged: (vals) async {
|
||||
setState(() => _selectedNetworks = vals);
|
||||
await _refreshLegs();
|
||||
},
|
||||
onRefresh: _loadingNetworks ? null : _loadNetworks,
|
||||
),
|
||||
FilterChip(
|
||||
avatar: const Icon(Icons.flash_off),
|
||||
label: const Text('Unallocated only'),
|
||||
@@ -218,6 +247,15 @@ class _LegsPageState extends State<LegsPage> {
|
||||
await _refreshLegs();
|
||||
},
|
||||
),
|
||||
if (_loadingNetworks)
|
||||
const Padding(
|
||||
padding: EdgeInsets.only(left: 8.0),
|
||||
child: SizedBox(
|
||||
height: 20,
|
||||
width: 20,
|
||||
child: CircularProgressIndicator(strokeWidth: 2),
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
|
||||
Reference in New Issue
Block a user