我在Flutter应用程序上使用了计步器插件(https://pub.dev/packages/pedometer#-installing-tab-)。有人可以给我答案如何重置步数值吗?已经尝试使用计时器将值重置为0,但该值仍来自上一步计数。
这是我用来测试计步器的代码:
请帮助我,我是新来的。谢谢
@override
void initState() {
super.initState();
setUpPedometer();
}
void setUpPedometer() {
Pedometer pedometer = new Pedometer();
_subscription = pedometer.stepCountStream.listen(_onData,
onError: _onError, onDone: _onDone, cancelOnError: true);
}
void _onData(stepCountValue) async {
setState(() {
_stepCountValue = "$stepCountValue";
_step = stepCountValue;
});
var dist = _step;
double y = (dist + .0);
setState(() {
_numerox =
y;
});
var long3 = (_numerox);
long3 = num.parse(y.toStringAsFixed(2));
var long4 = (long3 / 10000);
int decimals = 1;
int fac = pow(10, decimals);
double d = long4;
d = (d * fac).round() / fac;
print("d: $d");
getDistanceRun(_numerox);
setState(() {
_convert = d;
print(_convert);
});
}
void reset() {
setState(() {
int stepCountValue = 0;
stepCountValue = 0;
_stepCountValue = "$stepCountValue";
});
}
void _onDone() {}
void _onError(error) {
print("Flutter Pedometer Error: $error");
}
//function to determine the distance run in kilometers using number of steps
void getDistanceRun(double _numerox) {
var distance = ((_numerox * 78) / 100000);
distance = num.parse(distance.toStringAsFixed(2)); //dos decimales
var distancekmx = distance * 1000000;//34;
distancekmx = num.parse(distancekmx.toStringAsFixed(2));
//print(distance.runtimeType);
setState(() {
_km = "$distance";
//print(_km);
});
setState(() {
_kmx = num.parse(distancekmx.toStringAsFixed(2));
});
}
//function to determine the calories burned in kilometers using number of steps
void getBurnedRun() {
setState(() {
var calories = _kmx; //dos decimales
_calories = calories==null?"0":"$calories";
//print(_calories);
});
}
答案 0 :(得分:0)
通过阅读源代码,我会说应用程序启动时它是连续启动的。您必须自己跟踪计数,并记住用户按下重置键(如11230等于0)并减去该偏移量时的计数。
答案 1 :(得分:0)
正如@Ride Sun建议的那样,您需要跟踪要保存的步骤并减去该偏移量。如果您希望每天重置一次,则可以找到有关我的操作here的完整演练。这个Github issue也解决了这个任务。
大致来说,跟踪日常步伐的基本要点是:
您将需要以下变量:
savedStepCount以保存前几天的时间” 步数(例如,使用shared_preferences)。如果您已经保存并 显示/使用/显示前几天的步数,您不能使用该变量 为此,此saveStepCount将间歇性重置
lastDaySaved,可以是一个int或DateTime来保存您上一次的时间 “重置”您的计步器。这将很快变得明显。坚持 这个也是。
值是计步器流收到的计数
todayStepCount,自我描述。
if (value < savedStepCount) {
// Upon device reboot, pedometer resets. When this happens, the saved counter must be reset as well.
savedStepCount = 0;
// {persist this value using a package of your choice here}
}
var lastDaySaved;
// {load the saved value using a package of your choice here}
if (lastDaySaved < todayDayNo) { // whether you use int or DateTime, this should only return true once every 24 hours, otherwise
your value will reset too frequently.
lastDaySaved = todayDayNo
// {save lastDaySaved here}
savedStepCount = value;
// {save savedStepCount here}
}
todayStepCount = value - savedStepCount;
return todayStepCount; // this is your daily steps value.
答案 2 :(得分:-1)
基本上,Flutter 没有办法重置计步器数据,因为应用程序正在通过流侦听传感器数据。所以你可以做的是简单地声明一个 int 变量 "i" ,并在 OnData 函数中使用这个变量作为 "i+=1",并使用这个 "i" 作为步数,你可以简单地使用 setState 方法重置它为“i = 0”,从而重置步数。发生的情况是每次 OnData 函数执行时“i”都会增加,这通常发生在您采取的每一步和重置时,只需声明“i = 0”即可。