webview - WebView CustomScrollView + Floating AppBar
问题描述
我正在尝试创建一个具有 WebView 的屏幕(来自webview_flutter: ^0.3.5+3)和一个AppBar
我想在用户滚动时滚动到屏幕外的屏幕。
我偶然发现了这个指南并尝试实现类似的东西,但没有骰子。
有没有办法WebView
在CustomScrollView
with中使用 aSlivers
或者这还不支持?
SliverChildListDelegate
如果我在我的(我尝试过Row
,等)中创建常规小部件,我可以让滚动应用栏工作Text
,Container
但没有运气使用WebView
.
@override
Widget build(BuildContext context) {
return Scaffold(
body: CustomScrollView(
slivers: <Widget>[
SliverAppBar(
title: const Text("Heading"),
floating: true,
),
SliverList(
delegate: SliverChildListDelegate([
Container(
child: WebView(
initialUrl: url,
javascriptMode: JavascriptMode.unrestricted,
),
)
]
),
)
],
)
);
}
欢迎任何指针/建议/RTFM。
编辑赏金
jordan-davies 提供的解决方案有效,但非常不稳定。每当SliverAppBar
滚动离开时,都会WebView
尝试调整自身大小以填充剩余的视口。这会导致非常不稳定/缓慢的体验。
@override
Widget build(BuildContext context) {
return CustomScrollView(
slivers: <Widget>[
SliverAppBar(
title: const Text("Heading"),
floating: true,
),
SliverFillRemaining(
child: WebView(initialUrl: "http://stackoverflow.com"),
)
],
);
}
解决方案
我实际上想发表评论,但它太长了,不适合
我可以给你我的看法,为什么不能在插件的当前状态下做到这一点,默认情况下,Webview
只有在没有其他视图声称该手势时才会响应拖动手势。另一方面,滚动条像SliverList
,这是SliverAppBar
向上滚动所需的,默认情况下会消耗所有拖动滚动手势 -尽管您可以通过提供 noScrollPhysics 来禁用它- 但是一旦WebView
覆盖所有屏幕,实际上就没有办法报告回来给条子重新开始消耗卷轴。
所以解决的办法是修改WebView plugin
自身,为拖拽手势提供回调,希望flutter团队尽快实现这个功能。
推荐阅读
- spring-boot - 为什么 Spring Boot 有两种不同的 ReactiveX 实现?
- postgresql - io.crate.shade.org.postgresql.util.PSQLException:致命:用户“ABC”的信任身份验证失败
- javascript - Suitescript 2.0 ResultSet.Each 回调函数超过 4000
- java - 二维数组网格玩家运动 Java
- python - 使用带有格式化输出的 Python 进行数据探索
- node.js - 创建 Mongoose/MongoDB 常量文档
- java - 为什么在 Java 中使用“this”作为方法参数时会收到此错误消息?
- python - 如何通过身份验证下载文件?
- ruby - 如何使用 VCR for Ruby/RSpec 动态生成多个 HTTP 模拟响应?
- .net - 第一个连字符后的字符串的子字符串,包括后的连字符