Skip to content

Commit 77b68c7

Browse files
committed
Implemented onTap behavior for points in panels, see #51.
1 parent 68623fd commit 77b68c7

14 files changed

+219
-152
lines changed

lib/map/incident_map.dart

+10-5
Original file line numberDiff line numberDiff line change
@@ -438,32 +438,37 @@ class IncidentMapState extends State<IncidentMap> with TickerProviderStateMixin
438438
MeasureTool(),
439439
POITool(
440440
_incidentBloc,
441-
active: () => _useLayers.contains(POI_LAYER),
441+
controller: _mapController,
442442
onMessage: widget.onMessage,
443+
active: () => _useLayers.contains(POI_LAYER),
443444
),
444445
UnitTool(
445446
_trackingBloc,
446447
user: _userBloc.user,
447-
active: () => _useLayers.contains(UNIT_LAYER),
448+
controller: _mapController,
448449
onMessage: widget.onMessage,
450+
active: () => _useLayers.contains(UNIT_LAYER),
449451
),
450452
PersonnelTool(
451453
_trackingBloc,
452454
user: _userBloc.user,
453-
active: () => _useLayers.contains(PERSONNEL_LAYER),
455+
controller: _mapController,
454456
onMessage: widget.onMessage,
457+
active: () => _useLayers.contains(PERSONNEL_LAYER),
455458
),
456459
DeviceTool(
457460
_trackingBloc,
458461
user: _userBloc.user,
459-
active: () => _useLayers.contains(DEVICE_LAYER),
462+
controller: _mapController,
460463
onMessage: widget.onMessage,
464+
active: () => _useLayers.contains(DEVICE_LAYER),
461465
),
462466
PositionTool(
467+
controller: _mapController,
468+
onMessage: widget.onMessage,
463469
onHide: () => setState(() => _searchMatch = null),
464470
onShow: (point) => setState(() => _searchMatch = point),
465471
onCopy: (value) => setState(() => _searchFieldKey.currentState.setQuery(value)),
466-
onMessage: widget.onMessage,
467472
)
468473
],
469474
);

lib/map/tools/device_tool.dart

+13-3
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,10 @@
1-
import 'dart:math';
1+
import 'dart:math' as math;
22

33
import 'package:SarSys/blocs/tracking_bloc.dart';
44
import 'package:SarSys/core/defaults.dart';
55
import 'package:SarSys/map/tools/map_tools.dart';
66
import 'package:SarSys/models/Device.dart';
7+
import 'package:SarSys/models/Point.dart';
78
import 'package:SarSys/models/User.dart';
89
import 'package:SarSys/services/fleet_map_service.dart';
910
import 'package:SarSys/utils/data_utils.dart';
@@ -12,20 +13,23 @@ import 'package:SarSys/widgets/device.dart';
1213
import 'package:SarSys/widgets/selector_panel.dart';
1314
import 'package:flutter/cupertino.dart';
1415
import 'package:flutter/material.dart';
16+
import 'package:flutter_map/plugin_api.dart';
1517
import 'package:latlong/latlong.dart';
1618

