当内部滚动视图到达抖动边缘时,如何将外部滚动视图插入?

时间:2019-07-08 16:46:43

标签: flutter scroll scrollview flutter-layout scrollable

我在其父SingleChildScrollView小部件内有一个SingleChildScrollView作为子小部件,如下图所示, enter image description here

当前,当我向下滚动内部滚动视图中的触摸区域时,内部滚动视图向下滚动,到达底部时什么也没有移动。

但是我希望当内部滚动视图到达底部时,整个屏幕(外部滚动视图)开始滚动,如下所示。 (是否不必再次点按以滚动外部滚动视图都没关系)

enter image description here

我如何实现该行为?正如我从下面的代码中看到的那样,我尝试使用NeverScrollableScrollPhysics,并且可以正常工作,但是有问题。当内部滚动视图到达底部时,物理场变为NeverScrollableScrollPhysics,因此内部滚动视图将不再能够滚动,这符合我的意图。因此,外部scrollview滚动会自动开始,但是这里的问题是,内部scrollview根本无法滚动,因此无法向上滚动。

请在下面检查我的代码:

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")
                                              ]))))]))));}},

0 个答案:

没有答案