flutter中使用webview
首先要安装一个插件:flutter_webview_plugin
dependencies:
flutter_webview_plugin: ^0.2.1+2
使用方法:

new MaterialApp(
routes: {
"/": (_) => new WebviewScaffold(
url: "https://www.google.com",
appBar: new AppBar(
title: new Text("Widget webview"),
),
)
},
);

FlutterWebviewPlugin 插件提供一个链接到唯一webview的单一实例,这样你就可以在app中的任何地方控制webview,比如监听事件:
final flutterWebviewPlugin = new FlutterWebviewPlugin();
// 监听url地址改变事件
flutterWebviewPlugin.onUrlChanged.listen((String url) { });

// 监听页面滚动事件
final flutterWebviewPlugin = new FlutterWebviewPlugin();
flutterWebviewPlugin.onScrollYChanged.listen((double offsetY) { }); flutterWebviewPlugin.onScrollXChanged.listen((double offsetX) { });

隐藏webview:
final flutterWebviewPlugin = new FlutterWebviewPlugin(); flutterWebviewPlugin.launch(url, hidden: true);
关闭webview:
flutterWebviewPlugin.close();
画一个内部矩形webview:

final flutterWebviewPlugin = new FlutterWebviewPlugin(); flutterWebviewPlugin.launch(url,
fullScreen: false,
rect: new Rect.fromLTWH(
0.0,
0.0,
MediaQuery.of(context).size.width,
300.0));

注意:webview并不存在于widget树中,所以你不能在webview中使用如snackbars, dialogs ...这些通知交互widget,更详细一些使用方法可以点击这里;
最后,这里是一个使用例子:

1 import 'package:flutter/material.dart';
2 import 'package:flutter_webview_plugin/flutter_webview_plugin.dart';
3
4 class WebViewExample extends StatefulWidget {
5 @override
6 _WebViewExampleState createState() => _WebViewExampleState();
7 }
8
9 class _WebViewExampleState extends State<WebViewExample> {
10 TextEditingController controller = TextEditingController();
11 FlutterWebviewPlugin flutterWebviewPlugin = FlutterWebviewPlugin();
12 var urlString = "https://google.com";
13
14 launchUrl() {
15 setState(() {
16 urlString = controller.text;
17 flutterWebviewPlugin.reloadUrl(urlString);
18 });
19 }
20
21 @override
22 void initState() {
23 super.initState();
24
25 flutterWebviewPlugin.onStateChanged.listen((WebViewStateChanged wvs) {
26 print(wvs.type);
27 });
28 }
29
30 @override
31 Widget build(BuildContext context) {
32 return WebviewScaffold(
33 appBar: AppBar(
34 title: TextField(
35 autofocus: false,
36 controller: controller,
37 textInputAction: TextInputAction.go,
38 onSubmitted: (url) => launchUrl(),
39 style: TextStyle(color: Colors.white),
40 decoration: InputDecoration(
41 border: InputBorder.none,
42 hintText: "Enter Url Here",
43 hintStyle: TextStyle(color: Colors.white),
44 ),
45 ),
46 actions: <Widget>[
47 IconButton(
48 icon: Icon(Icons.navigate_next),
49 onPressed: () => launchUrl(),
50 )
51 ],
52 ),
53 url: urlString,
54 withZoom: false,
55 );
56 }
57 }

