title: How to handle scrollview gestures inside a Flutter PageView?
body: <ol>
  <li>Summary of my problem</li>
  </ol>
  
  <p><strong>Goal</strong></p>
  
  <p>My goal is to present a carousel with long pages.
  So I use a PageView with scrollviews.
  The PageView scrolls horizontally.
  The scrollviews (children) scroll vertically.</p>
  
  <p><strong>Expected Results</strong></p>
  
  <p>Swipe horizontally and scroll vertically smoothly.</p>
  
  <p><strong>Actual Results</strong></p>
  
  <p>If I swipe horizontally to the next page, I can't scroll it vertically right away.
  I need to wait for 1 second.
  It seems the user must wait the animation completion to be able to interact with the new current page.</p>
  
  <p><strong>What have I tried so far :</strong></p>
  
  <ul>
  <li>I tried gesture recognizer to pass the dragging event but I didn't get it working.</li>
  <li>I tried different widgets to replace the PageView but same effect.</li>
  <li>I tried AutomaticKeepAliveClientMixin with wantKeepAlive = true</li>
  <li>I tried PageView.physics = AlwaysScrollableScrollPhysics()</li>
  </ul>
  
  <p><strong>Here's the minimum code you would need to reproduce the problem</strong> </p>
  
  <pre><code>import 'package:flutter/material.dart';
  
  void main() =&gt; 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() =&gt; _MyHomePageState();
  }
  
  class _MyHomePageState extends State&lt;MyHomePage&gt; {
    @override
    Widget build(BuildContext context) {
      return Scaffold(
        body: carousel(),
      );
    }
  
    Widget carousel() {
      return PageView(
        children: &lt;Widget&gt;[
          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&lt;Widget&gt; pageContent() {
      return &lt;Widget&gt;[
        Row(children: &lt;Widget&gt;[Text("Hop", textScaleFactor: 5,)]),
        Row(children: &lt;Widget&gt;[Text("Hop", textScaleFactor: 5,)]),
        Row(children: &lt;Widget&gt;[Text("Hop", textScaleFactor: 5,)]),
        Row(children: &lt;Widget&gt;[Text("Hop", textScaleFactor: 5,)]),
        Row(children: &lt;Widget&gt;[Text("Hop", textScaleFactor: 5,)]),
        Row(children: &lt;Widget&gt;[Text("Hop", textScaleFactor: 5,)]),
        Row(children: &lt;Widget&gt;[Text("Hop", textScaleFactor: 5,)]),
        Row(children: &lt;Widget&gt;[Text("Hop", textScaleFactor: 5,)]),
        Row(children: &lt;Widget&gt;[Text("Hop", textScaleFactor: 5,)]),
        Row(children: &lt;Widget&gt;[Text("Hop", textScaleFactor: 5,)]),
        Row(children: &lt;Widget&gt;[Text("Hop", textScaleFactor: 5,)]),
        Row(children: &lt;Widget&gt;[Text("Hop", textScaleFactor: 5,)]),
        Row(children: &lt;Widget&gt;[Text("Hop", textScaleFactor: 5,)]),
        Row(children: &lt;Widget&gt;[Text("Hop", textScaleFactor: 5,)]),
        Row(children: &lt;Widget&gt;[Text("Hop", textScaleFactor: 5,)]),
        Row(children: &lt;Widget&gt;[Text("Hop", textScaleFactor: 5,)]),
      ];
    }
  }
  
  </code></pre>