我想把一个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,但我没有测试它。