1719
class DeviceTool extends MapTool with MapSelectable<Device> {
1820
final User user;
1921
final TrackingBloc bloc;
20-
final MessageCallback onMessage;
2122
final bool Function() _active;
23+
final MapController controller;
24+
final MessageCallback onMessage;
2225

2326
@override
2427
bool active() => _active();
2528

2629
DeviceTool(
2730
this.bloc, {
2831
@required this.user,
32+
@required this.controller,
2933
@required bool Function() active,
3034
this.onMessage,
3135
}) : _active = active;
@@ -83,7 +87,7 @@ class DeviceTool extends MapTool with MapSelectable<Device> {
8387
elevation: 0,
8488
backgroundColor: Colors.white,
8589
child: SizedBox(
86-
height: min(tracking == null ? 496 : 680.0, MediaQuery.of(context).size.height),
90+
height: math.min(tracking == null ? 496 : 680.0, MediaQuery.of(context).size.height),
8791
width: MediaQuery.of(context).size.width - 96,
8892
child: SingleChildScrollView(
8993
child: DeviceInfoPanel(
@@ -95,11 +99,17 @@ class DeviceTool extends MapTool with MapSelectable<Device> {
9599
withActions: user?.isCommander == true,
96100
organization: FleetMapService().fetchOrganization(Defaults.organization),
97101
onComplete: (_) => Navigator.pop(context),
102+
onGoto: (point) => _goto(context, point),
98103
),
99104
),
100105
),
101106
);
102107
},
103108
);
104109
}
110+
111+
void _goto(BuildContext context, Point point) {
112+
controller.move(toLatLng(point), controller.zoom);
113+
Navigator.pop(context);
114+
}
105115
}

lib/map/tools/personnel_tool.dart

+20-5
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,9 @@
1-
import 'dart:math';
1+
import 'dart:math' as math;
22

33
import 'package:SarSys/blocs/tracking_bloc.dart';
44
import 'package:SarSys/core/defaults.dart';
55
import 'package:SarSys/map/tools/map_tools.dart';
6+
import 'package:SarSys/models/Point.dart';
67
import 'package:SarSys/models/Tracking.dart';
78
import 'package:SarSys/models/Personnel.dart';
89
import 'package:SarSys/models/User.dart';
@@ -13,13 +14,15 @@ import 'package:SarSys/widgets/selector_panel.dart';
1314
import 'package:SarSys/widgets/personnel.dart';
1415
import 'package:flutter/cupertino.dart';
1516
import 'package:flutter/material.dart';
17+
import 'package:flutter_map/plugin_api.dart';
1618
import 'package:latlong/latlong.dart';
1719

1820
class PersonnelTool extends MapTool with MapSelectable<Personnel> {
1921
final User user;
2022
final TrackingBloc bloc;
21-
final MessageCallback onMessage;
2223
final bool includeRetired;
24+
final MapController controller;
25+
final MessageCallback onMessage;
2326

2427
final bool Function() _active;
2528

@@ -29,6 +32,7 @@ class PersonnelTool extends MapTool with MapSelectable<Personnel> {
2932
PersonnelTool(
3033
this.bloc, {
3134
@required this.user,
35+
@required this.controller,
3236
@required bool Function() active,
3337
this.onMessage,
3438
this.includeRetired = false,
@@ -91,24 +95,35 @@ class PersonnelTool extends MapTool with MapSelectable<Personnel> {
9195
elevation: 0,
9296
backgroundColor: Colors.white,
9397
child: SizedBox(
94-
height: min(550.0, MediaQuery.of(context).size.height - 96),
98+
height: math.min(550.0, MediaQuery.of(context).size.height - 96),
9599
width: MediaQuery.of(context).size.width - 96,
96100
child: SingleChildScrollView(
97101
child: PersonnelInfoPanel(
98102
personnel: personnel,
99103
tracking: tracking,
100-
devices:
101-
tracking.devices.map((id) => bloc.deviceBloc.devices[id]).where((personnel) => personnel != null),
104+
devices: tracking.devices
105+
.map(
106+
(id) => bloc.deviceBloc.devices[id],
107+
)
108+
.where(
109+
(personnel) => personnel != null,
110+
),
102111
onMessage: onMessage,
103112
withActions: user.isCommander == true,
104113
organization: FleetMapService().fetchOrganization(Defaults.organization),
105114
onDelete: () => Navigator.pop(context),
106115
onComplete: (_) => Navigator.pop(context),
116+
onGoto: (point) => _goto(context, point),
107117
),
108118
),
109119
),
110120
);
111121
},
112122
);
113123
}
124+
125+
void _goto(BuildContext context, Point point) {
126+
controller.move(toLatLng(point), controller.zoom);
127+
Navigator.pop(context);
128+
}
114129
}

