当触摸集中在另一个小部件上时,如何防止SliverAppBar滚动

时间:2019-04-26 18:59:40

标签: google-maps dart flutter uiscrollview

我有一个SliverAppBar,当用户在页面上向下滚动时,我希望将其隐藏。问题是我有一个Google Map小部件,当我只希望仅当我触摸Google Map时才移动它时,它也会导致应用程序栏也移动。有没有办法prevent this

@override
Widget build(BuildContext context) {
return SafeArea(
    child: Scaffold(
  body: CustomScrollView(
    slivers: <Widget>[
      SliverAppBar(
        backgroundColor: Colors.transparent,
        elevation: 5.0,
        pinned: false,
        snap: false,
        floating: false,
        expandedHeight: 200,
        flexibleSpace: FlexibleSpaceBar(
          background: Image.asset(
            'assets/events/city.jpeg',
            fit: BoxFit.cover,
          ),
        ),
      ),
      SliverFillRemaining(
        child: SingleChildScrollView(
          child: Column(
            children: <Widget>[
              Padding(
                padding: const EdgeInsets.all(16.0),
                child: Container(
                  height: 200,
                  width: double.infinity,
                  child: GoogleMap(
                    initialCameraPosition:
                        CameraPosition(target: LatLng(50.0, 50.0)),
                    onMapCreated: (controller) {
                      setState(() {
                        _googleMapController = controller;
                      });
                    },
                  ),
                ),
              )
            ],
          ),
        ),
      )
    ],
  ),
));
}

1 个答案:

答案 0 :(得分:0)

我发现在GoogleMap中添加了一个actionRecognizer属性并传入了VerticalDragRecognizer类型的Factory,这可以防止SliverAppBar滚动。它也可以在您想要为应用程序进行的任何类型的滚动中使用。请参见this,以了解有关50分钟标记的更多信息。

SliverFillRemaining(
    child: SingleChildScrollView(
      child: Column(
        children: <Widget>[
          Padding(
            padding: const EdgeInsets.all(16.0),
            child: Container(
              height: 200,
              width: double.infinity,
              child: GoogleMap(
                gestureRecognizers: Set()..add(Factory<VerticalDragGestureRecognizer>(
                    () => VerticalDragGestureRecognizer()
                )),
                scrollGesturesEngabled: true,
                initialCameraPosition:
                    CameraPosition(target: LatLng(50.0, 50.0)),
                onMapCreated: (controller) {
                  setState(() {
                    _googleMapController = controller;
                  });
                },
              ),
            ),
          )
        ],
      ),
    ),
  )