在Android中我们经常会需要打开一些html前端界面,这个时候我们通常都会使用webview通过url来加载网页,而在Flutter中是否也有类似webview的Widget呢?很可惜,答案是暂时没有,但是却有一个插件可以使用,那就是 flutter_webview_plugin。
1.要使用flutter_webview_plugin,首先要去pubspec.yaml文件下先配置导入插件
dependencies:
flutter_webview_plugin: ^0.3.0+2
值得一提的是这个文件对于代码格式有着极高的要求,像Python一样需要严格对齐。
添加以后点击右上角的Packages get等待导入。
2.导入成功后在需要webview的Dart文件下导包
import 'package:flutter_webview_plugin/flutter_webview_plugin.dart';
我这里因为只是一个Demo,所以我就直接贴源码了:
import 'package:flutter_webview_plugin/flutter_webview_plugin.dart';
import 'package:flutter/material.dart';
void main(){
runApp(new MaterialApp(
routes: {
'/':(_) => new WebviewScaffold(
url: "http://www.baidu.com/",
appBar: new AppBar(
title: new Text("webview"),
),
),
},
));
}
这里还不得不说一件事,因为webview不存在于widget树中导致想在webview上弹出Flutter的Dialog我暂时还未能找到解决办法。
如果想监控返回键和Appbar上的返回键,可以使用Flutter中的WillPopScope,具体的我就不说了,直接贴代码,里面的参数大家应该也看得懂
import 'package:flutter/material.dart';
import 'package:flutter_webview_plugin/flutter_webview_plugin.dart';
class WebViewPage extends StatelessWidget {
String title;
String url;
BuildContext context;
WebViewPage(String title,String url){
this.title=title;
this.url=url;
}
Future _requestPop() {
Navigator.of(context).pop(100);///弹出页面并传回int值100,用于上一个界面的回调
return new Future.value(false);
}
@override
Widget build(BuildContext context) {
this.context=context;
// TODO: implement build
return
new WillPopScope(
child:
new WebviewScaffold(
url: url,
appBar: new AppBar(
iconTheme: IconThemeData(
color: Colors.white
),
backgroundColor: Color.fromARGB(255, 41, 58, 144),
title: new Text(title,style: new TextStyle(color: Colors.white),),
),
),
onWillPop: _requestPop);
}
}
///这里是上一个界面用于接收webview返回键回调的部分
int coordinates = await Navigator.of(_context).push(
MaterialPageRoute(
builder: (_context) => new WebViewPage("test", data.url)
)
);
if(coordinates==100){
///这里填上当接收回调成功后要执行的操作
}