Skip to content

Commit 57e8599

Browse files
authored
[video_player_web] Adjust Web implementation to the new platform interface (#8528)
This PR adjusts the Web `video_player` implementation to the new platform interface which was introduced in #8453. Specifically, it renames `textureId` to `playerId` (which actually makes sense here, as there are no texture IDs on Web, it was just a "simulation" to comply with the interface). This PR does not fix any issue directly, but it's related to [#86613](flutter/flutter#86613).
1 parent 4ca1c4d commit 57e8599

File tree

5 files changed

+70
-56
lines changed

5 files changed

+70
-56
lines changed

packages/video_player/video_player_web/CHANGELOG.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,7 @@
1+
## 2.3.4
2+
3+
* Adjusts the code to the new platform interface.
4+
15
## 2.3.3
26

37
* Updates minimum supported SDK version to Flutter 3.22/Dart 3.4.

packages/video_player/video_player_web/example/integration_test/video_player_web_test.dart

Lines changed: 17 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -20,18 +20,18 @@ void main() {
2020
IntegrationTestWidgetsFlutterBinding.ensureInitialized();
2121

2222
group('VideoPlayerWeb plugin (hits network)', () {
23-
late Future<int> textureId;
23+
late Future<int> playerId;
2424

2525
setUp(() {
2626
VideoPlayerPlatform.instance = VideoPlayerPlugin();
27-
textureId = VideoPlayerPlatform.instance
27+
playerId = VideoPlayerPlatform.instance
2828
.create(
2929
DataSource(
3030
sourceType: DataSourceType.network,
3131
uri: getUrlForAssetAsNetworkSource(_videoAssetKey),
3232
),
3333
)
34-
.then((int? textureId) => textureId!);
34+
.then((int? playerId) => playerId!);
3535
});
3636

3737
testWidgets('can init', (WidgetTester tester) async {
@@ -84,20 +84,20 @@ void main() {
8484
});
8585

8686
testWidgets('can dispose', (WidgetTester tester) async {
87-
expect(VideoPlayerPlatform.instance.dispose(await textureId), completes);
87+
expect(VideoPlayerPlatform.instance.dispose(await playerId), completes);
8888
});
8989

9090
testWidgets('can set looping', (WidgetTester tester) async {
9191
expect(
92-
VideoPlayerPlatform.instance.setLooping(await textureId, true),
92+
VideoPlayerPlatform.instance.setLooping(await playerId, true),
9393
completes,
9494
);
9595
});
9696

9797
testWidgets('can play', (WidgetTester tester) async {
9898
// Mute video to allow autoplay (See https://goo.gl/xX8pDD)
99-
await VideoPlayerPlatform.instance.setVolume(await textureId, 0);
100-
expect(VideoPlayerPlatform.instance.play(await textureId), completes);
99+
await VideoPlayerPlatform.instance.setVolume(await playerId, 0);
100+
expect(VideoPlayerPlatform.instance.play(await playerId), completes);
101101
});
102102

103103
testWidgets('throws PlatformException when playing bad media',
@@ -122,45 +122,45 @@ void main() {
122122
});
123123

124124
testWidgets('can pause', (WidgetTester tester) async {
125-
expect(VideoPlayerPlatform.instance.pause(await textureId), completes);
125+
expect(VideoPlayerPlatform.instance.pause(await playerId), completes);
126126
});
127127

128128
testWidgets('can set volume', (WidgetTester tester) async {
129129
expect(
130-
VideoPlayerPlatform.instance.setVolume(await textureId, 0.8),
130+
VideoPlayerPlatform.instance.setVolume(await playerId, 0.8),
131131
completes,
132132
);
133133
});
134134

135135
testWidgets('can set playback speed', (WidgetTester tester) async {
136136
expect(
137-
VideoPlayerPlatform.instance.setPlaybackSpeed(await textureId, 2.0),
137+
VideoPlayerPlatform.instance.setPlaybackSpeed(await playerId, 2.0),
138138
completes,
139139
);
140140
});
141141

142142
testWidgets('can seek to position', (WidgetTester tester) async {
143143
expect(
144144
VideoPlayerPlatform.instance.seekTo(
145-
await textureId,
145+
await playerId,
146146
const Duration(seconds: 1),
147147
),
148148
completes,
149149
);
150150
});
151151

152152
testWidgets('can get position', (WidgetTester tester) async {
153-
expect(VideoPlayerPlatform.instance.getPosition(await textureId),
153+
expect(VideoPlayerPlatform.instance.getPosition(await playerId),
154154
completion(isInstanceOf<Duration>()));
155155
});
156156

157157
testWidgets('can get video event stream', (WidgetTester tester) async {
158-
expect(VideoPlayerPlatform.instance.videoEventsFor(await textureId),
158+
expect(VideoPlayerPlatform.instance.videoEventsFor(await playerId),
159159
isInstanceOf<Stream<VideoEvent>>());
160160
});
161161

162162
testWidgets('can build view', (WidgetTester tester) async {
163-
expect(VideoPlayerPlatform.instance.buildView(await textureId),
163+
expect(VideoPlayerPlatform.instance.buildView(await playerId),
164164
isInstanceOf<Widget>());
165165
});
166166

@@ -172,7 +172,7 @@ void main() {
172172
testWidgets(
173173
'double call to play will emit a single isPlayingStateUpdate event',
174174
(WidgetTester tester) async {
175-
final int videoPlayerId = await textureId;
175+
final int videoPlayerId = await playerId;
176176
final Stream<VideoEvent> eventStream =
177177
VideoPlayerPlatform.instance.videoEventsFor(videoPlayerId);
178178

@@ -204,7 +204,7 @@ void main() {
204204
});
205205

206206
testWidgets('video playback lifecycle', (WidgetTester tester) async {
207-
final int videoPlayerId = await textureId;
207+
final int videoPlayerId = await playerId;
208208
final Stream<VideoEvent> eventStream =
209209
VideoPlayerPlatform.instance.videoEventsFor(videoPlayerId);
210210

@@ -243,7 +243,7 @@ void main() {
243243
testWidgets('can set web options', (WidgetTester tester) async {
244244
expect(
245245
VideoPlayerPlatform.instance.setWebOptions(
246-
await textureId,
246+
await playerId,
247247
const VideoPlayerWebOptions(),
248248
),
249249
completes,

packages/video_player/video_player_web/example/pubspec.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ environment:
88
dependencies:
99
flutter:
1010
sdk: flutter
11-
video_player_platform_interface: ^6.1.0
11+
video_player_platform_interface: ^6.3.0
1212
video_player_web:
1313
path: ../
1414
web: ^1.0.0

packages/video_player/video_player_web/lib/video_player_web.dart

Lines changed: 46 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -12,9 +12,6 @@ import 'package:web/web.dart' as web;
1212

1313
import 'src/video_player.dart';
1414

15-
// TODO(FirentisTFW): Remove the ignore and rename parameters when adding support for platform views.
16-
// ignore_for_file: avoid_renaming_method_parameters
17-
1815
/// The web implementation of [VideoPlayerPlatform].
1916
///
2017
/// This class implements the `package:video_player` functionality for the web.
@@ -24,21 +21,20 @@ class VideoPlayerPlugin extends VideoPlayerPlatform {
2421
VideoPlayerPlatform.instance = VideoPlayerPlugin();
2522
}
2623

27-
// Map of textureId -> VideoPlayer instances
24+
// Map of playerId -> VideoPlayer instances.
2825
final Map<int, VideoPlayer> _videoPlayers = <int, VideoPlayer>{};
2926

30-
// Simulate the native "textureId".
31-
int _textureCounter = 1;
27+
int _playerCounter = 1;
3228

3329
@override
3430
Future<void> init() async {
3531
return _disposeAllPlayers();
3632
}
3733

3834
@override
39-
Future<void> dispose(int textureId) async {
40-
_player(textureId).dispose();
41-
_videoPlayers.remove(textureId);
35+
Future<void> dispose(int playerId) async {
36+
_player(playerId).dispose();
37+
_videoPlayers.remove(playerId);
4238
return;
4339
}
4440

@@ -50,8 +46,22 @@ class VideoPlayerPlugin extends VideoPlayerPlatform {
5046
}
5147

5248
@override
53-
Future<int> create(DataSource dataSource) async {
54-
final int textureId = _textureCounter++;
49+
Future<int> create(DataSource dataSource) {
50+
return createWithOptions(
51+
VideoCreationOptions(
52+
dataSource: dataSource,
53+
// Web only supports platform views.
54+
viewType: VideoViewType.platformView,
55+
),
56+
);
57+
}
58+
59+
@override
60+
Future<int> createWithOptions(VideoCreationOptions options) async {
61+
// Parameter options.viewType is ignored because web only supports platform views.
62+
63+
final DataSource dataSource = options.dataSource;
64+
final int playerId = _playerCounter++;
5565

5666
late String uri;
5767
switch (dataSource.sourceType) {
@@ -75,68 +85,68 @@ class VideoPlayerPlugin extends VideoPlayerPlatform {
7585
}
7686

7787
final web.HTMLVideoElement videoElement = web.HTMLVideoElement()
78-
..id = 'videoElement-$textureId'
88+
..id = 'videoElement-$playerId'
7989
..style.border = 'none'
8090
..style.height = '100%'
8191
..style.width = '100%';
8292

8393
// TODO(hterkelsen): Use initialization parameters once they are available
8494
ui_web.platformViewRegistry.registerViewFactory(
85-
'videoPlayer-$textureId', (int viewId) => videoElement);
95+
'videoPlayer-$playerId', (int viewId) => videoElement);
8696

8797
final VideoPlayer player = VideoPlayer(videoElement: videoElement)
8898
..initialize(
8999
src: uri,
90100
);
91101

92-
_videoPlayers[textureId] = player;
102+
_videoPlayers[playerId] = player;
93103

94-
return textureId;
104+
return playerId;
95105
}
96106

97107
@override
98-
Future<void> setLooping(int textureId, bool looping) async {
99-
return _player(textureId).setLooping(looping);
108+
Future<void> setLooping(int playerId, bool looping) async {
109+
return _player(playerId).setLooping(looping);
100110
}
101111

102112
@override
103-
Future<void> play(int textureId) async {
104-
return _player(textureId).play();
113+
Future<void> play(int playerId) async {
114+
return _player(playerId).play();
105115
}
106116

107117
@override
108-
Future<void> pause(int textureId) async {
109-
return _player(textureId).pause();
118+
Future<void> pause(int playerId) async {
119+
return _player(playerId).pause();
110120
}
111121

112122
@override
113-
Future<void> setVolume(int textureId, double volume) async {
114-
return _player(textureId).setVolume(volume);
123+
Future<void> setVolume(int playerId, double volume) async {
124+
return _player(playerId).setVolume(volume);
115125
}
116126

117127
@override
118-
Future<void> setPlaybackSpeed(int textureId, double speed) async {
119-
return _player(textureId).setPlaybackSpeed(speed);
128+
Future<void> setPlaybackSpeed(int playerId, double speed) async {
129+
return _player(playerId).setPlaybackSpeed(speed);
120130
}
121131

122132
@override
123-
Future<void> seekTo(int textureId, Duration position) async {
124-
return _player(textureId).seekTo(position);
133+
Future<void> seekTo(int playerId, Duration position) async {
134+
return _player(playerId).seekTo(position);
125135
}
126136

127137
@override
128-
Future<Duration> getPosition(int textureId) async {
129-
return _player(textureId).getPosition();
138+
Future<Duration> getPosition(int playerId) async {
139+
return _player(playerId).getPosition();
130140
}
131141

132142
@override
133-
Stream<VideoEvent> videoEventsFor(int textureId) {
134-
return _player(textureId).events;
143+
Stream<VideoEvent> videoEventsFor(int playerId) {
144+
return _player(playerId).events;
135145
}
136146

137147
@override
138-
Future<void> setWebOptions(int textureId, VideoPlayerWebOptions options) {
139-
return _player(textureId).setOptions(options);
148+
Future<void> setWebOptions(int playerId, VideoPlayerWebOptions options) {
149+
return _player(playerId).setOptions(options);
140150
}
141151

142152
// Retrieves a [VideoPlayer] by its internal `id`.
@@ -146,11 +156,11 @@ class VideoPlayerPlugin extends VideoPlayerPlatform {
146156
}
147157

148158
@override
149-
Widget buildView(int textureId) {
150-
return HtmlElementView(viewType: 'videoPlayer-$textureId');
159+
Widget buildView(int playerId) {
160+
return HtmlElementView(viewType: 'videoPlayer-$playerId');
151161
}
152162

153-
/// Sets the audio mode to mix with other sources (ignored)
163+
/// Sets the audio mode to mix with other sources (ignored).
154164
@override
155165
Future<void> setMixWithOthers(bool mixWithOthers) => Future<void>.value();
156166
}

packages/video_player/video_player_web/pubspec.yaml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ name: video_player_web
22
description: Web platform implementation of video_player.
33
repository: https://github.com/flutter/packages/tree/main/packages/video_player/video_player_web
44
issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+label%3A%22p%3A+video_player%22
5-
version: 2.3.3
5+
version: 2.3.4
66

77
environment:
88
sdk: ^3.4.0
@@ -21,7 +21,7 @@ dependencies:
2121
sdk: flutter
2222
flutter_web_plugins:
2323
sdk: flutter
24-
video_player_platform_interface: ^6.2.0
24+
video_player_platform_interface: ^6.3.0
2525
web: ">=0.5.1 <2.0.0"
2626

2727
dev_dependencies:

0 commit comments

Comments
 (0)