Как обрабатывать жесты прокрутки в Flutter PageView? - PullRequest
0 голосов
/ 30 апреля 2020
  1. Краткое изложение моей проблемы

Цель

Моя цель - представить карусель с длинными страницами. Поэтому я использую PageView с scrollviews. PageView прокручивается горизонтально. Виды прокрутки (дети) прокручивают по вертикали.

Ожидаемые результаты

Проведите пальцем по горизонтали и плавно прокручивайте по вертикали.

Фактические результаты

Если я проведу пальцем по горизонтали до следующей страницы, я не смогу сразу прокрутить ее по вертикали. Мне нужно подождать 1 секунду. Кажется, пользователь должен дождаться завершения анимации, чтобы иметь возможность взаимодействовать с новой текущей страницей.

Что я пробовал до сих пор:

  • Я пытался распознаватель жестов для передачи события перетаскивания, но у меня это не получилось.
  • Я пробовал разные виджеты, чтобы заменить PageView, но тот же эффект.
  • Я пробовал AutomaticKeepAliveClientMixin с wantKeepAlive = true
  • Я попробовал PageView.physics = AlwaysScrollableScrollPhysics ()

Вот минимальный код, который вам понадобится для воспроизведения проблемы

import 'package:flutter/material.dart';

void main() => runApp(MyApp());

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

class MyHomePage extends StatefulWidget {
  MyHomePage({Key key}) : super(key: key);

  @override
  _MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: carousel(),
    );
  }

  Widget carousel() {
    return PageView(
      children: <Widget>[
        page(Colors.pinkAccent),
        page(Colors.blueAccent),
        page(Colors.orangeAccent)
      ],
    );
  }

  Widget page(Color color) {
    return Container(
        decoration: BoxDecoration(
          color: color,
        ),
        child: SingleChildScrollView(
          child: Column(
              children: pageContent()),
        ));
  }

  List<Widget> pageContent() {
    return <Widget>[
      Row(children: <Widget>[Text("Hop", textScaleFactor: 5,)]),
      Row(children: <Widget>[Text("Hop", textScaleFactor: 5,)]),
      Row(children: <Widget>[Text("Hop", textScaleFactor: 5,)]),
      Row(children: <Widget>[Text("Hop", textScaleFactor: 5,)]),
      Row(children: <Widget>[Text("Hop", textScaleFactor: 5,)]),
      Row(children: <Widget>[Text("Hop", textScaleFactor: 5,)]),
      Row(children: <Widget>[Text("Hop", textScaleFactor: 5,)]),
      Row(children: <Widget>[Text("Hop", textScaleFactor: 5,)]),
      Row(children: <Widget>[Text("Hop", textScaleFactor: 5,)]),
      Row(children: <Widget>[Text("Hop", textScaleFactor: 5,)]),
      Row(children: <Widget>[Text("Hop", textScaleFactor: 5,)]),
      Row(children: <Widget>[Text("Hop", textScaleFactor: 5,)]),
      Row(children: <Widget>[Text("Hop", textScaleFactor: 5,)]),
      Row(children: <Widget>[Text("Hop", textScaleFactor: 5,)]),
      Row(children: <Widget>[Text("Hop", textScaleFactor: 5,)]),
      Row(children: <Widget>[Text("Hop", textScaleFactor: 5,)]),
    ];
  }
}

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...