как внешний прокрутки, чтобы включить, когда внутренний прокрутки достигает края в флаттер? - PullRequest
0 голосов
/ 08 июля 2019

У меня есть SingleChildScrollView в качестве дочернего виджета внутри его родительского виджета SingleChildScrollView, как на рисунке ниже, enter image description here

В настоящее время, когда я прокручиваю вниз касающуюся область во внутреннем виде прокрутки, внутренний вид прокрутки прокручивается вниз, и ничто не перемещается, когда оно достигает дна.

Но я хочу, чтобы весь экран (внешний вид прокрутки) начинал прокручиваться, когда внутренний вид прокрутки достигает дна, как показано ниже. (Не имеет значения, нужно ли мне снова нажимать, чтобы прокрутить внешний вид прокрутки)

enter image description here

Как я мог добиться поведения? Я пытался использовать NeverScrollableScrollPhysics, как вы можете видеть из моего кода ниже, и это вроде работает, но есть проблема. Когда внутренний вид прокрутки достигает дна, физика становится NeverScrollableScrollPhysics, поэтому внутренний вид прокрутки больше не сможет прокручиваться, что удовлетворяет моим намерениям. Поэтому автоматически включается внешняя прокрутка прокрутки, но проблема в том, что внутренняя прокрутка не будет прокручиваться вверх, так как она вообще не будет прокручиваться.

Пожалуйста, проверьте мой код ниже:

class Example extends StatefulWidget {
     State<Example> createState() => ExampleState();
}

class ExampleState extends State<Example> {
   ScrollController _scrollController = ScrollController();
   ScrollPhysics _scrollPhysics = ScrollPhysics();
   String description = "textexxtett t exte tx tetexxt text text text";

   @override
   void initState(){
       _scrollController.addListener(_scrollListener);
   }

  void _scrollListener(){
      if (_scrollController.offset >= _scrollController.position.maxScrollExtent){
           if (_scrollController.position.axisDirection == AxisDirection.down) {
               print("down");
               setState(() {
                   _scrollPhysics = NeverScrollableScrollPhysics();
               });
           }
     }else if (_scrollController.offset <= _scrollController.position.minScrollExtent){
          if (_scrollController.position.axisDirection == AxisDirection.up) {
               print("top");
               setState(() {
                   _scrollPhysics = NeverScrollableScrollPhysics();
               });
          }
     }
 }

   @override
  Widget build(BuildContext context) {
      return Scaffold(
         body: SingleChildScrollView(
               physics: _scrollPhysics,
               controller: _scrollController,
               child: ConstrainedBox(
                      constraints: BoxConstraints(
                      minHeight: MediaQuery.of(context).size.height,
                      ),
                      child: Column(
                             mainAxisSize: MainAxisSize.min, 
                             children: [
                                       ConstrainedBox(
                                       constraints: BoxConstraints(
                                       minHeight: MediaQuery.of(context).size.height * 0.15,
                                       maxHeight: MediaQuery.of(context).size.height * 0.30,
          ),
                                       child: Container(
                                              padding: EdgeInsets.fromLTRB(25, 0, 25, 25),
                                              child: SingleChildScrollView(child: Column(
                                                     children: [
                                                 Text("$title\n"),
                                              Text("$description")
                                              ]))))]))));}},
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...