39 lines
1016 B
Dart
39 lines
1016 B
Dart
import 'dart:html' as html;
|
|
import 'dart:ui_web' as ui_web;
|
|
|
|
import 'package:flutter/material.dart';
|
|
|
|
class WebStreamPlayer extends StatefulWidget {
|
|
final String streamUrl;
|
|
|
|
const WebStreamPlayer({super.key, required this.streamUrl});
|
|
|
|
@override
|
|
State<WebStreamPlayer> createState() => _WebStreamPlayerState();
|
|
}
|
|
|
|
class _WebStreamPlayerState extends State<WebStreamPlayer> {
|
|
late final String _viewType;
|
|
|
|
@override
|
|
void initState() {
|
|
super.initState();
|
|
_viewType = 'flv-player-${DateTime.now().microsecondsSinceEpoch}';
|
|
|
|
ui_web.platformViewRegistry.registerViewFactory(_viewType, (int viewId) {
|
|
final iframe = html.IFrameElement()
|
|
..src = 'flv_player.html?src=${Uri.encodeComponent(widget.streamUrl)}'
|
|
..style.border = '0'
|
|
..style.width = '100%'
|
|
..style.height = '100%'
|
|
..allow = 'autoplay; fullscreen';
|
|
return iframe;
|
|
});
|
|
}
|
|
|
|
@override
|
|
Widget build(BuildContext context) {
|
|
return HtmlElementView(viewType: _viewType);
|
|
}
|
|
}
|