musicus_mobile/musicus/lib/widgets/play_pause_button.dart

60 lines
1.3 KiB
Dart
Raw Normal View History

2019-12-03 12:23:41 +01:00
import 'dart:async';
2019-12-02 21:05:49 +01:00
import 'package:flutter/material.dart';
import '../backend.dart';
class PlayPauseButton extends StatefulWidget {
@override
_PlayPauseButtonState createState() => _PlayPauseButtonState();
}
class _PlayPauseButtonState extends State<PlayPauseButton>
with SingleTickerProviderStateMixin {
AnimationController playPauseAnimation;
2020-03-28 08:51:45 +01:00
BackendState backend;
2019-12-03 12:23:41 +01:00
StreamSubscription<bool> playingSubscription;
2019-12-02 21:05:49 +01:00
@override
void initState() {
super.initState();
2019-12-03 12:33:43 +01:00
playPauseAnimation = AnimationController(
vsync: this,
duration: Duration(milliseconds: 300),
);
2019-12-02 21:05:49 +01:00
}
@override
void didChangeDependencies() {
super.didChangeDependencies();
backend = Backend.of(context);
playPauseAnimation.value = backend.player.playing.value ? 1.0 : 0.0;
2019-12-03 12:23:41 +01:00
if (playingSubscription != null) {
playingSubscription.cancel();
}
playingSubscription = backend.player.playing.listen((playing) =>
2019-12-02 21:05:49 +01:00
playing ? playPauseAnimation.forward() : playPauseAnimation.reverse());
}
@override
Widget build(BuildContext context) {
return IconButton(
icon: AnimatedIcon(
icon: AnimatedIcons.play_pause,
progress: playPauseAnimation,
),
onPressed: backend.player.playPause,
2019-12-02 21:05:49 +01:00
);
}
2019-12-03 12:23:41 +01:00
@override
void dispose() {
super.dispose();
playingSubscription.cancel();
}
2019-12-02 21:05:49 +01:00
}