diff --git a/lib/main.dart b/lib/main.dart index ced47616b66743b376a334036dc95de846b5c057..78136d0f88bf96b7cb41c0db5456a3528f4139d6 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -8,6 +8,7 @@ import 'widgets/returnDestination.dart'; import 'package:geocoding/geocoding.dart'; import 'package:geolocator/geolocator.dart'; import 'package:http/http.dart' as http; +import 'dart:async'; import 'dart:convert'; import 'package:weather_icons/weather_icons.dart'; import 'config/config.dart'; @@ -90,6 +91,7 @@ class _MyHomePageState extends State<MyHomePage> { // Weather API var _forecastList = []; bool _isCollapsed = false; + bool _isLoading = false; // Format input text. String getFormattedText(String inputText) { @@ -164,9 +166,16 @@ class _MyHomePageState extends State<MyHomePage> { // -----------Section For Map Operations, Coords, Polyline..---------------- // Get shortest path. void _getShortestPath() async { - _getWeather(); _resetPolyline(); - _getDirections(); + + _isLoading = true; + + await Future.wait<void>([ + _getWeather(), + _getDirections(), + ]); + + _isLoading = false; } // Add markers for origin/dest coords. @@ -206,8 +215,23 @@ class _MyHomePageState extends State<MyHomePage> { }); } + void _showMessage(String string, BuildContext context) { + showDialog<String>( + context: context, + builder: (BuildContext context) => AlertDialog( + content: Text(string), + actions: <Widget>[ + TextButton( + onPressed: () => Navigator.pop(context, 'OK'), + child: const Text('OK'), + ), + ], + ), + ); + } + // Get coords between origin/dest points corresponding to shortest path. - void _getDirections() async { + Future<void> _getDirections() async { _resetPolyline(); try { var originlat = _originCoordinates.latitude; @@ -228,6 +252,18 @@ class _MyHomePageState extends State<MyHomePage> { }), headers: <String, String>{"Content-Type": "application/json"}); _data = jsonDecode(response.body); + + if (_data.containsKey('error_code') && _data['error_code'] != 0) { + switch(_data['error_code']) { + case 1: + _showMessage('The address is outside the solution space. Please enter an address within Berlin-Brandenburg.', context); + return; + case 2: + _showMessage('The address could not be found.', context); + return; + } + } + var coordinates = _data['route']; int duration = _data['duration']; int distance = _data['distance']; @@ -655,7 +691,7 @@ class _MyHomePageState extends State<MyHomePage> { // ----------Section For Getting Weather Data------------ // Create weather query to the external weather API - void _getWeather() async { + Future<void> _getWeather() async { _forecastList = []; setState(() { _forecastList; @@ -997,7 +1033,7 @@ class _MyHomePageState extends State<MyHomePage> { itemBuilder: (BuildContext context, int index) { return Stack( children: [ - Column( + _isLoading ? Center(child: const CircularProgressIndicator()) : Column( children: [ Container( margin: EdgeInsets.only(bottom: 15, top: 5),