123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596 |
- import 'package:fis_live/controller/adapters/single/adapter_io.dart';
- import 'package:fis_live/controller/controller.dart';
- import 'package:fis_live/controller/exception.dart';
- import 'package:flutter/widgets.dart';
- import 'package:flutter_inappwebview/flutter_inappwebview.dart';
- import '../data_root.dart';
- /// 单路画面直播视图
- class SingleChannelView extends StatefulWidget {
- const SingleChannelView({super.key});
- @override
- State<SingleChannelView> createState() => _SingleChannelViewState();
- }
- class _SingleChannelViewState extends State<SingleChannelView> {
- late final LiveShareDateProxy dataProxy;
- LiveController get controller => dataProxy.controller;
- LiveControllerSingleIOAdapter get adapter =>
- controller.adapter! as LiveControllerSingleIOAdapter;
- InAppWebViewController get wvController => adapter.webViewController!;
- @override
- void initState() {
- super.initState();
- }
- @override
- void didChangeDependencies() {
- dataProxy = LiveShareDateProxy.of(context)!;
- controller.adapter = LiveControllerSingleIOAdapter();
- super.didChangeDependencies();
- }
- @override
- Widget build(BuildContext context) {
- return _buildWebView();
- }
- Widget _buildWebView() {
- return InAppWebView(
- initialFile: "assets/wwwroot/source.html",
- initialOptions: InAppWebViewGroupOptions(
- crossPlatform: InAppWebViewOptions(
- mediaPlaybackRequiresUserGesture: false,
- disableHorizontalScroll: true,
- disableVerticalScroll: true,
- allowFileAccessFromFileURLs: true,
- allowUniversalAccessFromFileURLs: true,
- ),
- ),
- onWebViewCreated: (c) {
- adapter.webViewController = c;
- c.addJavaScriptHandler(handlerName: 'onReady', callback: _onReady);
- c.addJavaScriptHandler(handlerName: 'onStart', callback: _onStart);
- c.addJavaScriptHandler(handlerName: 'onStop', callback: _onStop);
- c.addJavaScriptHandler(handlerName: 'onTimeout', callback: _onTimeout);
- c.addJavaScriptHandler(handlerName: 'onError', callback: _onError);
- c.addJavaScriptHandler(handlerName: 'onBuffering', callback: _onError);
- },
- onLoadStop: (c, url) {},
- onConsoleMessage: (c, consoleMessage) {
- print(
- "[WebView Console][${consoleMessage.messageLevel}] ${consoleMessage.message}");
- },
- );
- }
- dynamic _onReady(List args) {
- final url = controller.source.url;
- wvController.evaluateJavascript(source: "load('$url')");
- controller.ready.emit(this, null);
- }
- dynamic _onStart(List args) {
- controller.playStarted.emit(this, null);
- }
- dynamic _onStop(List args) {
- controller.playStopped.emit(this, null);
- }
- dynamic _onTimeout(List args) {
- controller.timeout.emit(this, null);
- }
- dynamic _onError(List args) {
- final error = args.first;
- controller.errorOccurred.emit(
- this,
- FLivePlayerException(error.code, error.msg),
- );
- }
- }
|