Flutter: исправление прокрутки календаря syncfusion путем принуждения победителя жестов на арене?

У меня проблема с календарем флаттера SyncFusion, что показано на этом снимке экранаSfCalendar показывая месяцы, которые находятся внутри Column с другими детьми (также см. конец минимального воспроизводимого примера кода):

Проблема проста: вертикальная прокрутка работает нормально, когда точка касания начинается с другой. Column детей, но когда точка касания начинается на SfCalendar то Columnне прокручивается. Кажется, что календарь полностью поглощает все жесты касания вертикального перетаскивания. Это очень раздражает, потому что SfCalendar в режиме месяца не использует жесты вертикального перетаскивания, поэтому он действительно должен позволять столбцу прокручиваться.

Настройка debugPrintGestureArenaDiagnostics = true показывает, что происходит, когда вы пытаетесь прокрутить календарь вертикально:

I/flutter (15390): Gesture arena 24   ❙ ★ Opening new gesture arena.
I/flutter (15390): Gesture arena 24   ❙ Adding: TapGestureRecognizer#6f41b(debugOwner: GestureDetector, state: ready, button: 1)
I/flutter (15390): Gesture arena 24   ❙ Adding: TapGestureRecognizer#0240c(debugOwner: GestureDetector, state: ready, button: 1)
I/flutter (15390): Gesture arena 24   ❙ Adding: VerticalDragGestureRecognizer#736cf(debugOwner: GestureDetector, start behavior: start)
I/flutter (15390): Gesture arena 24   ❙ Adding: HorizontalDragGestureRecognizer#bde3d(debugOwner: GestureDetector, start behavior: start)
I/flutter (15390): Gesture arena 24   ❙ Adding: VerticalDragGestureRecognizer#5137d(start behavior: start)
I/flutter (15390): Gesture arena 24   ❙ Closing with 5 members.
I/flutter (15390): Gesture arena 24   ❙ Rejecting: TapGestureRecognizer#6f41b(debugOwner: GestureDetector, state: possible, button: 1, sent tap down)
I/flutter (15390): Gesture arena 24   ❙ Rejecting: TapGestureRecognizer#0240c(debugOwner: GestureDetector, state: possible, button: 1, sent tap down)
I/flutter (15390): Gesture arena 24   ❙ Accepting: VerticalDragGestureRecognizer#736cf(debugOwner: GestureDetector, start behavior: start)
I/flutter (15390): Gesture arena 24   ❙ Self-declared winner: VerticalDragGestureRecognizer#736cf(debugOwner: GestureDetector, start behavior: start)

Кажется, есть два VerticalDragGestureRecognizers - Я предполагаю, что это SingleChildScrollView а другой SfCalendar(опять же, я понятия не имею, почему в календаре есть распознаватель вертикального перетаскивания, потому что он не имеет функции вертикального перетаскивания). Похоже, Календарь выигрывает арену из-за вертикального перетаскивания, затем просто проглатывает событие и ничего не делает.

Итак, мой вопрос:

Как мне сделать мой SingleChildScrollViewвыиграть арену? Или есть другой способ заставить это работать?

Минимальный воспроизводимый пример:

pubspec.yaml

name: syncfusioncalendarscroll
description: A new Flutter application.

publish_to: 'none' # Remove this line if you wish to publish to pub.dev
version: 1.0.0+1

environment:
  sdk: ">=2.7.0 <3.0.0"

dependencies:
  flutter:
    sdk: flutter

  syncfusion_flutter_calendar: ^18.1.59-beta

flutter:
  uses-material-design: true

main.dart

import 'package:flutter/gestures.dart';
import 'package:flutter/material.dart';
import 'package:syncfusion_flutter_calendar/calendar.dart';

void main() {
  debugPrintGestureArenaDiagnostics = true;
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: MyHomePage(),
    );
  }
}

class MyHomePage extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: SingleChildScrollView(
        child: Column(
          children: <Widget>[
            SizedBox(
              height: 700,
              child: Placeholder(color: Colors.amber),
            ),
            SfCalendar(
              view: CalendarView.month,
            ),
            SizedBox(
              height: 700,
              child: Placeholder(color: Colors.blue),
            ),
          ],
        ),
      )
    );
  }
}

1 ответ

Мы уже нашли и исправили сообщенную проблему "Прокрутка не работает, когда точка касания находится в календаре внутри столбца". Мы включим исправление проблемы в наш предстоящий выпуск 2 тома, который, как ожидается, выйдет в конце этой недели.

Вы также можете связаться с нами через наш форум поддержки, Direct-Trac или портал отзывов. Мы всегда рады Вам помочь!

Другие вопросы по тегам