Как предотвратить прокрутку SliverAppBar, когда касание сфокусировано на другом виджете - PullRequest
1 голос
/ 26 апреля 2019

У меня есть SliverAppBar, который я хочу скрыть, когда пользователь прокручивает страницу вниз.Проблема в том, что у меня есть виджет Google Map, который также перемещает панель приложения, когда я хочу, чтобы она двигалась только тогда, когда мое касание отключено от Google Map.Есть ли способ предотвратить это ?

@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 Ответ

1 голос
/ 29 апреля 2019

Я обнаружил, что добавление свойства gestRecognizer в GoogleMap и передача в Factory типа VerticalDragRecognizer позволили предотвратить прокрутку 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;
                  });
                },
              ),
            ),
          )
        ],
      ),
    ),
  )
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...