feat(mobile): custom video player controls (#2960)

* Remove toggle fullscreen button

* Implement custom video player controls

* Move Padding into Container
This commit is contained in:
Sergey Kondrikov
2023-06-26 18:27:47 +03:00
committed by GitHub
parent 99f85fb359
commit fb2cfcb640
11 changed files with 618 additions and 69 deletions

View File

@@ -0,0 +1,21 @@
import 'package:hooks_riverpod/hooks_riverpod.dart';
final showControlsProvider = StateNotifierProvider<ShowControls, bool>((ref) {
return ShowControls(ref);
});
class ShowControls extends StateNotifier<bool> {
ShowControls(this.ref) : super(true);
final Ref ref;
bool get show => state;
set show(bool value) {
state = value;
}
void toggle() {
state = !state;
}
}

View File

@@ -0,0 +1,46 @@
import 'package:hooks_riverpod/hooks_riverpod.dart';
class VideoPlaybackControls {
VideoPlaybackControls({required this.position, required this.mute});
final double position;
final bool mute;
}
final videoPlayerControlsProvider =
StateNotifierProvider<VideoPlayerControls, VideoPlaybackControls>((ref) {
return VideoPlayerControls(ref);
});
class VideoPlayerControls extends StateNotifier<VideoPlaybackControls> {
VideoPlayerControls(this.ref)
: super(
VideoPlaybackControls(
position: 0,
mute: false,
),
);
final Ref ref;
VideoPlaybackControls get value => state;
set value(VideoPlaybackControls value) {
state = value;
}
double get position => state.position;
bool get mute => state.mute;
set position(double value) {
state = VideoPlaybackControls(position: value, mute: state.mute);
}
set mute(bool value) {
state = VideoPlaybackControls(position: state.position, mute: value);
}
void toggleMute() {
state = VideoPlaybackControls(position: state.position, mute: !state.mute);
}
}

View File

@@ -0,0 +1,35 @@
import 'package:hooks_riverpod/hooks_riverpod.dart';
class VideoPlaybackValue {
VideoPlaybackValue({required this.position, required this.duration});
final Duration position;
final Duration duration;
}
final videoPlaybackValueProvider =
StateNotifierProvider<VideoPlaybackValueState, VideoPlaybackValue>((ref) {
return VideoPlaybackValueState(ref);
});
class VideoPlaybackValueState extends StateNotifier<VideoPlaybackValue> {
VideoPlaybackValueState(this.ref)
: super(
VideoPlaybackValue(
position: Duration.zero,
duration: Duration.zero,
),
);
final Ref ref;
VideoPlaybackValue get value => state;
set value(VideoPlaybackValue value) {
state = value;
}
set position(Duration value) {
state = VideoPlaybackValue(position: value, duration: state.duration);
}
}