dangple_mobile_tracker
A Flutter package to track user's location and monitor step count and pedestrian status.
Features
- Monitor real-time step count.
- Detect pedestrian status (e.g., walking, stopped).
- Fully compatible with Flutter applications.
- Simple API to integrate step and status tracking in your app.
Permissions
Ensure the app requests Activity Recognition permission to track steps. Add the following to your AndroidManifest.xml:
<uses-permission android:name="android.permission.ACTIVITY_RECOGNITION" />
Usage
Below is an example app using dangple_mobile_tracker to display the step count and pedestrian status:
Example
import 'dart:async';
import 'package:dangple_mobile_tracker/dangple_mobile_tracker.dart';
import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';
import 'package:pedometer/pedometer.dart';
import 'package:permission_handler/permission_handler.dart';
String formatDate(DateTime d) {
return d.toString().substring(0, 19);
}
void main() {
runApp(const MyApp());
}
class MyApp extends StatefulWidget {
const MyApp({super.key});
@override
State createState() => _MyAppState();
}
class _MyAppState extends State<MyApp> {
late Stream<DangpleStepCount> _stepCountStream;
late Stream<PedestrianStatus> _pedestrianStatusStream;
String _status = '?', _steps = '?';
@override
void initState() {
super.initState();
initPlatformState();
}
void onStepCount(DangpleStepCount event) {
if (kDebugMode) {
print(event);
}
setState(() {
_steps = event.steps.toString();
});
}
void onPedestrianStatusChanged(PedestrianStatus event) {
if (kDebugMode) {
print(event);
}
setState(() {
_status = event.status;
});
}
void onPedestrianStatusError(error) {
if (kDebugMode) {
print('onPedestrianStatusError: $error');
}
setState(() {
_status = 'Pedestrian Status not available';
});
if (kDebugMode) {
print(_status);
}
}
void onStepCountError(error) {
if (kDebugMode) {
print('onStepCountError: $error');
}
setState(() {
_steps = 'Step Count not available';
});
}
Future<bool> _checkActivityRecognitionPermission() async {
bool granted = await Permission.activityRecognition.isGranted;
if (!granted) {
granted = await Permission.activityRecognition.request() ==
PermissionStatus.granted;
}
return granted;
}
Future<void> initPlatformState() async {
bool granted = await _checkActivityRecognitionPermission();
if (!granted) {
// tell user, the app will not work
}
_pedestrianStatusStream = Pedometer.pedestrianStatusStream;
(_pedestrianStatusStream.listen(onPedestrianStatusChanged))
.onError(onPedestrianStatusError);
_stepCountStream = DangplePedometer.stepCountStream;
_stepCountStream.listen(onStepCount).onError(onStepCountError);
if (!mounted) return;
}
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: const Text('Pedometer Example'),
),
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
const Text(
'Steps Taken',
style: TextStyle(fontSize: 30),
),
Text(
_steps,
style: const TextStyle(fontSize: 60),
),
const Divider(
height: 100,
thickness: 0,
color: Colors.white,
),
const Text(
'Pedestrian Status',
style: TextStyle(fontSize: 30),
),
Icon(
_status == 'walking'
? Icons.directions_walk
: _status == 'stopped'
? Icons.accessibility_new
: Icons.error,
size: 100,
),
Center(
child: Text(
_status,
style: _status == 'walking' || _status == 'stopped'
? const TextStyle(fontSize: 30)
: const TextStyle(fontSize: 20, color: Colors.red),
),
)
],
),
),
),
);
}
}
API Reference
DangpleStepCount: Provides step count details.Pedometer.pedestrianStatusStream: Detects whether the user is walking or stopped.PermissionHandler: Used for checking and requesting activity recognition permissions.
License
This project is licensed under the MIT License. See the LICENSE file for details.
Contributing
Feel free to submit issues or pull requests. Contributions are always welcome!