Unify web player controls and add volume control
This commit is contained in:
@@ -2,11 +2,13 @@ import 'package:flutter/material.dart';
|
||||
|
||||
class WebStreamPlayer extends StatelessWidget {
|
||||
final String streamUrl;
|
||||
final double volume;
|
||||
final int? refreshToken;
|
||||
|
||||
const WebStreamPlayer({
|
||||
super.key,
|
||||
required this.streamUrl,
|
||||
required this.volume,
|
||||
this.refreshToken,
|
||||
});
|
||||
|
||||
|
||||
@@ -1,3 +1,5 @@
|
||||
// ignore_for_file: avoid_web_libraries_in_flutter, deprecated_member_use
|
||||
|
||||
import 'dart:html' as html;
|
||||
import 'dart:ui_web' as ui_web;
|
||||
|
||||
@@ -5,11 +7,13 @@ import 'package:flutter/material.dart';
|
||||
|
||||
class WebStreamPlayer extends StatefulWidget {
|
||||
final String streamUrl;
|
||||
final double volume;
|
||||
final int? refreshToken;
|
||||
|
||||
const WebStreamPlayer({
|
||||
super.key,
|
||||
required this.streamUrl,
|
||||
required this.volume,
|
||||
this.refreshToken,
|
||||
});
|
||||
|
||||
@@ -19,6 +23,7 @@ class WebStreamPlayer extends StatefulWidget {
|
||||
|
||||
class _WebStreamPlayerState extends State<WebStreamPlayer> {
|
||||
late final String _viewType;
|
||||
html.IFrameElement? _iframe;
|
||||
|
||||
@override
|
||||
void initState() {
|
||||
@@ -29,15 +34,30 @@ class _WebStreamPlayerState extends State<WebStreamPlayer> {
|
||||
ui_web.platformViewRegistry.registerViewFactory(_viewType, (int viewId) {
|
||||
final iframe = html.IFrameElement()
|
||||
..src =
|
||||
'flv_player.html?v=$cacheBuster&src=${Uri.encodeComponent(widget.streamUrl)}'
|
||||
'flv_player.html?v=$cacheBuster'
|
||||
'&src=${Uri.encodeComponent(widget.streamUrl)}'
|
||||
'&volume=${widget.volume}'
|
||||
..style.border = '0'
|
||||
..style.width = '100%'
|
||||
..style.height = '100%'
|
||||
..style.pointerEvents = 'none'
|
||||
..allow = 'autoplay; fullscreen';
|
||||
_iframe = iframe;
|
||||
return iframe;
|
||||
});
|
||||
}
|
||||
|
||||
@override
|
||||
void didUpdateWidget(covariant WebStreamPlayer oldWidget) {
|
||||
super.didUpdateWidget(oldWidget);
|
||||
if (oldWidget.volume != widget.volume) {
|
||||
_iframe?.contentWindow?.postMessage({
|
||||
'type': 'setVolume',
|
||||
'value': widget.volume,
|
||||
}, '*');
|
||||
}
|
||||
}
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return HtmlElementView(viewType: _viewType);
|
||||
|
||||
Reference in New Issue
Block a user