import 'dart:async'; import 'dart:developer'; import 'package:flutter/material.dart'; import 'package:sendtrain/models/activity_model.dart'; import 'package:sendtrain/widgets/activity_action_view.dart'; class ActivityTimerModel with ChangeNotifier { late int _activityId; late int _tickCount; late int _currentSet; late int _totalSets; late int _currentRep; late int _totalReps; late String _currentState; late Timer? _periodicTimer; late ActivityModel _activity; // int _viewCount = 0; bool _active = false; int _currentAction = 0; int get tickCount => _tickCount; int get currentSet => _currentSet; int get currentRep => _currentRep; int get currentAction => _currentAction; int get totalSets => _totalSets; int get totalReps => _totalReps; bool get active => _active; void setAction(int actionNum, int setNum, String state) { _currentAction = actionNum; _currentSet = setNum; _currentState = state; stopTimer(); if (_currentState == "rest") { startTimer(); } notifyListeners(); } void incrementAction() { _currentAction++; if (_currentState == "rest") { _currentState = "rep"; _currentSet++; stopTimer(); } else { _currentState = "rest"; startTimer(); } notifyListeners(); } void setupTimer(ActivityModel activity) { _activity = activity; _activityId = activity.id; _currentSet = 0; _currentRep = 0; _totalSets = activity.actions[0].activityActionSet.total; _totalReps = activity.actions[0].activityActionSet.reps.amounts[0]; _tickCount = activity.actions[0].activityActionSet.rest ~/ 10000; _currentState = "rep"; // ActivityActionView av = actionViews[_viewCount]; // av. } void pauseTimer() { _active = false; notifyListeners(); } void stopTimer() { _active = false; _periodicTimer?.cancel(); notifyListeners(); } void startTimer() { if (_currentState == 'rep') { // do nothing for now } else { _active = true; _tickCount = _activity.actions[0].activityActionSet.rest ~/ 10000; _periodicTimer = Timer.periodic(const Duration(seconds: 1), (Timer timer) { if (_tickCount == 0) { incrementAction(); // if (_currentRep + 1 == // _activity.actions[0].activityActionSet.reps.amounts[_currentSet]) { // _currentSet++; // if (_currentSet == _activity.actions[0].activityActionSet.total) { // timer.cancel(); // _active = false; // setupTimer(_activity); // } // _currentRep = 0; // _totalReps = // _activity.actions[0].activityActionSet.reps.amounts[_currentSet]; // _tickCount = _activity.actions[0].activityActionSet.rest ~/ 10000; // } else { // _currentRep++; // } } else { if (_active) { _tickCount--; } } notifyListeners(); }); } } // void startTimer(ActivityModel activity) { // _active = true; // _periodicTimer = Timer.periodic(const Duration(seconds: 1), (Timer timer) { // if (_tickCount == 0) { // if (_currentRep + 1 == // activity.actions[0].activityActionSet.reps.amounts[_currentSet]) { // _currentSet++; // if (_currentSet == activity.actions[0].activityActionSet.total) { // timer.cancel(); // _active = false; // setupTimer(activity); // } // _currentRep = 0; // _totalReps = // activity.actions[0].activityActionSet.reps.amounts[_currentSet]; // _tickCount = activity.actions[0].activityActionSet.rest ~/ 10000; // } else { // _currentRep++; // } // } else { // _tickCount--; // } // notifyListeners(); // }); // } }