初学Flutter写界面时遇到几次像素溢出,在网上寻找解决办法大致有以下几种:
1.Expanded包装一下
比如原来代码
body: new Column(
children: <Widget>[
Text('1111111'),
Text('22222222222222222222222'),// 这里可能会溢出
],
)
修改后
body: new Column(
children: <Widget>[
Text('1111111111')
Expanded(
child: Text('22222222222222222222222')
)
],
)
2.SingleChildScrollView包装一下
比如原来代码
body: new Column(
children: <Widget>[
],
)
修改后
body: SingleChildScrollView(
child: ConstrainedBox(
constraints: BoxConstraints(minHeight: 120.0),
child: new Column(
children: <Widget>[
]
),
),
)
补充:
SingleChildScrollView 嵌套 ListView.builder滑动冲突
-
原因
SingleChildScrollView 和 ListView 都有滚动属性physics 他们默认是都是可以滚动的,
ListView 嵌套 ListView.builder 需要后者shrinkWrap = true,不然报错; -
解决方式
禁用 ListView 的滚动physics 保留 SingleChildScrollView 的滚动
Listview 执行 physics 属性 new NeverScrollableScrollPhysics(), //禁用滚动事件
3. 查找源码
可以看到,Flutter在这里做的处理
_calculateOverflowRegions这个方法,计算界面是否超出边界,如果超出了
就添加一个斑马线的布局,可以通过修改源码的方式,暂时让他隐藏
直接return就可以了。
当然,Flutter这样是为了更好的提示开发者,方便开发的。平时调试的时候还是要打开的。除非上线,如果不放心的话,可以这么写。