Flutter步数统计插件daily_pedometer2的使用
Flutter步数统计插件daily_pedometer2的使用
daily_pedometer2
是一个用于Flutter应用中进行步数统计的插件。它支持连续步数统计、每日步数统计以及行人的状态(如行走或停止)。此插件利用了iOS和Android设备内置的计步传感器API。
权限设置
Android
对于Android 10及以上版本,需要在AndroidManifest.xml
文件中添加以下权限:
<uses-permission android:name="android.permission.ACTIVITY_RECOGNITION" />
iOS
对于iOS,需要在Xcode项目的Info.plist
文件中添加以下条目:
<key>NSMotionUsageDescription</key>
<string>This application tracks your steps</string>
<key>UIBackgroundModes</key>
<array>
<string>processing</string>
</array>
功能介绍
- 每日步数:表示当天走过的步数。
- 步数统计:自系统上次启动以来所走的步数。
- 行人状态:包括“行走”、“停止”,若发生错误则为“未知”。
示例Demo
下面是一个完整的示例代码,展示了如何使用daily_pedometer2
插件来获取步数信息和行人状态,并将其显示在界面上。
import 'dart:developer';
import 'package:flutter/material.dart';
import 'dart:async';
import 'package:daily_pedometer2/daily_pedometer2.dart';
import 'package:permission_handler/permission_handler.dart';
String formatDate(DateTime d) {
return d.toString().substring(0, 19);
}
void main() {
runApp(MyApp());
}
class MyApp extends StatefulWidget {
@override
_MyAppState createState() => _MyAppState();
}
class _MyAppState extends State<MyApp> {
late Stream<StepCount> _dailyStepCountStream;
late Stream<StepCount> _stepCountStream;
late Stream<PedestrianStatus> _pedestrianStatusStream;
String _status = '?', _steps = '?', _dailySteps = '?';
@override
void initState() {
super.initState();
initPlatformState();
}
void onDailyStepCount(StepCount event) {
print(event);
setState(() {
_dailySteps = event.steps.toString();
});
}
void onStepCount(StepCount event) {
print(event);
setState(() {
_steps = event.steps.toString();
});
}
void onPedestrianStatusChanged(PedestrianStatus event) {
print(event);
setState(() {
_status = event.status;
});
}
void onPedestrianStatusError(error) {
print('onPedestrianStatusError: $error');
setState(() {
_status = 'Pedestrian Status not available';
});
print(_status);
}
void onStepCountError(error) {
print('onStepCountError: $error');
setState(() {
_steps = 'Step Count not available';
});
}
void onDailyStepCountError(error) {
print('onDailyStepCountError: $error');
setState(() {
_dailySteps = 'Daily Step Count not available';
});
}
void initPlatformState() async {
log('INITIALIZING THE STREAMS');
if (await Permission.activityRecognition.isDenied) {
await Permission.activityRecognition.request();
}
if (!await Permission.activityRecognition.isGranted) return;
_pedestrianStatusStream = DailyPedometer2.pedestrianStatusStream;
_pedestrianStatusStream
.listen(onPedestrianStatusChanged)
.onError(onPedestrianStatusError);
_stepCountStream = DailyPedometer2.stepCountStream;
_stepCountStream.listen(onStepCount).onError(onStepCountError);
_dailyStepCountStream = DailyPedometer2.dailyStepCountStream;
_dailyStepCountStream
.listen(onDailyStepCount)
.onError(onDailyStepCountError);
if (!mounted) return;
}
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: const Text('Pedometer Example'),
),
body: SingleChildScrollView(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
Text(
'Steps Taken',
style: TextStyle(fontSize: 30),
),
Text(
_steps,
style: TextStyle(fontSize: 60),
),
Divider(
height: 100,
thickness: 0,
color: Colors.white,
),
Text(
'Daily Steps',
style: TextStyle(fontSize: 30),
),
Text(
_dailySteps,
style: TextStyle(fontSize: 60),
),
Divider(
height: 100,
thickness: 0,
color: Colors.white,
),
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'
? TextStyle(fontSize: 30)
: TextStyle(fontSize: 20, color: Colors.red),
),
)
],
),
),
),
);
}
}
这个示例展示了如何初始化步数和行人状态的流,并通过监听这些流来更新UI。确保在运行此应用之前已正确设置了所需的权限。
更多关于Flutter步数统计插件daily_pedometer2的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter步数统计插件daily_pedometer2的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
当然,以下是如何在Flutter项目中使用daily_pedometer2
插件来统计步数的示例代码。daily_pedometer2
是一个用于获取每日步数统计的Flutter插件。
1. 添加依赖
首先,在你的pubspec.yaml
文件中添加daily_pedometer2
依赖:
dependencies:
flutter:
sdk: flutter
daily_pedometer2: ^x.y.z # 请将x.y.z替换为最新版本号
然后运行flutter pub get
来安装依赖。
2. 导入插件
在你的Dart文件中导入插件:
import 'package:daily_pedometer2/daily_pedometer2.dart';
3. 请求权限并获取步数
你需要请求必要的权限(如活动识别权限)来获取步数数据。以下是一个完整的示例,展示了如何请求权限并获取步数:
import 'package:flutter/material.dart';
import 'package:daily_pedometer2/daily_pedometer2.dart';
import 'package:permission_handler/permission_handler.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: Text('Daily Pedometer Example'),
),
body: PedometerScreen(),
),
);
}
}
class PedometerScreen extends StatefulWidget {
@override
_PedometerScreenState createState() => _PedometerScreenState();
}
class _PedometerScreenState extends State<PedometerScreen> {
int? steps = 0;
@override
void initState() {
super.initState();
_requestPermissions();
_getSteps();
}
Future<void> _requestPermissions() async {
var status = await Permission.activityRecognition.status;
if (!status.isGranted) {
var result = await Permission.activityRecognition.request();
if (result.isGranted) {
// 权限被授予
} else if (result.isDeniedForever) {
// 权限被永久拒绝
// 可以引导用户到系统设置手动开启权限
openAppSettings();
} else {
// 权限被拒绝
}
}
}
Future<void> _getSteps() async {
try {
var pedometer = DailyPedometer2();
var stepCount = await pedometer.getSteps();
setState(() {
steps = stepCount;
});
} catch (e) {
print("Error getting steps: $e");
}
}
@override
Widget build(BuildContext context) {
return Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
Text(
'Steps:',
style: TextStyle(fontSize: 24),
),
Text(
steps?.toString() ?? 'Loading...',
style: TextStyle(fontSize: 20, fontWeight: FontWeight.bold),
),
],
),
);
}
}
4. 注意事项
- 在Android上,你需要在
AndroidManifest.xml
中声明活动识别权限:
<uses-permission android:name="android.permission.ACTIVITY_RECOGNITION"/>
- 在iOS上,你需要在
Info.plist
中添加NSMotionUsageDescription
权限描述。
5. 运行应用
完成以上步骤后,运行你的Flutter应用,你应该能够看到每日步数的统计结果。
这个示例代码展示了如何使用daily_pedometer2
插件来获取步数,并处理了权限请求。你可以根据需求进一步扩展功能,如定期更新步数、图表展示等。