create method
Creates an instance of a video player and returns its textureId.
Implementation
@override
Future<int> create(DataSource dataSource) async {
final int textureId = _textureCounter++;
late String uri;
switch (dataSource.sourceType) {
case DataSourceType.network:
// Do NOT modify the incoming uri, it can be a Blob, and Safari doesn't
// like blobs that have changed.
uri = dataSource.uri ?? '';
case DataSourceType.asset:
String assetUrl = dataSource.asset!;
if (dataSource.package != null && dataSource.package!.isNotEmpty) {
assetUrl = 'packages/${dataSource.package}/$assetUrl';
}
assetUrl = ui_web.assetManager.getAssetUrl(assetUrl);
uri = assetUrl;
case DataSourceType.file:
return Future<int>.error(UnimplementedError(
'web implementation of video_player cannot play local files'));
case DataSourceType.contentUri:
return Future<int>.error(UnimplementedError(
'web implementation of video_player cannot play content uri'));
}
final web.HTMLVideoElement videoElement = web.HTMLVideoElement()
..id = 'videoElement-$textureId'
..style.border = 'none'
..style.height = '100%'
..style.width = '100%';
// TODO(hterkelsen): Use initialization parameters once they are available
ui_web.platformViewRegistry.registerViewFactory(
'videoPlayer-$textureId', (int viewId) => videoElement);
final VideoPlayer player = VideoPlayer(videoElement: videoElement)
..initialize(
src: uri,
);
_videoPlayers[textureId] = player;
return textureId;
}