Merge pull request #5 from LEG-Industries/map-functionality

Map-functionality
This commit is contained in:
Benjamin Ramhorst 2022-02-14 17:07:12 +00:00 committed by GitHub
commit 540e124ec4
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
11 changed files with 308 additions and 44 deletions

View file

@ -1,6 +1,7 @@
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.legbarkr.leg_barkr_app">
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<application
android:label="leg_barkr_app"
android:name="${applicationName}"

View file

@ -28,6 +28,8 @@
<string>LaunchScreen</string>
<key>UIMainStoryboardFile</key>
<string>Main</string>
<key>NSLocationWhenInUseUsageDescription</key>
<string>This app needs access to location when open.</string>
<key>UISupportedInterfaceOrientations</key>
<array>
<string>UIInterfaceOrientationPortrait</string>

View file

@ -2,7 +2,7 @@ import 'package:flutter/material.dart';
import 'package:firebase_auth/firebase_auth.dart';
import 'package:leg_barkr_app/view/metrics/metrics_page.dart';
import 'package:leg_barkr_app/view/steps/steps_page.dart';
import 'package:leg_barkr_app/view/map_page.dart';
import 'package:leg_barkr_app/view/map/map_page.dart';
import 'package:leg_barkr_app/view/settings_page.dart';
class HomeScreen extends StatefulWidget {

View file

@ -0,0 +1,10 @@
class LatitudeLongitude {
double latitude;
double longitude;
LatitudeLongitude(this.latitude, this.longitude);
factory LatitudeLongitude.fromJson(Map<String, dynamic> parsedJson){
return LatitudeLongitude(parsedJson['latitude'], parsedJson['longitude']);
}
}

View file

@ -0,0 +1,32 @@
import 'dart:convert';
import 'package:geolocator/geolocator.dart';
import 'package:http/http.dart' as http;
import 'package:leg_barkr_app/model/latitude_longitude.dart';
import 'package:leg_barkr_app/utils/endpoints.dart' as Endpoints;
class MapService{
Future<LatitudeLongitude> getPetLastLocation(deviceId) async {
final response = await http.get(
Uri.parse(Endpoints.getLastLocation),
headers: <String, String>{
'Content-Type': 'application/json; charset=UTF-8',
'deviceid': deviceId,
},
);
return LatitudeLongitude.fromJson(jsonDecode(response.body));
}
Future<Position> getMyLocation() async{
LocationPermission permission;
permission = await Geolocator.checkPermission();
if (permission == LocationPermission.denied) {
permission = await Geolocator.requestPermission();
if (permission == LocationPermission.deniedForever) {
throw Exception('Location denied');
}
}
return await Geolocator.getCurrentPosition();
}
}

View file

@ -1,3 +1,5 @@
const String home = "https://leg-barkr.nw.r.appspot.com/";
const String register = "https://leg-barkr.nw.r.appspot.com/authentication/register";
const String verify = "https://leg-barkr.nw.r.appspot.com/authentication/verify";
const String getLastLocation = "https://leg-barkr.nw.r.appspot.com/readings/last/location";

View file

@ -1,7 +0,0 @@
import 'package:flutter/material.dart';
class Resources {
static final Color primaryColour = Colors.green;
static final Color primaryAccentColour = Colors.greenAccent;
}

View file

@ -0,0 +1,53 @@
import 'package:flutter/material.dart';
import 'package:google_maps_flutter/google_maps_flutter.dart';
import 'package:leg_barkr_app/service/map_service.dart';
class MapPage extends StatefulWidget {
const MapPage({ Key? key }) : super(key: key);
@override
_MapPageState createState() => _MapPageState();
}
class _MapPageState extends State<MapPage> {
late GoogleMapController _mapController;
final Map<String, Marker> _markers = {};
Future<void> _onMapCreated(GoogleMapController controller) async {
_mapController = controller;
final lastLocation = await MapService().getPetLastLocation("132-567-001"); // change this.
final myLocation = await MapService().getMyLocation();
setState(() {
_markers.clear();
final petMarker = Marker(
markerId: MarkerId("pet_location"),
position: LatLng(lastLocation.latitude, lastLocation.longitude),
infoWindow: InfoWindow(title: "Pet location"));
final myMarker = Marker(
markerId: MarkerId("my_location"),
position: LatLng(myLocation.latitude, myLocation.longitude),
infoWindow: InfoWindow(title: "My location"));
_markers["pet_location"] = petMarker;
_markers["my_location"] = myMarker;
_mapController.animateCamera(CameraUpdate.newLatLng(LatLng(myLocation.latitude, myLocation.longitude)));
});
}
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
body: GoogleMap(
onMapCreated: _onMapCreated,
initialCameraPosition: CameraPosition(
target: LatLng(51.5, -0.12),
zoom: 12.0,
),
markers: _markers.values.toSet(),
),
),
);
}
}