lib/map/tools/poi_tool.dart

+10
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,21 @@
11
import 'package:SarSys/blocs/incident_bloc.dart';
22
import 'package:SarSys/map/layers/poi_layer.dart';
33
import 'package:SarSys/map/tools/map_tools.dart';
4+
import 'package:SarSys/models/Point.dart';
45
import 'package:SarSys/usecase/poi.dart';
56
import 'package:SarSys/utils/data_utils.dart';
67
import 'package:SarSys/utils/ui_utils.dart';
78
import 'package:SarSys/widgets/poi_info_panel.dart';
89
import 'package:SarSys/widgets/selector_panel.dart';
910
import 'package:flutter/cupertino.dart';
1011
import 'package:flutter/material.dart';
12+
import 'package:flutter_map/plugin_api.dart';
1113
import 'package:latlong/latlong.dart';
1214

1315
class POITool extends MapTool with MapSelectable<POI> {
1416
final IncidentBloc bloc;
1517
final bool includeRetired;
18+
final MapController controller;
1619
final MessageCallback onMessage;
1720

1821
final bool Function() _active;
@@ -23,6 +26,7 @@ class POITool extends MapTool with MapSelectable<POI> {
2326
POITool(
2427
this.bloc, {
2528
@required bool Function() active,
29+
@required this.controller,
2630
this.onMessage,
2731
this.includeRetired = false,
2832
}) : _active = active;
@@ -96,10 +100,16 @@ class POITool extends MapTool with MapSelectable<POI> {
96100
(poi.type == POIType.IPP ? editIPP(context, bloc.current) : editMeetup(context, bloc.current)),
97101
onChanged: (changed) => setState(() => actual = changed),
98102
onComplete: () => Navigator.pop(context),
103+
onGoto: (point) => _goto(context, point),
99104
);
100105
}),
101106
);
102107
},
103108
);
104109
}
110+
111+
void _goto(BuildContext context, Point point) {
112+
controller.move(toLatLng(point), controller.zoom);
113+
Navigator.pop(context);
114+
}
105115
}

lib/map/tools/position_tool.dart

+11-1
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,18 @@
11
import 'package:SarSys/map/layers/poi_layer.dart';
22
import 'package:SarSys/map/tools/map_tools.dart';
33
import 'package:SarSys/models/Point.dart';
4+
import 'package:SarSys/utils/data_utils.dart';
45
import 'package:SarSys/utils/ui_utils.dart';
56
import 'package:SarSys/widgets/poi_info_panel.dart';
67
import 'package:flutter/cupertino.dart';
78
import 'package:flutter/material.dart';
9+
import 'package:flutter_map/plugin_api.dart';
810
import 'package:latlong/latlong.dart';
911

1012
class PositionTool extends MapTool {
11-
final MessageCallback onMessage;
1213
final VoidCallback onHide;
14+
final MapController controller;
15+
final MessageCallback onMessage;
1316
final ValueChanged<LatLng> onShow;
1417
final ValueChanged<String> onCopy;
1518

@@ -21,6 +24,7 @@ class PositionTool extends MapTool {
2124
@required this.onHide,
2225
@required this.onCopy,
2326
@required this.onMessage,
27+
@required this.controller,
2428
});
2529

2630
@override
@@ -51,10 +55,16 @@ class PositionTool extends MapTool {
5155
Navigator.pop(context, false);
5256
},
5357
onComplete: () => Navigator.pop(context, true),
58+
onGoto: (point) => _goto(context, point),
5459
),
5560
);
5661
},
5762
);
5863
if (result != true) onHide();
5964
}
65+
66+
void _goto(BuildContext context, Point point) {
67+
controller.move(toLatLng(point), controller.zoom);
68+
Navigator.pop(context);
69+
}
6070
}

lib/map/tools/unit_tool.dart

+13-3
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
1-
import 'dart:math';
1+
import 'dart:math' as math;
22

