wip trying to wrap timerprovider in prokoutprovider
parent
b01485f27a
commit
4144bbaf69
|
@ -1,5 +1,3 @@
|
||||||
import 'dart:async';
|
|
||||||
|
|
||||||
import 'package:audioplayers/audioplayers.dart';
|
import 'package:audioplayers/audioplayers.dart';
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:smoke_cess_app/providers/timer_provider.dart';
|
import 'package:smoke_cess_app/providers/timer_provider.dart';
|
||||||
|
@ -8,6 +6,8 @@ class WorkoutProvider extends ChangeNotifier {
|
||||||
TimerProvider timerProvider;
|
TimerProvider timerProvider;
|
||||||
|
|
||||||
final AudioPlayer _audioPlayer = AudioPlayer();
|
final AudioPlayer _audioPlayer = AudioPlayer();
|
||||||
|
final Source _finishedSoundSource = AssetSource('finish.mp3');
|
||||||
|
final Source _beepSoundSource = AssetSource('beep.mp3');
|
||||||
|
|
||||||
WorkoutProvider(this.timerProvider);
|
WorkoutProvider(this.timerProvider);
|
||||||
|
|
||||||
|
@ -39,13 +39,28 @@ class WorkoutProvider extends ChangeNotifier {
|
||||||
String get currentPhase => _workoutPhases[_workoutPhaseIndex];
|
String get currentPhase => _workoutPhases[_workoutPhaseIndex];
|
||||||
Duration get currentPhaseDuration =>
|
Duration get currentPhaseDuration =>
|
||||||
_phasesDuration[currentPhase] ?? const Duration(seconds: 0);
|
_phasesDuration[currentPhase] ?? const Duration(seconds: 0);
|
||||||
|
bool get isPhaseComplete =>
|
||||||
|
timerProvider.elapsedSeconds - currentPhaseDuration.inSeconds == 0;
|
||||||
|
|
||||||
void nextPhase() {
|
void nextPhase() {
|
||||||
_audioPlayer.stop();
|
_audioPlayer.stop();
|
||||||
if (_workoutPhaseIndex < _workoutPhases.length - 1) {
|
if (_workoutPhaseIndex < _workoutPhases.length - 1) {
|
||||||
|
_audioPlayer.play(_beepSoundSource);
|
||||||
_workoutPhaseIndex += 1;
|
_workoutPhaseIndex += 1;
|
||||||
|
_audioPlayer.onPlayerComplete.listen((event) {
|
||||||
_audioPlayer.play(_phaseSongSources[currentPhase]!);
|
_audioPlayer.play(_phaseSongSources[currentPhase]!);
|
||||||
timerProvider.startTimer(currentPhaseDuration);
|
timerProvider.startTimer(currentPhaseDuration);
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
_audioPlayer.play(_finishedSoundSource);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void startWorkout() {
|
||||||
|
_audioPlayer.play(_beepSoundSource);
|
||||||
|
_audioPlayer.onPlayerComplete.listen((event) {
|
||||||
|
_audioPlayer.play(_phaseSongSources[currentPhase]!);
|
||||||
|
timerProvider.startTimer(currentPhaseDuration);
|
||||||
|
});
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -14,11 +14,6 @@ class TimerWidget extends StatelessWidget {
|
||||||
mainAxisAlignment: MainAxisAlignment.center,
|
mainAxisAlignment: MainAxisAlignment.center,
|
||||||
children: [
|
children: [
|
||||||
Text(formatTime(duration.inSeconds - timerProvider.elapsedSeconds)),
|
Text(formatTime(duration.inSeconds - timerProvider.elapsedSeconds)),
|
||||||
ElevatedButton(
|
|
||||||
onPressed: () => timerProvider.started
|
|
||||||
? timerProvider.stopTimer()
|
|
||||||
: timerProvider.startTimer(duration),
|
|
||||||
child: Text(timerProvider.started ? 'Stop' : 'Start'))
|
|
||||||
],
|
],
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
|
@ -15,8 +15,7 @@ class WorkoutTimerWidget extends StatelessWidget {
|
||||||
TimerProvider timerProvider = context.watch<TimerProvider>();
|
TimerProvider timerProvider = context.watch<TimerProvider>();
|
||||||
WorkoutProvider workoutProvider = context.watch<WorkoutProvider>();
|
WorkoutProvider workoutProvider = context.watch<WorkoutProvider>();
|
||||||
|
|
||||||
if (timerProvider.elapsedSeconds ==
|
if (workoutProvider.isPhaseComplete) {
|
||||||
workoutProvider.currentPhaseDuration.inSeconds) {
|
|
||||||
Timer(const Duration(milliseconds: 1), () => workoutProvider.nextPhase());
|
Timer(const Duration(milliseconds: 1), () => workoutProvider.nextPhase());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -24,7 +23,10 @@ class WorkoutTimerWidget extends StatelessWidget {
|
||||||
mainAxisAlignment: MainAxisAlignment.center,
|
mainAxisAlignment: MainAxisAlignment.center,
|
||||||
children: [
|
children: [
|
||||||
Text(workoutProvider.currentPhase),
|
Text(workoutProvider.currentPhase),
|
||||||
TimerWidget(duration: workoutProvider.currentPhaseDuration)
|
TimerWidget(duration: workoutProvider.currentPhaseDuration),
|
||||||
|
ElevatedButton(
|
||||||
|
onPressed: () => workoutProvider.startWorkout(),
|
||||||
|
child: Text(timerProvider.started ? 'Stop' : 'Start'))
|
||||||
],
|
],
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue