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)
Кажется, есть два VerticalDragGestureRecognizer
s - Я предполагаю, что это 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 или портал отзывов. Мы всегда рады Вам помочь!