@@ -7,8 +7,97 @@ import 'package:flutter/material.dart';
7
7
import 'package:flutter_web_plugins/flutter_web_plugins.dart' ;
8
8
import 'package:video_player_platform_interface/video_player_platform_interface.dart' ;
9
9
10
- class VideoPlayer {
11
- VideoPlayer ({this .uri, this .textureId});
10
+ /// The web implementation of [VideoPlayerPlatform] .
11
+ ///
12
+ /// This class implements the `package:video_player` functionality for the web.
13
+ class VideoPlayerPlugin extends VideoPlayerPlatform {
14
+ /// Registers this class as the default instance of [VideoPlayerPlatform] .
15
+ static void registerWith (Registrar registrar) {
16
+ VideoPlayerPlatform .instance = VideoPlayerPlugin ();
17
+ }
18
+
19
+ Map <int , _VideoPlayer > _videoPlayers = < int , _VideoPlayer > {};
20
+
21
+ int _textureCounter = 1 ;
22
+
23
+ @override
24
+ Future <void > init () async {
25
+ return _disposeAllPlayers ();
26
+ }
27
+
28
+ @override
29
+ Future <void > dispose (int textureId) {
30
+ _videoPlayers[textureId].dispose ();
31
+ _videoPlayers.remove (textureId);
32
+ return null ;
33
+ }
34
+
35
+ void _disposeAllPlayers () {
36
+ _videoPlayers
37
+ .forEach ((_, _VideoPlayer videoPlayer) => videoPlayer.dispose ());
38
+ _videoPlayers.clear ();
39
+ }
40
+
41
+ @override
42
+ Future <int > create (DataSource dataSource) async {
43
+ final int textureId = _textureCounter;
44
+ _textureCounter++ ;
45
+
46
+ final _VideoPlayer player = _VideoPlayer (
47
+ uri: Uri .parse (dataSource.uri),
48
+ textureId: textureId,
49
+ );
50
+
51
+ player.setupVideoPlayer ();
52
+
53
+ _videoPlayers[textureId] = player;
54
+ return textureId;
55
+ }
56
+
57
+ @override
58
+ Future <void > setLooping (int textureId, bool looping) async {
59
+ return _videoPlayers[textureId].setLooping (looping);
60
+ }
61
+
62
+ @override
63
+ Future <void > play (int textureId) async {
64
+ return _videoPlayers[textureId].play ();
65
+ }
66
+
67
+ @override
68
+ Future <void > pause (int textureId) async {
69
+ return _videoPlayers[textureId].pause ();
70
+ }
71
+
72
+ @override
73
+ Future <void > setVolume (int textureId, double volume) async {
74
+ return _videoPlayers[textureId].setVolume (volume);
75
+ }
76
+
77
+ @override
78
+ Future <void > seekTo (int textureId, Duration position) async {
79
+ return _videoPlayers[textureId].seekTo (position);
80
+ }
81
+
82
+ @override
83
+ Future <Duration > getPosition (int textureId) async {
84
+ _videoPlayers[textureId].sendBufferingUpdate ();
85
+ return _videoPlayers[textureId].getPosition ();
86
+ }
87
+
88
+ @override
89
+ Stream <VideoEvent > videoEventsFor (int textureId) {
90
+ return _videoPlayers[textureId].eventController.stream;
91
+ }
92
+
93
+ @override
94
+ Widget buildView (int textureId) {
95
+ return HtmlElementView (viewType: textureId.toString ());
96
+ }
97
+ }
98
+
99
+ class _VideoPlayer {
100
+ _VideoPlayer ({this .uri, this .textureId});
12
101
13
102
final StreamController <VideoEvent > eventController =
14
103
StreamController <VideoEvent >();
@@ -105,93 +194,3 @@ class VideoPlayer {
105
194
return durationRange;
106
195
}
107
196
}
108
-
109
- /// The web implementation of [VideoPlayerPlatform] .
110
- ///
111
- /// This class implements the `package:video_player` functionality for the web.
112
- class VideoPlayerPlugin extends VideoPlayerPlatform {
113
- /// Registers this class as the default instance of [VideoPlayerPlatform] .
114
- static void registerWith (Registrar registrar) {
115
- VideoPlayerPlatform .instance = VideoPlayerPlugin ();
116
- }
117
-
118
- Map <int , VideoPlayer > videoPlayers = < int , VideoPlayer > {};
119
- Map <int , StreamController <VideoEvent >> videoEventControllers =
120
- < int , StreamController <VideoEvent >> {};
121
-
122
- int _textureCounter = 1 ;
123
-
124
- @override
125
- Future <void > init () async {
126
- return _disposeAllPlayers ();
127
- }
128
-
129
- @override
130
- Future <void > dispose (int textureId) {
131
- videoPlayers[textureId].dispose ();
132
- videoPlayers.remove (textureId);
133
- return null ;
134
- }
135
-
136
- void _disposeAllPlayers () {
137
- videoPlayers.forEach ((_, VideoPlayer videoPlayer) => videoPlayer.dispose ());
138
- videoPlayers.clear ();
139
- }
140
-
141
- @override
142
- Future <int > create (DataSource dataSource) async {
143
- final int textureId = _textureCounter;
144
- _textureCounter++ ;
145
-
146
- final VideoPlayer player = VideoPlayer (
147
- uri: Uri .parse (dataSource.uri),
148
- textureId: textureId,
149
- );
150
-
151
- player.setupVideoPlayer ();
152
-
153
- videoPlayers[textureId] = player;
154
- return textureId;
155
- }
156
-
157
- @override
158
- Future <void > setLooping (int textureId, bool looping) async {
159
- return videoPlayers[textureId].setLooping (looping);
160
- }
161
-
162
- @override
163
- Future <void > play (int textureId) async {
164
- return videoPlayers[textureId].play ();
165
- }
166
-
167
- @override
168
- Future <void > pause (int textureId) async {
169
- return videoPlayers[textureId].pause ();
170
- }
171
-
172
- @override
173
- Future <void > setVolume (int textureId, double volume) async {
174
- return videoPlayers[textureId].setVolume (volume);
175
- }
176
-
177
- @override
178
- Future <void > seekTo (int textureId, Duration position) async {
179
- return videoPlayers[textureId].seekTo (position);
180
- }
181
-
182
- @override
183
- Future <Duration > getPosition (int textureId) async {
184
- videoPlayers[textureId].sendBufferingUpdate ();
185
- return videoPlayers[textureId].getPosition ();
186
- }
187
-
188
- @override
189
- Stream <VideoEvent > videoEventsFor (int textureId) {
190
- return videoPlayers[textureId].eventController.stream;
191
- }
192
-
193
- @override
194
- Widget buildView (int textureId) {
195
- return HtmlElementView (viewType: textureId.toString ());
196
- }
197
- }
0 commit comments