- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - ruby/ruby on rails 内存泄漏检测
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
我正在尝试创建一个 flutter 应用程序,它将在 WebView 中显示一个网站,我希望能够设置一个 RefreshIndicator,当用户在 webview 上下拉并刷新 WebView 时触发。
我可以使 WebView 正常工作,但 RefreshIndicator 仅适用于可垂直滚动的 View 。我已尝试将 WebView 作为唯一的子项添加到 ListView,但 WebView 不会下拉 ListView。
我试过将 RefreshIndicator 放在 Webview 周围,我也试过使用 PageView 而不是 ListView
import 'dart:async';
import 'package:flutter/material.dart';
import 'package:flutter/foundation.dart';
import 'package:flutter/gestures.dart';
import 'package:webview_flutter/webview_flutter.dart';
class WebViewContainer extends StatefulWidget {
final url;
WebViewContainer(this.url);
@override
createState() => _WebViewContainerState(this.url);
}
class _WebViewContainerState extends State<WebViewContainer> {
final Completer<WebViewController> _controller =
Completer<WebViewController>();
var _url;
final _key = UniqueKey();
_WebViewContainerState(this._url);
// WebViewController _webViewController;
@override
Widget build(BuildContext context) {
return Scaffold(
body: RefreshIndicator(
child: ListView(children: [
Container(
child: Center(child: Text('Top')),
),
Container(
height: MediaQuery.of(context).size.height,
child: WebView(
key: _key,
initialUrl: _url,
javascriptMode: JavascriptMode.unrestricted,
onWebViewCreated: (WebViewController webViewController) {
_controller.complete(webViewController);
},
navigationDelegate: (navigationRequest) {
return NavigationDecision.navigate;
},
gestureRecognizers: Set()
..add(Factory<VerticalDragGestureRecognizer>(
() => VerticalDragGestureRecognizer())),
javascriptChannels: <JavascriptChannel>[
_toasterJavascriptChannel(context),
].toSet(),
onPageFinished: (String url) {
print('Page Finished loading: $url');
},
),
),
Container(
child: Center(child: Text('Bottom')),
),
]),
onRefresh: _refreshWebView,
),
);
}
我想要的是一种只显示 Webview 的方法,当他们下拉 Webview 时它会刷新。另一种选择是,如果您在 Webview 中滚动到页面顶部,Webview 是否会下拉 ListView。
最佳答案
嗯,这是可以做到的。
在创建 webView 时,将 gestureRecognizers 设置为 EagerGestureRecognizer();
实现一个扩展 VerticalDragGestureRecognizer 的 AllowMultipleGestureRecognizer,将 rejectGesture() 重写为 acceptGesture();
实现一个 RawGestureDetector,使用 AllowMultipleGestureRecognizer 作为“手势”;
在RawGestureDetector中放一个LayoutBuilder(),目的是获取子上下文;
将您的 webView 放入 LayoutBuilder。现在,webView 和 RawGestureDetector 都可以接收手势事件。
实现将手势转换为滚动通知的转换层。您可能感兴趣的滚动通知是:ScrollStartNotification、OverscrollNotification、ScrollUpdateNotification 和 ScrollEndNotification。 RefreshIndicator 不需要 UserScrollNotification。这一层可能需要一些时间才能把事情做好;
在RawGestureDetector 的回调函数:onStart()/onUpdte()/onEnd() 中,调用翻译层生成通知。然后使用您从 LayoutBuilder 获得的上下文来调用正在监听滚动事件的每个祖先小部件。使用 context.visitAncestorElements() 来实现这一点。
修改 webView 的平台代码(Android 和 iOS),以将监听器添加到 YOffset。监听器调用“ channel ”方法将偏移量传递给您的 flutter 代码。 6 中的转换层查看 YOffset 以生成正确的通知(例如 OverscrollNotification 或 ScrollUpdateNotification)。
将 RawGestureDetector 放入 RefreshIndicator 中,您就完成了!
结果:结果相当令人失望。RefreshIndicator 的动画会导致 webView 重绘几次,从而导致屏幕闪烁和相当大的延迟。这绝对不是一个好的用户体验。 Flutter 不能很好地处理重型“插件”小部件,应避免对 webView 进行任何与动画相关的操作(例如推送/弹出)。
浪费时间。
关于flutter - 有没有办法向 webview_flutter 小部件添加下拉刷新?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57171434/
我试图让我的 jQuery 脚本从单击的链接中提取 url,然后将其插入到我的视频标签中。有什么建议吗? 我试过拼接我从 .html() 中得到的内容,但引号总是搞砸了。
我遇到了 docker 的问题。 场景是这样的:我们使用Codebuild+Packer+docker创建AMI,用于deploy。在这一步中,我们从 Artifactory 中提取图像,并且除了提取
我目前正在学习 RxJS。 在文档中,我找到了这个数组。 我尝试在谷歌上搜索“pull and push javascript”,但我什至不知道如何调用这些实体/概念。我不明白那是什么意思?我假设 S
Title 在小屏幕上,我首先需要标题,然后是文本字段,但在中等以上的屏幕上,我需要相反的方式 - 我已经尝试过推和拉,但它们无法工作 - 有什么想法吗? 最佳答案 根据 Swa
zmq 的某些部分未以可预测的方式运行。 我正在使用 VS2013 和 zmq 3.2.4。为了不在我的 pubsub 框架中“丢失”消息 [旁白:我认为这是一个设计缺陷。我应该能够首先启动我的订阅者
我正在编写一个使用嵌套 Bootstrap 列的页面。我正在使用推/拉让列在移动设备上切换位置,而且效果很好。但是,在桌面上我遇到了一些奇怪的间距问题。嵌套列偏移到父列的右侧。 我设置了一个 fidd
在拉取一些 docker 镜像(但不是全部)时出现此错误: failed to register layer: Error processing tar file(exit status 1): op
我创建了一个 Kubernetes 集群,并为每个节点安装了 docker。 当我尝试使用 docker push local_registry_addr:port/image_id 将图像拉取或推送
没有明确地推/拉单个书签,书签何时从 repo 复制/更新到 repo? 在我对两个本地存储库的测试中,我无法推断出一致的行为。有时从 A 到 B 或 B 到 A 的推/拉会复制/更新书签,有时不会。
在 Bootstrap 3 文档中,他们给出了以下使用 push 和 pull 类更改列顺序 (http://getbootstrap.com/css/#grid-column-ordering) 的
从这个问题开始Three column Bootstrap layout with left sidebar at bottom我了解了 Bootstrap 列推拉。 下面的代码片段几乎可以得到我想要
许多 Repo 函数的签名包括 **kwargs,其中文档说,您可以将参数传递给底层包装的 git 命令。但是,*args 没有位置。为了传递类似标志的参数,如 --all。我原以为它们会像 my_r
如果您将大文件推送/拉到设备上,这真的很烦人,现在无法知道它有多远。是否可以运行 adb push 或 adb pull 并使用“bar”实用程序获取进度条? 这里的主要问题是我认为 adb 需要两个
当我尝试使用 Gitkrakent 向/从 Heroku 推/拉时,GitKraken 告诉我: "Please log in to continue" 请求的“用户/登录”是什么? (我个人 Her
我在 docker 容器中有一个 Jenkins 2.150.1。要安装这个 Jenkins,我只需使用 jenkinsci/blueocean:1.9.0图片。 我创建了一个管道,然后尝试使用我的
我想使用 Jenkins 做下一步: 1- docker pull 2- docker run -i -t 我已经在jenkins上安装了docker插件,但是这可行吗? docker plugi
如果我正在处理一些我不想提交的文件,我只需保存它们。然后我有其他文件想要推送到服务器,但是如果其他人对存储库进行了更改,并且我将它们拉下来,它会要求我 merge 或 rebase ..但是这些选项中
无论出于何种原因,我在 FB 上共享链接时尝试使用的图像都无法加载。给出的确切错误是: 提供了og:image,无法下载。发生这种情况的原因有多种,例如您的服务器使用不受支持的内容编码。爬虫接受 de
今天我买了三星 Galaxy Note 3,它配备了 Android 4.3。由于它太新了,我找不到根植我设备的方法,所以我尝试使用 adb 连接……我失败了。 所以,我用了这个 D:\android
我尝试通过 airflow cli test 命令测试 2 个任务` 第一个任务运行,自动将最后一个控制台推送到 xcom,我按预期在 Airflow GUI 中看到了值 some value 当我通
我是一名优秀的程序员,十分优秀!