【发布时间】:2022-10-13 12:49:12
【问题描述】:
我在Html 小部件中显示iframe,在ListView.builder 中。
由于 iframe,我无法滚动页面。当我开始从它们之间的空白处拖动时,我只能滚动。
我试图用AbsorbPointer 和IgnorePointer 包装Html 小部件,它们正在工作,我可以滚动,但我不想完全禁用iframe 上的指针事件。因为其中一些是可点击的(例如它有一个标签栏,例如:比特币|第一张图上的以太币)
问题是,我是否可以吸收这些 iframe 的所有拖动和滚动事件,让用户正常滚动页面,同时也让他们点击 iframe?
class HubContentWidget extends StatefulWidget {
const HubContentWidget({
Key? key,
required this.hub,
}) : super(key: key);
final HubCategory hub;
@override
State<HubContentWidget> createState() => _HubContentWidgetState();
}
class _HubContentWidgetState extends State<HubContentWidget> {
late Future<List<HubItem>> _hubFuture;
@override
void initState() {
_hubFuture = Service.getHubItems(uri: widget.hub.uri);
super.initState();
}
bool absorbPointers = false;
@override
Widget build(BuildContext context) {
return FutureBuilder<List<HubItem>>(
future: _hubFuture,
builder: (context, snapshot) {
if (snapshot.hasData) {
final items = snapshot.data!;
if (items.isEmpty) {
return Center(child: Text('No items found'));
}
return ListView.builder(
shrinkWrap: true,
itemCount: items.length,
itemBuilder: (context, index) {
/// This widget takes all the pointer events
/// and prevents scrolling.
return Html(
data: items[index].content.formatted,
navigationDelegateForIframe: (request) {
return NavigationDecision.navigate;
},
);
},
);
} else {
return CircularProgressIndicator.adaptive();
}
},
);
}
}
来自flutter_html-2.2.1 的 HTML 小部件
iframe 示例
<p><iframe title="The rise and fall of cryptocurrency" aria-label="Interactive line chart" id="datawrapper-chart-acQ2e" src="https://datawrapper.dwcdn.net/acQ2e/4/" scrolling="no" frameborder="0" style="width: 0; min-width: 100% !important; border: none;" height="450"></iframe><script type="text/javascript">!function(){"use strict";window.addEventListener("message",(function(e){if(void 0!==e.data["datawrapper-height"]){var t=document.querySelectorAll("iframe");for(var a in e.data["datawrapper-height"])for(var r=0;r<t.length;r++){if(t[r].contentWindow===e.source)t[r].style.height=e.data["datawrapper-height"][a]+"px"}}}))}();
</script></p>
【问题讨论】:
-
请附上您的代码和您取得的成就
-
@mohammadesmaili 已添加代码。
-
请添加您传递给
Html的数据示例,谢谢 -
我尝试了单个列表视图的代码,但它没有水平滚动,而在 listviewB 中我可以垂直滚动而没有空格,我错过了什么吗?或者这个示例 iframe 是否水平滚动?
-
@mohammadesmaili 感谢您的退房。我不需要水平滚动,也没有水平滚动的代码。问题是,当我想垂直滚动页面时,每当我点击 iframe 时,iframe 都会接受所有的触摸事件并且不会让我滚动。我需要找到一个没有被 iframe 占用的空白区域来点击和滚动。
标签: flutter