Data is now collected for the user's device; not hardcoded

This commit is contained in:
Benjamin Ramhorst 2022-02-15 11:06:39 +00:00
parent 3965eb2667
commit f4d0527a3d
9 changed files with 171 additions and 22 deletions

View file

@ -0,0 +1,21 @@
import 'dart:convert';
import 'package:http/http.dart' as http;
import 'package:leg_barkr_app/utils/endpoints.dart' as Endpoints;
class AuthService{
Future<List<String>> getUserDevices(sessionToken) async {
final response = await http.get(
Uri.parse(Endpoints.getUserDevices),
headers: <String, String>{
'Content-Type': 'application/json; charset=UTF-8',
'token': sessionToken,
},
);
List<dynamic> list = jsonDecode(response.body)['devices'];
List<String> res = [];
for (final l in list) {
res.add(l.toString());
}
return res;
}
}

View file

@ -14,7 +14,7 @@ class StepsService {
return jsonDecode(response.body)['cumulative_steps_today']; return jsonDecode(response.body)['cumulative_steps_today'];
} }
Future<List<dynamic>> getStepsLastFiveDays(deviceId) async { Future<List<int>> getStepsLastFiveDays(deviceId) async {
final response = await http.get( final response = await http.get(
Uri.parse(Endpoints.getStepsLastFiveDays), Uri.parse(Endpoints.getStepsLastFiveDays),
headers: <String, String>{ headers: <String, String>{
@ -22,7 +22,11 @@ class StepsService {
'deviceid': deviceId, 'deviceid': deviceId,
}, },
); );
print(jsonDecode(response.body)['daily_steps'].runtimeType); List<dynamic> list = jsonDecode(response.body)['daily_steps'];
return jsonDecode(response.body)['daily_steps']; List<int> steps = [];
for (final l in list){
steps.add(l);
}
return steps;
} }
} }

View file

@ -1,6 +1,7 @@
const String home = "https://leg-barkr.nw.r.appspot.com/"; const String home = "https://leg-barkr.nw.r.appspot.com/";
const String register = "https://leg-barkr.nw.r.appspot.com/authentication/register"; 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 verify = "https://leg-barkr.nw.r.appspot.com/authentication/verify";
const String getUserDevices = "https://leg-barkr.nw.r.appspot.com/authentication/get-user-devices";
const String getLastLocation = "https://leg-barkr.nw.r.appspot.com/readings/location/last"; const String getLastLocation = "https://leg-barkr.nw.r.appspot.com/readings/location/last";
const String getStepsToday = "https://leg-barkr.nw.r.appspot.com/readings/steps/today"; const String getStepsToday = "https://leg-barkr.nw.r.appspot.com/readings/steps/today";
const String getStepsLastFiveDays = "https://leg-barkr.nw.r.appspot.com/readings/steps/last-five-days"; const String getStepsLastFiveDays = "https://leg-barkr.nw.r.appspot.com/readings/steps/last-five-days";

View file

