无法使用
webview_flutter
插件在Dart中实现。但是,您可以使用我的插件
flutter_inappwebview,它是Flutter插件,允许您添加内联WebViews或打开内置浏览器窗口,并具有大量的事件、方法和选项来控制WebViews。
它实现了暂停/恢复WebView的方法。
对于Android,您可以使用
InAppWebViewController.android.pause
和
InAppWebViewController.android.resume
来暂停和恢复WebView。您应该在Widget中实现
WidgetsBindingObserver
并通过
didChangeAppLifecycleState()
方法检查
AppLifecycleState state
。
如果您需要暂停/恢复JavaScript执行,可以使用
InAppWebViewController.pauseTimers
/
InAppWebViewController.resumeTimers
方法。
以下是一个带有YouTube URL的示例:
import 'dart:async';
import 'dart:io';
import 'package:flutter/material.dart';
import 'package:flutter_inappwebview/flutter_inappwebview.dart';
Future main() async {
WidgetsFlutterBinding.ensureInitialized();
runApp(MyApp());
}
class MyApp extends StatefulWidget {
@override
_MyAppState createState() => new _MyAppState();
}
class _MyAppState extends State<MyApp> with WidgetsBindingObserver {
InAppWebViewController webView;
@override
void initState() {
WidgetsBinding.instance.addObserver(this);
super.initState();
}
@override
void dispose() {
WidgetsBinding.instance.removeObserver(this);
super.dispose();
}
@override
void didChangeAppLifecycleState(AppLifecycleState state) {
print('state = $state');
if (webView != null) {
if (state == AppLifecycleState.paused) {
webView.pauseTimers();
if (Platform.isAndroid) {
webView.android.pause();
}
} else {
webView.resumeTimers();
if (Platform.isAndroid) {
webView.android.resume();
}
}
}
}
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: const Text('InAppWebView Example'),
),
body: Container(
child: Column(children: <Widget>[
Expanded(
child: InAppWebView(
initialUrl: "https://www.youtube.com/watch?v=NfNdXgJZfFo",
initialHeaders: {},
initialOptions: InAppWebViewGroupOptions(
crossPlatform: InAppWebViewOptions(
debuggingEnabled: true,
),
),
onWebViewCreated: (InAppWebViewController controller) {
webView = controller;
},
onLoadStart: (InAppWebViewController controller, String url) {},
onLoadStop: (InAppWebViewController controller, String url) {},
))
])),
),
);
}
}