本文实现flutter代码调用Android原生Webview(本文比较长)
1.新建一个Flutter项目
2.在项目根目录下右键new>module>flutter plugin
3.自动生成如下图所示项目结构
其中webview_plugin就是我们新建的WebView插件,名字可以自由命名。
展开webview_plugin文件夹的结构如下:
我们目前只关注Android的,所以我们只需要在android文件下写,其他不变,android文件下有个WebviewPlugin.java文件,以下是我修改完的代码:
/**
* WebviewPlugin
*/
public class WebviewPlugin implements MethodCallHandler {
private Activity activity;
private WebView webView;
private Result result;
/**
* Plugin registration.
*/
public static void registerWith(Registrar registrar) {
final MethodChannel channel = new MethodChannel(registrar.messenger(), "webview_plugin");
channel.setMethodCallHandler(new WebviewPlugin(registrar.activity()));
}
@TargetApi(Build.VERSION_CODES.ECLAIR_MR1)
public WebviewPlugin(Activity activity) {
this.activity = activity;
webView=new WebView(activity);
webView.getSettings().setJavaScriptEnabled(true);
webView.getSettings().setLoadWithOverviewMode(true);
webView.getSettings().setCacheMode(WebSettings.LOAD_NO_CACHE);
webView.getSettings().setLoadsImagesAutomatically(true);// 加载网页中的图片
webView.getSettings().setUseWideViewPort(true); //设置使用视图的宽端口
webView.getSettings().setAllowFileAccess(true);// 可以读取文件缓存(manifest生效)
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
webView.getSettings().setMixedContentMode(WebSettings.MIXED_CONTENT_ALWAYS_ALLOW);
}
}
@Override
public void onMethodCall(MethodCall call, Result result) {
this.result=result;
switch (call.method) {
case "load":
FrameLayout.LayoutParams params = buildLayoutParams(call);
LinearLayout linearLayout=new LinearLayout(activity);
linearLayout.setOrientation(LinearLayout.VERTICAL);