|
@@ -16,26 +16,20 @@ class Walking extends StatefulWidget {
|
|
|
class _WalkingState extends State<Walking> {
|
|
class _WalkingState extends State<Walking> {
|
|
|
final FlutterActivityRecognition activityRecognition = FlutterActivityRecognition.instance;
|
|
final FlutterActivityRecognition activityRecognition = FlutterActivityRecognition.instance;
|
|
|
final StreamController<Position> _streamController = StreamController.broadcast();
|
|
final StreamController<Position> _streamController = StreamController.broadcast();
|
|
|
- final StreamController<ActivityType> _simulatedActivityController = StreamController.broadcast();
|
|
|
|
|
late Stream<dynamic> _activityPositionStream;
|
|
late Stream<dynamic> _activityPositionStream;
|
|
|
|
|
|
|
|
num distance = 0;
|
|
num distance = 0;
|
|
|
Position? lastPosition;
|
|
Position? lastPosition;
|
|
|
- num points = 0;
|
|
|
|
|
|
|
+ int points = 0;
|
|
|
num totalPoints = 0;
|
|
num totalPoints = 0;
|
|
|
num totalDistance = 0;
|
|
num totalDistance = 0;
|
|
|
|
|
|
|
|
@override
|
|
@override
|
|
|
void initState() {
|
|
void initState() {
|
|
|
- // _simulatedActivityController.stream.listen(print);
|
|
|
|
|
- // activityRecognition.activityStream.listen((event) {
|
|
|
|
|
- // print(event.type);
|
|
|
|
|
- // });
|
|
|
|
|
_activityPositionStream = CombineLatestStream.combine2(
|
|
_activityPositionStream = CombineLatestStream.combine2(
|
|
|
activityRecognition.activityStream,
|
|
activityRecognition.activityStream,
|
|
|
- // _simulatedActivityController.stream,
|
|
|
|
|
- Geolocator.getPositionStream(locationSettings: LocationSettings(distanceFilter: 10)),
|
|
|
|
|
- (dynamic a, Position b) => [a, b],
|
|
|
|
|
|
|
+ Geolocator.getPositionStream(locationSettings: LocationSettings(distanceFilter: 0)),
|
|
|
|
|
+ (Activity a, Position b) => [a, b],
|
|
|
);
|
|
);
|
|
|
_activityPositionStream.listen(_calculatePoints);
|
|
_activityPositionStream.listen(_calculatePoints);
|
|
|
super.initState();
|
|
super.initState();
|
|
@@ -47,13 +41,9 @@ class _WalkingState extends State<Walking> {
|
|
|
super.dispose();
|
|
super.dispose();
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- void addScore() {
|
|
|
|
|
- WalkingServices.addScore(Score(points: 45, distance: 500));
|
|
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
void _updatePoints(num newPoints) {
|
|
void _updatePoints(num newPoints) {
|
|
|
setState(() {
|
|
setState(() {
|
|
|
- totalPoints += newPoints;
|
|
|
|
|
|
|
+ totalPoints = newPoints;
|
|
|
});
|
|
});
|
|
|
}
|
|
}
|
|
|
|
|
|
|
@@ -64,24 +54,24 @@ class _WalkingState extends State<Walking> {
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
void _calculatePoints(dynamic activityPosition) {
|
|
void _calculatePoints(dynamic activityPosition) {
|
|
|
- var activity = activityPosition[0];
|
|
|
|
|
|
|
+ var activity = activityPosition[0] as Activity;
|
|
|
var position = activityPosition[1];
|
|
var position = activityPosition[1];
|
|
|
- if (activity == ActivityType.WALKING || activity == ActivityType.RUNNING) {
|
|
|
|
|
|
|
+ if (activity.type == ActivityType.WALKING || activity.type == ActivityType.RUNNING) {
|
|
|
if (lastPosition != null) {
|
|
if (lastPosition != null) {
|
|
|
distance = Geolocator.distanceBetween(
|
|
distance = Geolocator.distanceBetween(
|
|
|
lastPosition!.latitude, lastPosition!.longitude, position.latitude, position.longitude);
|
|
lastPosition!.latitude, lastPosition!.longitude, position.latitude, position.longitude);
|
|
|
_updateDistance(distance);
|
|
_updateDistance(distance);
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
- if (distance > 0 && activity == ActivityType.WALKING) {
|
|
|
|
|
- points += distance / 10;
|
|
|
|
|
|
|
+ if (distance > 0 && activity.type == ActivityType.WALKING) {
|
|
|
|
|
+ points += (distance / 10).floor();
|
|
|
_updatePoints(points);
|
|
_updatePoints(points);
|
|
|
- } else if (distance > 0 && activity == ActivityType.RUNNING) {
|
|
|
|
|
- points += distance / 8;
|
|
|
|
|
|
|
+ } else if (distance > 0 && activity.type == ActivityType.RUNNING) {
|
|
|
|
|
+ points += (distance / 8).floor();
|
|
|
_updatePoints(points);
|
|
_updatePoints(points);
|
|
|
}
|
|
}
|
|
|
- if (activity != ActivityType.WALKING && activity != ActivityType.RUNNING && points > 0) {
|
|
|
|
|
- WalkingServices.addScore(Score(points: points.floor(), distance: 0));
|
|
|
|
|
|
|
+ if (activity.type != ActivityType.WALKING && activity.type != ActivityType.RUNNING && points > 0) {
|
|
|
|
|
+ WalkingServices.addScore(Score(points: points, distance: 0));
|
|
|
points = 0;
|
|
points = 0;
|
|
|
}
|
|
}
|
|
|
lastPosition = position;
|
|
lastPosition = position;
|
|
@@ -89,17 +79,13 @@ class _WalkingState extends State<Walking> {
|
|
|
|
|
|
|
|
@override
|
|
@override
|
|
|
Widget build(BuildContext context) {
|
|
Widget build(BuildContext context) {
|
|
|
- Geolocator.getPositionStream(locationSettings: LocationSettings(distanceFilter: 0)).listen((position) {
|
|
|
|
|
- _streamController.add(position);
|
|
|
|
|
- print(position);
|
|
|
|
|
- });
|
|
|
|
|
return Scaffold(
|
|
return Scaffold(
|
|
|
body: Center(
|
|
body: Center(
|
|
|
child: Column(
|
|
child: Column(
|
|
|
mainAxisAlignment: MainAxisAlignment.center,
|
|
mainAxisAlignment: MainAxisAlignment.center,
|
|
|
children: [
|
|
children: [
|
|
|
Text(
|
|
Text(
|
|
|
- "Walked distance since start:\n$totalDistance m",
|
|
|
|
|
|
|
+ "Walked distance since start:\n${totalDistance.round()} m",
|
|
|
textAlign: TextAlign.center,
|
|
textAlign: TextAlign.center,
|
|
|
style: const TextStyle(fontSize: 24),
|
|
style: const TextStyle(fontSize: 24),
|
|
|
),
|
|
),
|
|
@@ -109,63 +95,9 @@ class _WalkingState extends State<Walking> {
|
|
|
textAlign: TextAlign.center,
|
|
textAlign: TextAlign.center,
|
|
|
style: const TextStyle(fontSize: 24),
|
|
style: const TextStyle(fontSize: 24),
|
|
|
),
|
|
),
|
|
|
- // ElevatedButton(
|
|
|
|
|
- // onPressed: () => _simulatedActivityController.add(ActivityType.WALKING),
|
|
|
|
|
- // child: Text("WALKING"),
|
|
|
|
|
- // ),
|
|
|
|
|
- // ElevatedButton(
|
|
|
|
|
- // onPressed: () => _simulatedActivityController.add(ActivityType.RUNNING),
|
|
|
|
|
- // child: Text("RUNNING"),
|
|
|
|
|
- // ),
|
|
|
|
|
- // ElevatedButton(
|
|
|
|
|
- // onPressed: () => _simulatedActivityController.add(ActivityType.STILL),
|
|
|
|
|
- // child: Text("STILL"),
|
|
|
|
|
- // ),
|
|
|
|
|
- // StreamBuilder<dynamic>(
|
|
|
|
|
- // stream: _activityPositionStream,
|
|
|
|
|
- // builder: (context, snapshot) {
|
|
|
|
|
- // if (!snapshot.hasData) {
|
|
|
|
|
- // return CircularProgressIndicator();
|
|
|
|
|
- // }
|
|
|
|
|
- // var activity = snapshot.data![0];
|
|
|
|
|
- // var position = snapshot.data![1];
|
|
|
|
|
- // if (activity == ActivityType.WALKING || activity == ActivityType.RUNNING) {
|
|
|
|
|
- // if (lastPosition != null) {
|
|
|
|
|
- // distance = Geolocator.distanceBetween(
|
|
|
|
|
- // lastPosition!.latitude, lastPosition!.longitude, position.latitude, position.longitude);
|
|
|
|
|
- // }
|
|
|
|
|
- // }
|
|
|
|
|
- // if (distance > 0 && activity == ActivityType.WALKING) {
|
|
|
|
|
- // points += distance / 10;
|
|
|
|
|
- // } else if (distance > 0 && activity == ActivityType.RUNNING) {
|
|
|
|
|
- // points += distance / 8;
|
|
|
|
|
- // }
|
|
|
|
|
- // if (activity != ActivityType.WALKING && activity != ActivityType.RUNNING && points > 0) {
|
|
|
|
|
- // WalkingServices.addScore(Score(points: points.floor(), distance: 0));
|
|
|
|
|
- // points = 0;
|
|
|
|
|
- // }
|
|
|
|
|
- // lastPosition = position;
|
|
|
|
|
- // print(distance);
|
|
|
|
|
- // return Text("$distance");
|
|
|
|
|
- // },
|
|
|
|
|
- // ),
|
|
|
|
|
],
|
|
],
|
|
|
),
|
|
),
|
|
|
),
|
|
),
|
|
|
);
|
|
);
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
-
|
|
|
|
|
-/*
|
|
|
|
|
-Get distance only when walking or running
|
|
|
|
|
-
|
|
|
|
|
-if (walking || running) {
|
|
|
|
|
- calculateScore()
|
|
|
|
|
-}
|
|
|
|
|
-*/
|
|
|
|
|
-
|
|
|
|
|
-// --W---R----W----S----W------
|
|
|
|
|
-
|
|
|
|
|
-// --P--P--P--P--P--P
|
|
|
|
|
-
|
|
|
|
|
-// --[W,P]--[W,P]--[R,P]--
|
|
|