update method
Implementation
StepData update(StepCountWithTimestamp stepCount) {
// 오래된 stepCount는 무시한다.
if (lastSavedAt != null && _location != null) {
final dt = TZDateTime.parse(_location!, lastSavedAt!);
if (stepCount.timeStamp.isBefore(dt)) {
return this;
}
}
// 오늘에 대한 정보가 없다면, 앱 설치등 초기 상태이므로
// 걸음을 초기 상태부터 시작한다.
if (todayDate == null) {
return StepData.initialData(stepCount);
}
// 오늘 날짜와 같지 않으면, 날짜가 변경되었기 대문에 이전 날짜로 옮김
// 날짜가 변경 되었는데, 기존에 저장된 걸음수가 현재 걸음수보다 높으면 부팅이 된 상태라서,
// 기본 비교값을 0 으로 세팅함!
else if (todayDate != formatDate(stepCount.timeStamp)) {
return StepData.shiftDate(this, stepCount);
}
// 부팅이 새로 되었다면, 기존 걸음수를 stack에 저장하고,
// 0부터 다시 시작한다.
// 가끔 센서값이 섞여서 들어오는 경우가 있어, 5보 정도의 오차는 무시한다.
else if (stepCount.stepsFromBoot < todayStepCount - 5) {
return StepData.newBoot(this, stepCount);
} else if (stepCount.stepsFromBoot < todayStepCount) {
return this;
}
return StepData.accumulate(this, stepCount);
}