gpt4 book ai didi

flutter - Flutter中webview加载成功前如何显示本 map 片?

转载 作者:IT王子 更新时间:2023-10-29 07:16:24 24 4
gpt4 key购买 nike

在 Flutter 中,我想在加载 webview 之前显示本地镜像。如果用户没有打开他们的 wifi,将显示一个图像,而不是空白屏幕 (ios) 或一条错误消息,指出无法连接到所述网页 (android)。

我正在为这个应用程序使用官方的 webview_flutter 包。

下面是我试过的代码,但它适用于 ios,但不适用于 android。在 Android 中,当我关闭 wifi 并启动应用程序时,会显示一条显示 webview 链接的错误消息。

编辑:连接 wifi 并按下重新加载按钮后,不会从图像更改为网页 View 。

final webViewKey1 = GlobalKey<WebViewContainerState>();
var _url = 'http://www.google.com';
final _key = UniqueKey();
bool _isLoadingPage;

class WebViewPage extends StatefulWidget {
@override
WebViewPageState createState() => WebViewPageState();
}

class WebViewPageState extends State<WebViewPage> {

@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Screen 1'),
leading: IconButton(
icon: Icon(Icons.menu),
onPressed: (){
Scaffold.of(context).openDrawer();
},
),
actions: <Widget>[
IconButton(
icon: Icon(Icons.refresh),
color: Colors.white,
onPressed: () {
webViewKey1.currentState?.reloadWebView();
},
),
]
),
body:
WebViewContainer(key: webViewKey1),
);
}
}

class WebViewContainer extends StatefulWidget {
WebViewContainer({Key key}) : super(key: key);

@override
WebViewContainerState createState() => WebViewContainerState();
}

class WebViewContainerState extends State<WebViewContainer> {
WebViewController _webViewController;

void initState() {
super.initState();
_isLoadingPage = true;
}

@override
Widget build(BuildContext context) {
return Stack(
children: <Widget>[
Opacity(opacity: _isLoadingPage?0:1, child: WebView(
key: _key,
initialUrl: _url,
javascriptMode: JavascriptMode.unrestricted,
onWebViewCreated: (controller) {
_webViewController = controller;
},
onPageFinished: (finish) {
setState(() {
_isLoadingPage = false;
});
},
),
),
_isLoadingPage
? Container(
decoration: BoxDecoration(
image: DecorationImage(
image: AssetImage('assets/images/fail.png'),
fit: BoxFit.fill,
),
),
)
: Container(
color: Colors.transparent,
),
],
);
}

void reloadWebView() {
_webViewController?.reload();
}
}

最佳答案

Use opacity widget to make it invisible and on completion show it.

Opacity(opacity: _isLoadingPage?0:1, child: WebView(
key: _key,
initialUrl: _url,
javascriptMode: JavascriptMode.unrestricted,
onWebViewCreated: (webViewCreate) {
_controller.complete(webViewCreate);
},
onPageFinished: (finish) {
setState(() {
_isLoadingPage = false;
});
},
),)

关于flutter - Flutter中webview加载成功前如何显示本 map 片?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57247604/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com