@ -1,9 +1,11 @@
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:firebase_auth/firebase_auth.dart'; import 'package:firebase_auth/firebase_auth.dart';
import 'package:leg_barkr_app/service/auth_service.dart';
import 'package:leg_barkr_app/view/metrics/metrics_page.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/steps/steps_page.dart';
import 'package:leg_barkr_app/view/map/map_page.dart'; import 'package:leg_barkr_app/view/map/map_page.dart';
import 'package:leg_barkr_app/view/settings/settings_page.dart'; import 'package:leg_barkr_app/view/settings/settings_page.dart';
import 'package:shared_preferences/shared_preferences.dart';
class HomeScreen extends StatefulWidget { class HomeScreen extends StatefulWidget {
const HomeScreen({Key? key}) : super(key: key); const HomeScreen({Key? key}) : super(key: key);
@ -16,13 +18,19 @@ class _HomeScreenState extends State<HomeScreen> {
int _page = 0; int _page = 0;
PageController _pageController = PageController(); PageController _pageController = PageController();
_HomeScreenState(){ _HomeScreenState() {
FirebaseAuth.instance FirebaseAuth.instance
.authStateChanges() .authStateChanges()
.listen((User? user) { .listen((User? user) async {
if (user == null) { if (user == null) {
Navigator.pushNamed(context, "/login"); Navigator.pushNamed(context, "/login");
} } else {
final prefs = await SharedPreferences.getInstance();
final String token = await user.getIdToken();
final List<String> userDevices = await AuthService().getUserDevices(token);
prefs.setStringList("devices", userDevices);
prefs.setString("current_device", userDevices[0]);
}
}); });
} }
@ -58,7 +66,7 @@ class _HomeScreenState extends State<HomeScreen> {
BottomNavigationBarItem(icon: Icon(Icons.location_on_outlined), label: 'Location'), BottomNavigationBarItem(icon: Icon(Icons.location_on_outlined), label: 'Location'),
BottomNavigationBarItem(icon: Icon(Icons.settings), label: 'Settings'), BottomNavigationBarItem(icon: Icon(Icons.settings), label: 'Settings'),
], ],
currentIndex: _page, currentIndex: _page,
selectedItemColor: Colors.green, selectedItemColor: Colors.green,
unselectedItemColor: Colors.black, unselectedItemColor: Colors.black,
showSelectedLabels: true, showSelectedLabels: true,

View file

@ -1,6 +1,7 @@
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:google_maps_flutter/google_maps_flutter.dart'; import 'package:google_maps_flutter/google_maps_flutter.dart';
import 'package:leg_barkr_app/service/map_service.dart'; import 'package:leg_barkr_app/service/map_service.dart';
import 'package:shared_preferences/shared_preferences.dart';
class MapPage extends StatefulWidget { class MapPage extends StatefulWidget {
const MapPage({ Key? key }) : super(key: key); const MapPage({ Key? key }) : super(key: key);
@ -15,8 +16,11 @@ class _MapPageState extends State<MapPage> {
Future<void> _onMapCreated(GoogleMapController controller) async { Future<void> _onMapCreated(GoogleMapController controller) async {
_mapController = controller; _mapController = controller;
final lastLocation = await MapService().getPetLastLocation("132-567-001"); // change this. final prefs = await SharedPreferences.getInstance();
final String deviceId = prefs.getString("current_device") ?? "";
final lastLocation = await MapService().getPetLastLocation(deviceId);
final myLocation = await MapService().getMyLocation(); final myLocation = await MapService().getMyLocation();
setState(() { setState(() {
_markers.clear(); _markers.clear();
final petMarker = Marker( final petMarker = Marker(

View file

@ -3,10 +3,10 @@ import 'package:leg_barkr_app/model/metrics_data.dart';
import 'package:leg_barkr_app/model/metrics_response.dart'; import 'package:leg_barkr_app/model/metrics_response.dart';
import 'package:leg_barkr_app/model/temp_series.dart'; import 'package:leg_barkr_app/model/temp_series.dart';
import 'package:leg_barkr_app/service/metrics_service.dart'; import 'package:leg_barkr_app/service/metrics_service.dart';
import 'package:shared_preferences/shared_preferences.dart';
import 'metrics_row.dart'; import 'metrics_row.dart';
import 'package:leg_barkr_app/utils/constants.dart' as Constants;
import 'temp_chart.dart'; import 'temp_chart.dart';
import 'package:leg_barkr_app/utils/constants.dart' as Constants;
class MetricsPage extends StatefulWidget { class MetricsPage extends StatefulWidget {
const MetricsPage({ Key? key }) : super(key: key); const MetricsPage({ Key? key }) : super(key: key);
@ -29,10 +29,11 @@ class _MetricsPageState extends State<MetricsPage> {
*/ */
Future<MetricsResponse> onMetricsReceived() async{ Future<MetricsResponse> onMetricsReceived() async{
return await MetricsService().getMetricsSummary("132-567-001"); final prefs = await SharedPreferences.getInstance();
final String deviceId = prefs.getString("current_device") ?? "";
return await MetricsService().getMetricsSummary(deviceId);
} }
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
return Padding( return Padding(
@ -52,7 +53,6 @@ class _MetricsPageState extends State<MetricsPage> {
children: <Widget>[ children: <Widget>[
Text("Today's summary", textAlign: TextAlign.center, style: TextStyle(color: Colors.black, fontSize: 36, fontWeight: FontWeight.bold)), Text("Today's summary", textAlign: TextAlign.center, style: TextStyle(color: Colors.black, fontSize: 36, fontWeight: FontWeight.bold)),
// Dummy data
MetricsRow(new MetricsData(metricsResponse.lastSkinTemp, metricsResponse.minSkinTemp, metricsResponse.maxSkinTemp, Constants.MIN_SKIN_TEMP, Constants.MAX_SKIN_TEMP, Constants.LOW_SKIN_TEMP_DOG, Constants.HIGH_SKIN_TEMP_DOG, "Skin temperature", "°C"), Colors.white, Colors.green, true), MetricsRow(new MetricsData(metricsResponse.lastSkinTemp, metricsResponse.minSkinTemp, metricsResponse.maxSkinTemp, Constants.MIN_SKIN_TEMP, Constants.MAX_SKIN_TEMP, Constants.LOW_SKIN_TEMP_DOG, Constants.HIGH_SKIN_TEMP_DOG, "Skin temperature", "°C"), Colors.white, Colors.green, true),
MetricsRow(new MetricsData(metricsResponse.lastHumidity, metricsResponse.minHumidity, metricsResponse.maxHumidity, Constants.MIN_HUMIDITY, Constants.MAX_HUMIDITY, Constants.LOW_HUMIDITY_DOG, Constants.HIGH_HUMIDITY_DOG, "Humidity", "%"), Colors.green, Colors.black, false), MetricsRow(new MetricsData(metricsResponse.lastHumidity, metricsResponse.minHumidity, metricsResponse.maxHumidity, Constants.MIN_HUMIDITY, Constants.MAX_HUMIDITY, Constants.LOW_HUMIDITY_DOG, Constants.HIGH_HUMIDITY_DOG, "Humidity", "%"), Colors.green, Colors.black, false),
MetricsRow(new MetricsData(metricsResponse.lastAirTemp, metricsResponse.minAirTemp, metricsResponse.maxAirTemp, Constants.MIN_AIR_TEMP, Constants.MAX_AIR_TEMP, Constants.LOW_AIR_TEMP_DOG, Constants.HIGH_AIR_TEMP_DOG, "Air temperature", "°C"), Colors.white, Colors.green, true), MetricsRow(new MetricsData(metricsResponse.lastAirTemp, metricsResponse.minAirTemp, metricsResponse.maxAirTemp, Constants.MIN_AIR_TEMP, Constants.MAX_AIR_TEMP, Constants.LOW_AIR_TEMP_DOG, Constants.HIGH_AIR_TEMP_DOG, "Air temperature", "°C"), Colors.white, Colors.green, true),

View file

@ -3,6 +3,7 @@ import 'package:leg_barkr_app/model/steps_series.dart';
import 'package:leg_barkr_app/service/steps_service.dart'; import 'package:leg_barkr_app/service/steps_service.dart';
import 'package:leg_barkr_app/view/steps/steps_chart.dart'; import 'package:leg_barkr_app/view/steps/steps_chart.dart';
import 'package:leg_barkr_app/view/steps/steps_today.dart'; import 'package:leg_barkr_app/view/steps/steps_today.dart';
import 'package:shared_preferences/shared_preferences.dart';
class StepsPage extends StatefulWidget { class StepsPage extends StatefulWidget {
const StepsPage({ Key? key }) : super(key: key); const StepsPage({ Key? key }) : super(key: key);
@ -14,12 +15,9 @@ class StepsPage extends StatefulWidget {
class _StepsPageState extends State<StepsPage> { class _StepsPageState extends State<StepsPage> {
Future<List<int>> onStepsRetrieved() async{ Future<List<int>> onStepsRetrieved() async{
List<dynamic> res = await StepsService().getStepsLastFiveDays("132-567-001"); final prefs = await SharedPreferences.getInstance();
List<int> steps = []; final String deviceId = prefs.getString("current_device") ?? "";
for (int i = 0; i < res.length; i++){ return await StepsService().getStepsLastFiveDays(deviceId);
steps.add(res[i]);
}
return steps;
} }
@override @override

View file

@ -148,6 +148,13 @@ packages:
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "1.2.0" version: "1.2.0"
ffi:
dependency: transitive
description:
name: ffi
url: "https://pub.dartlang.org"
source: hosted
version: "1.1.2"
file: file:
dependency: transitive dependency: transitive
description: description:
@ -422,6 +429,27 @@ packages:
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "1.8.0" version: "1.8.0"
path_provider_linux:
dependency: transitive
description:
name: path_provider_linux
url: "https://pub.dartlang.org"
source: hosted
version: "2.1.5"
path_provider_platform_interface:
dependency: transitive
description:
name: path_provider_platform_interface
url: "https://pub.dartlang.org"
source: hosted
version: "2.0.3"
path_provider_windows:
dependency: transitive
description:
name: path_provider_windows
url: "https://pub.dartlang.org"
source: hosted
version: "2.0.5"
pedantic: pedantic:
dependency: transitive dependency: transitive
description: description:
@ -429,6 +457,13 @@ packages:
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "1.11.1" version: "1.11.1"
platform:
dependency: transitive
description:
name: platform
url: "https://pub.dartlang.org"
source: hosted
version: "3.1.0"
plugin_platform_interface: plugin_platform_interface:
dependency: transitive dependency: transitive
description: description:
@ -436,6 +471,13 @@ packages:
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "2.1.2" version: "2.1.2"
process:
dependency: transitive
description:
name: process
url: "https://pub.dartlang.org"
source: hosted
version: "4.2.4"
pub_semver: pub_semver:
dependency: transitive dependency: transitive
description: description:
@ -457,6 +499,62 @@ packages:
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "2.0.0" version: "2.0.0"
shared_preferences:
dependency: "direct main"
description:
name: shared_preferences
url: "https://pub.dartlang.org"
source: hosted
version: "2.0.13"
shared_preferences_android:
dependency: transitive
description:
name: shared_preferences_android
url: "https://pub.dartlang.org"
source: hosted
version: "2.0.11"
shared_preferences_ios:
dependency: transitive
description:
name: shared_preferences_ios
url: "https://pub.dartlang.org"
source: hosted
version: "2.0.10"
shared_preferences_linux:
dependency: transitive
description:
name: shared_preferences_linux
url: "https://pub.dartlang.org"
source: hosted
version: "2.1.0"
shared_preferences_macos:
dependency: transitive
description:
name: shared_preferences_macos
url: "https://pub.dartlang.org"
source: hosted
version: "2.0.3"
shared_preferences_platform_interface:
dependency: transitive
description:
name: shared_preferences_platform_interface
url: "https://pub.dartlang.org"
source: hosted
version: "2.0.0"
shared_preferences_web:
dependency: transitive
description:
name: shared_preferences_web
url: "https://pub.dartlang.org"
source: hosted
version: "2.0.3"
shared_preferences_windows:
dependency: transitive
description:
name: shared_preferences_windows
url: "https://pub.dartlang.org"
source: hosted
version: "2.1.0"
sky_engine: sky_engine:
dependency: transitive dependency: transitive
description: flutter description: flutter
@ -560,6 +658,20 @@ packages:
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "1.0.1" version: "1.0.1"
win32:
dependency: transitive
description:
name: win32
url: "https://pub.dartlang.org"
source: hosted
version: "2.4.0"
xdg_directories:
dependency: transitive
description:
name: xdg_directories
url: "https://pub.dartlang.org"
source: hosted
version: "0.2.0+1"
yaml: yaml:
dependency: transitive dependency: transitive
description: description:

View file

@ -44,6 +44,7 @@ dependencies:
json_serializable: ^6.1.4 json_serializable: ^6.1.4
geocoding: ^2.0.2 geocoding: ^2.0.2
geolocator: ^8.2.0 geolocator: ^8.2.0
shared_preferences: ^2.0.13
dev_dependencies: dev_dependencies: