我创建了一个页面,其中包含一个列中的多个文本字段和按钮,该列包含在具有背景图像的容器中。而这个容器本身就是一个scrollview小部件的子代。
因此,当一个人点击其中一个字段时,他们的键盘会弹出(占据屏幕的一部分),这意味着一些按钮/字段在屏幕外,这是scrollview小部件用于其目的的地方。
这里的问题是我想限制滚动视图允许用户滚动的距离。
最低按钮下方有一些空白区域,我不希望用户能够一直滚动到那里。这也是让体验变得简单而没有用户" overscroll"经过他应该输入的字段。
但由于背景图像是滚动视图的一部分,因此视图将允许用户向下滚动到图像底部。我想限制这个。
作为后续工作,我试图弄清楚如何设置初始滚动位置。 (因此,当单击某个字段时,滚动视图会向下滚动到第一个文本字段,因此所有字段都在视图中。用户无需向下滚动它们。但我不希望此滚动位置重新显示 - 当然,每当用户点击某个字段时应用。)
这是相关的(如果我的任何代码看起来非常糟糕请说出来,我是一般的编程新手并接受任何改进的建议):
class LoginPageConstructor extends StatelessWidget {
@override
Widget build(BuildContext context) {
AssetImage loginBackgroundAsset =
new AssetImage("assets/loginscreen/backgroundrock.png");
// var _scrollController = new ScrollController(
// initialScrollOffset: 200.0,
// keepScrollOffset: true);
return new Scaffold(
body: new Container(
child: new ListView(key: new PageStorageKey("Divider 1"),
// controller: _scrollController,
children: <Widget>[
new Stack(children: <Widget>[
new Container(
constraints: new BoxConstraints.expand(height: 640.0),
decoration: new BoxDecoration(
image: new DecorationImage(
image: loginBackgroundAsset, fit: BoxFit.cover)),
child: new Column(
children: <Widget>[
new Divider(height: 300.0,),
new Center(child: new UsernameText(),),
new Divider(height: 8.0,),
new Center(child: new PasswordText(),),
new Divider(),
new LoginButton(),
new Divider(),
new SignUpButton(),
],
))
])
],
),
));
}
}
答案 0 :(得分:6)
为了将字段自动滚动到视图中,听起来好像在和issue 10826进行摔跤。我在这个问题上发布了workaround。我将解决方法改为您的示例代码;见下文。 (你可能想稍微调整一下。)
如果您想阻止用户滚动,您可能只想确保使用下面相同的技术显示所有字段,然后使用NeverScrollableScrollPhysics
作为{{1}的physics
}}。或者,如果您有野心,可以实现自定义滚动物理,如Gallery example所示。如果我是你,我会坚持要#10826修复。
ListView