【发布时间】:2019-12-06 10:13:08
【问题描述】:
在 Flutter 中,我想在加载 webview 之前显示本地图像。如果用户没有打开他们的wifi,将显示一个图像而不是一个空白的白色屏幕(ios)或一个错误消息说无法连接到所述网页(android)。
我正在为这个应用使用官方的 webview_flutter 包。
以下是我尝试过的代码,但它适用于 ios 但不适用于 android。在 Android 中,当我关闭 wifi 并启动应用程序时,会显示一条显示 webview 链接的错误消息。
编辑:wifi 连接并按下重新加载按钮后不会从图像更改为 webview。
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();
}
}
【问题讨论】: