Как избежать прокрутки списка при прокрутке на карте в списке - PullRequest
1 голос
/ 18 мая 2019

У меня есть ListView, в верхней части которого у меня есть карта, я хочу, чтобы карта прокручивалась вне поля зрения при прокрутке ListView, но я также хочу, чтобы пользователь мог взаимодействовать с картой. Поэтому прокрутка должна происходить только тогда, когда пользователь прокручивает другие виджеты ListView, а не когда он прокручивает карту, тогда я хочу, чтобы жест был применен непосредственно к карте. Однако в настоящее время, когда пользователь прокручивает карту, он прокручивает весь ListView.

Я попробовал другое предположение, что я наткнулся здесь Как в Flutter дочерний виджет может предотвратить прокрутку своего прокручиваемого родителя? Я добавил GestureDetector, как предложено в ответе на пост выше, оборачивая контейнер карты в приведенном ниже примере, однако это просто заблокировало прокрутку как ListView, так и карты при прокрутке на карте. Ссылка на видео https://imgur.com/SeCRzUC

Вот виджет, который возвращается моим методом сборки. Этот код зависит от плагина google_maps_flutter.

Container(
  height: MediaQuery.of(context).size.height,
  child:
  ListView.builder(
    itemCount: 12 + 1,
    itemBuilder: (context, index) {
      if (index == 0) return GestureDetector(
        onVerticalDragUpdate: (_){},
        child: Container(
          height: MediaQuery.of(context).size.height / 2,
          child: GoogleMap(initialCameraPosition: initalPosition),
        ),
      );
      else return ListTile(title: Text("$index"),);
    }
  )
),

Я надеялся, что карта будет отображать жесты, но это не так, список, в котором он содержится, захватывает все. Кто-нибудь может подсказать, как можно заставить все жесты для этого элемента в списке передаваться непосредственно на карту, и при этом прокручивать список при прокрутке других элементов в списке?

1 Ответ

1 голос
/ 18 мая 2019
  • Оберните все с помощью ListView, если вы хотите переместить виджет GoogleMap с экрана при прокрутке.

  • Переопределить физику прокрутки ListView с помощью GoogleMap gestRecognizers.

  • Отключение физики прокрутки ListView.builder из-за конфликта между физиками ListView.

Сначала импортируйте зависимости:

import 'package:flutter/foundation.dart';
import 'package:flutter/gestures.dart';

метод построения:

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: ListView(
        children: <Widget>[
          SizedBox(
            height: MediaQuery.of(context).size.height / 2,
            child: GoogleMap(
              initialCameraPosition:
                  CameraPosition(target: LatLng(41, 29), zoom: 10),
              gestureRecognizers: Set()
                ..add(
                    Factory<PanGestureRecognizer>(() => PanGestureRecognizer()))
                ..add(
                  Factory<VerticalDragGestureRecognizer>(
                      () => VerticalDragGestureRecognizer()),
                )
                ..add(
                  Factory<HorizontalDragGestureRecognizer>(
                      () => HorizontalDragGestureRecognizer()),
                )
                ..add(
                  Factory<ScaleGestureRecognizer>(
                      () => ScaleGestureRecognizer()),
                ),
            ),
          ),
          ListView.builder(
            physics: const NeverScrollableScrollPhysics(),
            shrinkWrap: true,
            itemCount: 12,
            itemBuilder: (context, index) {
              return ListTile(
                title: Text("$index"),
              );
            },
          )
        ],
      ),
    );
  }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...