如何在折叠工具栏中使用地图的点击事件



我想把一个MapWidget放到一个FlexibleSpaceBar(在NestedScrollView内的SliverAppBar内(中,以在可折叠工具栏中显示它。我的小部件树如下所示:

Scaffold
|
|- NestedScrollView
|
|- SliverAppBar
|   |
|   |- FlexibleSpaceBar
|       |
|       |- Map
|
|- ListView

问题是NestedScrollView消耗了所有手势事件,我无法再在Map上使用捏缩放。解决这个问题的最佳方法是什么?

下面是一些代码:

class ListPage extends StatelessWidget {
@override
Widget build(BuildContext context) {
List<int> list = List<int>.generate(10, (i) => i + 1);
return NestedScrollView(
headerSliverBuilder: (context, innerBoxIsScrolled) {
return [
SliverAppBar(
expandedHeight: 250.0,
floating: true,
pinned: true,
snap: false,
flexibleSpace: FlexibleSpaceBar(
title: Text('Second Screen'),
background: MapWidget(),
)),
];
},
body: ListView.builder(
itemCount: list.length,
itemBuilder: (context, index) {
int item = list[index];
return Text('item $item');
},
),
);
}
}

如果您使用GoogleMap作为MapWidget,也许这会有所帮助:

gestureRecognizers: Set()
..add(Factory<PanGestureRecognizer>(() => PanGestureRecognizer()))
..add(Factory<VerticalDragGestureRecognizer>(
() => VerticalDragGestureRecognizer())),

有了这个,您可以在地图微件中使用平移和拖动手势。

我浏览了一下其他手势识别器选项,最接近捏缩放的是ScaleGestureRecognizer,但我没有测试它。

最新更新