33
import 'package:SarSys/blocs/tracking_bloc.dart';
44
import 'package:SarSys/map/tools/map_tools.dart';
5+
import 'package:SarSys/models/Point.dart';
56
import 'package:SarSys/models/Tracking.dart';
67
import 'package:SarSys/models/Unit.dart';
78
import 'package:SarSys/models/User.dart';
@@ -11,13 +12,15 @@ import 'package:SarSys/widgets/selector_panel.dart';
1112
import 'package:SarSys/widgets/unit.dart';
1213
import 'package:flutter/cupertino.dart';
1314
import 'package:flutter/material.dart';
15+
import 'package:flutter_map/plugin_api.dart';
1416
import 'package:latlong/latlong.dart';
1517

1618
class UnitTool extends MapTool with MapSelectable<Unit> {
1719
final User user;
1820
final TrackingBloc bloc;
19-
final MessageCallback onMessage;
2021
final bool includeRetired;
22+
final MapController controller;
23+
final MessageCallback onMessage;
2124

2225
final bool Function() _active;
2326

@@ -27,6 +30,7 @@ class UnitTool extends MapTool with MapSelectable<Unit> {
2730
UnitTool(
2831
this.bloc, {
2932
@required this.user,
33+
@required this.controller,
3034
@required bool Function() active,
3135
this.onMessage,
3236
this.includeRetired = false,
@@ -83,7 +87,7 @@ class UnitTool extends MapTool with MapSelectable<Unit> {
8387
elevation: 0,
8488
backgroundColor: Colors.white,
8589
child: SizedBox(
86-
height: min(550.0, MediaQuery.of(context).size.height - 96),
90+
height: math.min(550.0, MediaQuery.of(context).size.height - 96),
8791
width: MediaQuery.of(context).size.width - 96,
8892
child: SingleChildScrollView(
8993
child: UnitInfoPanel(
@@ -93,11 +97,17 @@ class UnitTool extends MapTool with MapSelectable<Unit> {
9397
onMessage: onMessage,
9498
withActions: user?.isCommander == true,
9599
onComplete: (_) => Navigator.pop(context),
100+
onGoto: (point) => _goto(context, point),
96101
),
97102
),
98103
),
99104
);
100105
},
101106
);
102107
}
108+
109+
void _goto(BuildContext context, Point point) {
110+
controller.move(toLatLng(point), controller.zoom);
111+
Navigator.pop(context);
112+
}
103113
}

lib/screens/device_screen.dart

+1
Original file line numberDiff line numberDiff line change
@@ -126,6 +126,7 @@ class _DeviceScreenState extends ScreenState<DeviceScreen, String> with TickerPr
126126
onMessage: showMessage,
127127
onChanged: (device) => setState(() => _device = device),
128128
onDelete: () => Navigator.pop(context),
129+
onGoto: (point) => jumpToPoint(context, center: point),
129130
);
130131
}
131132

lib/screens/personnel_screen.dart

+1
Original file line numberDiff line numberDiff line change
@@ -134,6 +134,7 @@ class _PersonnelScreenState extends ScreenState<PersonnelScreen, String> with Ti
134134
onMessage: showMessage,
135135
onChanged: (personnel) => setState(() => _personnel = personnel),
136136
onDelete: () => Navigator.pop(context),
137+
onGoto: (point) => jumpToPoint(context, center: point),
137138
);
138139
}
139140

lib/screens/unit_screen.dart

+1
Original file line numberDiff line numberDiff line change
@@ -121,6 +121,7 @@ class _UnitScreenState extends ScreenState<UnitScreen, String> with TickerProvid
121121
onMessage: showMessage,
122122
onChanged: (unit) => setState(() => _unit = unit),
123123
onDelete: () => Navigator.pop(context),
124+
onGoto: (point) => jumpToPoint(context, center: point),
124125
);
125126
}
126127

0 commit comments

Comments
 (0)