当我关闭应用程序大约一分钟,然后在恢复之前将其移动到后台时,InAppWebView小部件被白色覆盖,或者它只是不显示屏幕上的Web内容.我仍然可以与应用程序暂停之前加载的页面进行交互,我可以听到网站上播放的声音效果,所以它肯定在某种程度上仍然处于活动状态.我只是对如何在恢复应用程序时让它真正显示页面感到困惑.当我重新打开挂起的应用程序时,调试控制台没有显示任何异常;它与InAppWebView实际可见时的输出完全相同.
我试着在我的应用程序中实现了InAppWebView的基本实现,使用了不同的URL,运行Ffltter Clear,运行FightPub升级,运行Ffltter Pub降级,但我仍然遇到这个问题.以下是该页面的代码.
class CustomWebView extends StatefulWidget {
final String url;
CustomWebView({required this.url});
@override
_CustomWebViewState createState() => _CustomWebViewState();
}
class _CustomWebViewState extends State<CustomWebView>
with SingleTickerProviderStateMixin, WidgetsBindingObserver {
bool _isLoading = true; // Initially, webview is loading
late InAppWebViewController webcontroller;
@override
void initState() {
super.initState();
}
@override
Widget build(BuildContext context) {
return InAppWebView(
key: Key('webview'),
initialOptions: InAppWebViewGroupOptions(
crossPlatform: InAppWebViewOptions(
transparentBackground: true,
useShouldOverrideUrlLoading: true,
supportZoom: true,
),
android: AndroidInAppWebViewOptions(
builtInZoomControls: true,
loadWithOverviewMode: true,
useWideViewPort: true,
),
ios: IOSInAppWebViewOptions(
disableInputAccessoryView: true,
allowsInlineMediaPlayback: true,
),
),
initialUrlRequest: URLRequest(url: Uri.parse(widget.url)),
shouldOverrideUrlLoading: (controller, navigationAction) async {
var uri = navigationAction.request.url!;
if (uri.toString().contains('logout')) {
logOut(context);
return NavigationActionPolicy.CANCEL;
}
if (uri.toString().contains('whatsapp')) {
var shareText = await getTextParam(uri.toString());
Share.share(shareText!);
return NavigationActionPolicy.CANCEL;
}
if (uri.toString().contains('?process_s=3')) {
var status = await Permission.storage.status;
if (!status.isGranted) {
status = await Permission.storage.request();
}
if (status.isGranted) {
Navigator.push(
context,
MaterialPageRoute(
builder: (context) => GenerateQRPage(
url: '',
)));
}
return NavigationActionPolicy.CANCEL;
}
return NavigationActionPolicy.ALLOW;
},
onWebViewCreated: (InAppWebViewController controller) {
webcontroller = controller;
},
onLoadStop: (controller, url) async {},
);
}
}