flutter中使用webview的更多相关文章
- 在Flutter中嵌入Native组件的正确姿势是...
引言 在漫长的从Native向Flutter过渡的混合工程时期,要想平滑地过渡,在Flutter中使用Native中较为完善的控件会是一个很好的选择.本文希望向大家介绍AndroidView的使用方式 ...
- Unity中使用WebView
Unity中使用WebView @(设计) 需求,最近游戏中需要引入H5直播页面和更新比较频繁的赛事页面,需求包括:加密传参数.和Unity交互,在Unity框架下其实有几种方案: 内置函数Appli ...
- Android中脱离WebView使用WebSocket实现群聊和推送功能
WebSocket是Web2.0时代的新产物,用于弥补HTTP协议的某些不足,不过他们之间真实的关系是兄弟关系,都是对socket的进一步封装,其目前最直观的表现就是服务器推送和聊天功能.更多知识参考 ...
- Android 中的 WebView实现 Html5 标签网页加载
自Android 4.4起,Android中的WebView开始基于Chromium(谷歌浏览器)支持浏览器的一系列功能,webkit解析网页各个节点,这个改变,使得WebView的性能大幅度提升,并 ...
- Android中使用WebView, WebChromeClient和WebViewClient加载网页 (能够执行js)
Android中使用WebView, WebChromeClient和WebViewClient加载网页 在android应用中,有时要加载一个网页,如果能配上一个进度条就更好了,而android ...
- Android中通过WebView控件实现与JavaScript方法相互调用的地图应用
在Android中通过WebView控件,可以实现要加载的页面与Android方法相互调用,我们要实现WebView中的addJavascriptInterface方法,这样html才能调用andro ...
- 让Android中的webview支持页面中的文件上传
android webview在默认情况下是不支持网页中的文件上传功能的: 如果在网页中有<input type="file" />,在android webview中 ...
- 从零学习Fluter(五):Flutter中手势滑动拖动已经网络请求
从六号开始搞Flutter,到今天写这篇blog已经过了4天时间,文档初步浏览了一遍,写下了这个demo.demo源码分享在github上,现在对flutter有种说不出的喜欢了.大家一起搞吧! 废话 ...
- Flutter 中 JSON 解析
本文介绍一下Flutter中如何进行json数据的解析.在移动端开发中,请求服务端返回json数据并解析是一个很常见的使用场景.Android原生开发中,有GsonFormat这样的神器,一键生成Ja ...
随机推荐
- A new session could not be created. (Original error: Requested a new session but one was in progress) (WARNING: The server did not provide any stacktrace information)
出现这个问题,是因为关毕了appium,或者是关毕了appium再次打开,那么session就不是一样的了所以报错. 一般是因为测试的时候报错了,appium自动关毕了,再次打出现的报错 解决方法:重 ...
- linux 使用不安全的sprintf函数,存储字符越界导致程序莫名崩溃问题
linux c++编程 问题背景: 在处理一个公共模块的代码中,其中有以下代码片段 //代码片段-组合一组字符串并存放到szSignKey数组中 ] = {}; sprintf(szSignKey, ...
- IE8下动态生成option无法设置文本内容
问题: 1.在IE8下,JS动态添加 option 的时候,value 有值,但是文本内容添加不上 例:<option value="北京"></option&g ...
- vim 撤销 回退操作
在vi中按u可以撤销一次操作 u 撤销上一步的操作Ctrl+r 恢复上一步被撤销的操作 注意:如果你输入“u”两次,你的文本恢复原样,那应该是你的Vim被配置在Vi兼容模式了.重做如果你撤销得太多 ...
- 第五天 py if使用
if 的结果缩进 用个Tab 缩进四个空格就好了
- roadhog 介绍
官方网站:https://www.npmjs.com/package/roadhog; 项目搭建demo: https://github.com/ght5935/antd-dva-less-webpa ...
- thinkphp 在本地正常,在云端ubuntu下报控制器不存在
thinkphp 在本地正常,在云端ubuntu下报控制器不存在的错 ubuntu是严格区分大小写的,本地的服务器可能对大小写要求没有那么严格, thinkphp的控制器的文件夹默认是小写字母,如果你 ...
- elementUI中table组件会出现空白部分
先上图: 造成原因: width全部都写死了,(注释:不要全部都写死width,没写width的会自动分配宽度)
- Python学习之旅(七)
Python基础知识(6):基本数据类型之列表 在Python中,最基本的数据结构是序列.序列中的每个元素被分配一个序号——即元素的位置,也称为索引.第一个索引从0开始,如果要从右边开始,序列中的最后 ...
- Vue Watch 的原理 和 $nextTick() 通俗理解
网上watch和$nextTick()解释比较复杂,涉及到promise,h5的dom发生变化的新api等复杂代码,下列就是两个参考. [watch原理] [$nextTick()] 首先,看遇到问题 ...