Skip to content

Commit a04bfdd

Browse files
Merge pull request #399 from pinpong/stateFix
removed AutomaticKeepAliveClientMixin to fix/prevent unwanted behavior
2 parents 2381900 + 5e23134 commit a04bfdd

File tree

6 files changed

+26
-29
lines changed

6 files changed

+26
-29
lines changed

flutter_vlc_player/CHANGELOG.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,6 @@
1+
## 7.4.0
2+
* **Possible breaking Change**: Removed [AutomaticKeepAliveClientMixin](https://api.flutter.dev/flutter/widgets/AutomaticKeepAliveClientMixin-mixin.html) from plugin widget
3+
14
## 7.3.1
25
* Restore Flutter 3.3-3.7 compatibility
36
Credits to Yang Fang (https://github.com/yangsfang)

flutter_vlc_player/android/src/main/java/software/solid/fluttervlcplayer/FlutterVlcPlayer.java

Lines changed: 14 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -70,6 +70,7 @@ public void dispose() {
7070
rendererEventChannel.setStreamHandler(null);
7171
if (mediaPlayer != null) {
7272
mediaPlayer.stop();
73+
mediaPlayer.setEventListener(null);
7374
mediaPlayer.getVLCVout().detachViews();
7475
mediaPlayer.release();
7576
mediaPlayer = null;
@@ -125,7 +126,7 @@ public void onCancel(Object o) {
125126
// }
126127

127128
public void initialize(List<String> options) {
128-
this.options = options;
129+
this.options = options;
129130
libVLC = new LibVLC(context, options);
130131
mediaPlayer = new MediaPlayer(libVLC);
131132
setupVlcMediaPlayer();
@@ -242,19 +243,19 @@ public void onEvent(MediaPlayer.Event event) {
242243
}
243244

244245
void play() {
245-
if (mediaPlayer != null) {
246+
if (mediaPlayer != null && !mediaPlayer.isPlaying()) {
246247
mediaPlayer.play();
247248
}
248249
}
249250

250251
void pause() {
251-
if (mediaPlayer != null) {
252+
if (mediaPlayer != null && mediaPlayer.isPlaying()) {
252253
mediaPlayer.pause();
253254
}
254255
}
255256

256257
void stop() {
257-
if (mediaPlayer != null) {
258+
if (mediaPlayer != null && mediaPlayer.isPlaying()) {
258259
mediaPlayer.stop();
259260
}
260261
}
@@ -273,7 +274,9 @@ void setStreamUrl(String url, boolean isAssetUrl, boolean autoPlay, long hwAcc)
273274
if (mediaPlayer == null) return;
274275

275276
try {
276-
mediaPlayer.stop();
277+
if (mediaPlayer.isPlaying()) {
278+
mediaPlayer.stop();
279+
}
277280
//
278281
Media media;
279282
if (isAssetUrl)
@@ -295,15 +298,14 @@ void setStreamUrl(String url, boolean isAssetUrl, boolean autoPlay, long hwAcc)
295298
media.addOption(":no-omxil-dr");
296299
}
297300
if (options != null) {
298-
for (String option: options)
301+
for (String option : options)
299302
media.addOption(option);
300303
}
301304
mediaPlayer.setMedia(media);
302305
media.release();
303306
//
304-
mediaPlayer.play();
305-
if (!autoPlay) {
306-
mediaPlayer.stop();
307+
if (autoPlay) {
308+
mediaPlayer.play();
307309
}
308310
} catch (IOException e) {
309311
log(e.getMessage());
@@ -350,7 +352,7 @@ void seekTo(int location) {
350352

351353
long getPosition() {
352354
if (mediaPlayer == null) return -1;
353-
355+
354356
return mediaPlayer.getTime();
355357
}
356358

@@ -612,8 +614,7 @@ void castToRenderer(String rendererDevice) {
612614
if (isDisposed) {
613615
return;
614616
}
615-
boolean isPlaying = mediaPlayer.isPlaying();
616-
if (isPlaying)
617+
if (mediaPlayer.isPlaying())
617618
mediaPlayer.pause();
618619

619620
// if you set it to null, it will start to render normally (i.e. locally) again
@@ -644,6 +645,7 @@ Boolean startRecording(String directory) {
644645
}
645646

646647
Boolean stopRecording() {
648+
if (mediaPlayer == null) return true;
647649
return mediaPlayer.record(null);
648650
}
649651

flutter_vlc_player/example/lib/vlc_player_with_controls.dart

Lines changed: 1 addition & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -23,8 +23,7 @@ class VlcPlayerWithControls extends StatefulWidget {
2323
VlcPlayerWithControlsState createState() => VlcPlayerWithControlsState();
2424
}
2525

26-
class VlcPlayerWithControlsState extends State<VlcPlayerWithControls>
27-
with AutomaticKeepAliveClientMixin {
26+
class VlcPlayerWithControlsState extends State<VlcPlayerWithControls> {
2827
static const _playerControlsBgColor = Colors.black87;
2928
static const _numberPositionOffset = 8.0;
3029
static const _recordingPositionOffset = 10.0;
@@ -60,9 +59,6 @@ class VlcPlayerWithControlsState extends State<VlcPlayerWithControls>
6059
List<double> playbackSpeeds = [0.5, 1.0, 2.0];
6160
int playbackSpeedIndex = 1;
6261

63-
@override
64-
bool get wantKeepAlive => true;
65-
6662
@override
6763
void initState() {
6864
super.initState();
@@ -122,8 +118,6 @@ class VlcPlayerWithControlsState extends State<VlcPlayerWithControls>
122118

123119
@override
124120
Widget build(BuildContext context) {
125-
super.build(context);
126-
127121
return Column(
128122
mainAxisSize: MainAxisSize.min,
129123
children: [

flutter_vlc_player/ios/Classes/VlcViewController.swift

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -327,7 +327,11 @@ public class VLCViewController: NSObject, FlutterPlatformView {
327327
}
328328

329329
public func dispose(){
330-
//todo: dispose player & event handlers
330+
self.mediaEventChannel.setStreamHandler(nil);
331+
self.rendererEventChannel.setStreamHandler(nil);
332+
self.rendererdiscoverers.removeAll()
333+
self.rendererEventChannelHandler.renderItems.removeAll()
334+
self.vlcMediaPlayer.stop()
331335
}
332336

333337
func setMediaPlayerUrl(uri: String, isAssetUrl: Bool, autoPlay: Bool, hwAcc: Int, options: [String]){

flutter_vlc_player/lib/src/flutter_vlc_player.dart

Lines changed: 1 addition & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -33,16 +33,12 @@ class VlcPlayer extends StatefulWidget {
3333
_VlcPlayerState createState() => _VlcPlayerState();
3434
}
3535

36-
class _VlcPlayerState extends State<VlcPlayer>
37-
with AutomaticKeepAliveClientMixin {
36+
class _VlcPlayerState extends State<VlcPlayer> {
3837
bool _isInitialized = false;
3938

4039
//ignore: avoid-late-keyword
4140
late VoidCallback _listener;
4241

43-
@override
44-
bool get wantKeepAlive => true;
45-
4642
_VlcPlayerState() {
4743
_listener = () {
4844
if (!mounted) return;
@@ -67,8 +63,6 @@ class _VlcPlayerState extends State<VlcPlayer>
6763

6864
@override
6965
Widget build(BuildContext context) {
70-
super.build(context);
71-
7266
return AspectRatio(
7367
aspectRatio: widget.aspectRatio,
7468
child: Stack(

flutter_vlc_player/pubspec.yaml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
name: flutter_vlc_player
22
description: A VLC-powered alternative to Flutter's video_player. Supports multiple players on one screen.
3-
version: 7.3.1
3+
version: 7.4.0
44
homepage: https://github.com/solid-software/flutter_vlc_player/
55

66
environment:
@@ -19,7 +19,7 @@ flutter:
1919
dependencies:
2020
flutter:
2121
sdk: flutter
22-
22+
2323
flutter_vlc_player_platform_interface: ^2.0.3
2424
meta: ^1.8.0
2525

0 commit comments

Comments
 (0)