我在其父SingleChildScrollView小部件内有一个SingleChildScrollView作为子小部件,如下图所示,
当前,当我向下滚动内部滚动视图中的触摸区域时,内部滚动视图向下滚动,到达底部时什么也没有移动。
但是我希望当内部滚动视图到达底部时,整个屏幕(外部滚动视图)开始滚动,如下所示。 (是否不必再次点按以滚动外部滚动视图都没关系)
我如何实现该行为?正如我从下面的代码中看到的那样,我尝试使用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")
]))))]))));}},