View file

@ -1,35 +0,0 @@
import 'package:flutter/material.dart';
import 'package:google_maps_flutter/google_maps_flutter.dart';
class MapPage extends StatefulWidget {
const MapPage({ Key? key }) : super(key: key);
@override
_MapPageState createState() => _MapPageState();
}
class _MapPageState extends State<MapPage> {
late GoogleMapController _mapController;
// This will be changed, to center around the dog (once app reads metrics from the server)
final LatLng _center = const LatLng(51.498356, -0.176894);
void _onMapCreated(GoogleMapController mapController) {
_mapController = mapController;
}
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
body: GoogleMap(
onMapCreated: _onMapCreated,
initialCameraPosition: CameraPosition(
target: _center,
zoom: 16.0,
),
),
),
);
}
}

View file

@ -1,6 +1,27 @@
# Generated by pub
# See https://dart.dev/tools/pub/glossary#lockfile
packages:
_fe_analyzer_shared:
dependency: transitive
description:
name: _fe_analyzer_shared
url: "https://pub.dartlang.org"
source: hosted
version: "34.0.0"
analyzer:
dependency: transitive
description:
name: analyzer
url: "https://pub.dartlang.org"
source: hosted
version: "3.2.0"
args:
dependency: transitive
description:
name: args
url: "https://pub.dartlang.org"
source: hosted
version: "2.3.0"
async:
dependency: transitive
description:
@ -15,6 +36,20 @@ packages:
url: "https://pub.dartlang.org"
source: hosted
version: "2.1.0"
build:
dependency: transitive
description:
name: build
url: "https://pub.dartlang.org"
source: hosted
version: "2.2.1"
build_config:
dependency: transitive
description:
name: build_config
url: "https://pub.dartlang.org"
source: hosted
version: "1.0.0"
characters:
dependency: transitive
description:
@ -43,6 +78,20 @@ packages:
url: "https://pub.dartlang.org"
source: hosted
version: "0.12.0"
checked_yaml:
dependency: transitive
description:
name: checked_yaml
url: "https://pub.dartlang.org"
source: hosted
version: "2.0.1"
cli_util:
dependency: transitive
description:
name: cli_util
url: "https://pub.dartlang.org"
source: hosted
version: "0.3.5"
clock:
dependency: transitive
description:
@ -57,6 +106,20 @@ packages:
url: "https://pub.dartlang.org"
source: hosted
version: "1.15.0"
convert:
dependency: transitive
description:
name: convert
url: "https://pub.dartlang.org"
source: hosted
version: "3.0.1"
crypto:
dependency: transitive
description:
name: crypto
url: "https://pub.dartlang.org"
source: hosted
version: "3.0.1"
csslib:
dependency: transitive
description:
@ -71,6 +134,13 @@ packages:
url: "https://pub.dartlang.org"
source: hosted
version: "1.0.4"
dart_style:
dependency: transitive
description:
name: dart_style
url: "https://pub.dartlang.org"
source: hosted
version: "2.2.1"
fake_async:
dependency: transitive
description:
@ -78,6 +148,13 @@ packages:
url: "https://pub.dartlang.org"
source: hosted
version: "1.2.0"
file:
dependency: transitive
description:
name: file
url: "https://pub.dartlang.org"
source: hosted
version: "6.1.2"
firebase_auth:
dependency: "direct main"
description:
@ -149,6 +226,69 @@ packages:
description: flutter
source: sdk
version: "0.0.0"
geocoding:
dependency: "direct main"
description:
name: geocoding
url: "https://pub.dartlang.org"
source: hosted
version: "2.0.2"
geocoding_platform_interface:
dependency: transitive
description:
name: geocoding_platform_interface
url: "https://pub.dartlang.org"
source: hosted
version: "2.0.1"
geolocator:
dependency: "direct main"
description:
name: geolocator
url: "https://pub.dartlang.org"
source: hosted
version: "8.2.0"
geolocator_android:
dependency: transitive
description:
name: geolocator_android
url: "https://pub.dartlang.org"
source: hosted
version: "3.1.0"
geolocator_apple:
dependency: transitive
description:
name: geolocator_apple
url: "https://pub.dartlang.org"
source: hosted
version: "2.1.1+1"
geolocator_platform_interface:
dependency: transitive
description:
name: geolocator_platform_interface
url: "https://pub.dartlang.org"
source: hosted
version: "4.0.3"
geolocator_web:
dependency: transitive
description:
name: geolocator_web
url: "https://pub.dartlang.org"
source: hosted
version: "2.1.4"
geolocator_windows:
dependency: transitive
description:
name: geolocator_windows
url: "https://pub.dartlang.org"
source: hosted
version: "0.1.0"
glob:
dependency: transitive
description:
name: glob
url: "https://pub.dartlang.org"
source: hosted
version: "2.0.2"
google_maps:
dependency: transitive
description:
@ -219,6 +359,20 @@ packages:
url: "https://pub.dartlang.org"
source: hosted
version: "0.7.4"
json_annotation:
dependency: transitive
description:
name: json_annotation
url: "https://pub.dartlang.org"
source: hosted
version: "4.4.0"
json_serializable:
dependency: "direct main"
description:
name: json_serializable
url: "https://pub.dartlang.org"
source: hosted
version: "6.1.4"
lints:
dependency: transitive
description:
@ -254,6 +408,13 @@ packages:
url: "https://pub.dartlang.org"
source: hosted
version: "1.7.0"
package_config:
dependency: transitive
description:
name: package_config
url: "https://pub.dartlang.org"
source: hosted
version: "2.0.2"
path:
dependency: transitive
description:
@ -275,6 +436,20 @@ packages:
url: "https://pub.dartlang.org"
source: hosted
version: "2.1.2"
pub_semver:
dependency: transitive
description:
name: pub_semver
url: "https://pub.dartlang.org"
source: hosted
version: "2.1.0"
pubspec_parse:
dependency: transitive
description:
name: pubspec_parse
url: "https://pub.dartlang.org"
source: hosted
version: "1.2.0"
sanitize_html:
dependency: transitive
description:
@ -287,6 +462,20 @@ packages:
description: flutter
source: sdk
version: "0.0.99"
source_gen:
dependency: transitive
description:
name: source_gen
url: "https://pub.dartlang.org"
source: hosted
version: "1.2.1"
source_helper:
dependency: transitive
description:
name: source_helper
url: "https://pub.dartlang.org"
source: hosted
version: "1.3.1"
source_span:
dependency: transitive
description:
@ -364,6 +553,20 @@ packages:
url: "https://pub.dartlang.org"
source: hosted
version: "2.1.1"
watcher:
dependency: transitive
description:
name: watcher
url: "https://pub.dartlang.org"
source: hosted
version: "1.0.1"
yaml:
dependency: transitive
description:
name: yaml
url: "https://pub.dartlang.org"
source: hosted
version: "3.1.0"
sdks:
dart: ">=2.16.0 <3.0.0"
flutter: ">=2.5.0"
flutter: ">=2.8.0"

View file

@ -41,6 +41,9 @@ dependencies:
http: ^0.13.4
firebase_core: ^1.12.0
firebase_auth: ^3.3.7
json_serializable: ^6.1.4
geocoding: ^2.0.2
geolocator: ^8.2.0
dev_dependencies: