滚动组件是具有可滚动(Scroll)效果的内容区块,可以透过滚动的方式提供更多可浏览的内容。
而且在装置平台不一样时,View的宽高限制通常不一样,例如先前的范例在不同模拟器显示的状况,虽然我们可以使用 Wrap
避免有提醒画面的出现,但装置的大小会让我们无法看到完整的画面,Flutter提供了多种滚动组件,让我们可以处理这种状况。
对於内容不会超过 View 太多的状况,我们可以使用 SingleChildScrollView
包装想要的内容;不过若内容较多的状况,可以改用 ListView
动态载入效能上会比较好。
我们改写一下先前布局组件的范例改用 SingleChildScrollView 包装过内容,这边预留一个开关可以查看使用前後的差异。
var isScrollable = true;
if (isScrollable) {
content = Scrollbar(
isAlwaysShown: true,
child: SingleChildScrollView(
child: content,
),
);
}
Scrollbar
的组件可以用来显示右侧的拖拉条。
原先在 iphone 6 simulator 画面会被切掉的状况,目前已可正常显示。
ListView
是一个垂直可滚动的区块,提供列表的方式显示每一列的内容,例如:功能选单、商品清单、连络人清单或是聊天室讯息的呈现。
它的使用方式也很简单,只需要定义好列表里children
的Widget
内容即可
ListView(children: items);
不过上述的方式较适用在数量不多的情境上,若要呈现的内容较多且画面空间有限的状况,会建议改采用的 ListView.builder
的方式延迟内容的载入,透过 lazy load 提升效能。
这边我们使用 ListView
呈现一个具有无限内容的选单列表
class ListViewWidget extends StatelessWidget {
@override
Widget build(BuildContext context) {
return ListView.builder(
itemBuilder: (BuildContext context, int index) {
return ListTile(title: Text("${index + 1}"));
},
);
}
}
效果如下
GridView
是一种以网格方式呈现的列表画面,比起 ListView
多了列的排列方式,在使用上与 ListView
大同小异,不过多了属性 gridDelegate
定义列要显示内容的数量crossAxisCount
,也提供网格间距childAspectRatio
相关的设定。
我们一样使用 itemBuilder
来建立一个无限内容的网格列表
class GridViewWidget extends StatelessWidget {
@override
Widget build(BuildContext context) {
return GridView.builder(
gridDelegate: SliverGridDelegateWithFixedCrossAxisCount(
crossAxisCount: 5,
childAspectRatio: 1.0,
),
itemBuilder: (BuildContext context, int index) {
return ListTile(title: Center(child: Text("${index + 1}")));
},
);
}
}
效果如下
表单 一般input、textarea、select(包含多重选择) 结构 最外层:Class中加上...
昨天,提供了一种CSS命名的方法, 今天,我们再来看看有什麽要避免的CSS命名呢? 避免直接把颜色放...
前言 Hi, 我是鱼板伯爵今天就是把之前写的一堆功能放到Screen里面,由於是UI的部分所以程序码...
前情提要一下,上次在变数命名的善意那篇中我们把arr换成seats代表一堆位置,n1换成seat代表...
终於也进入到尾声了,最後一章要介绍网格项目的分层与顺序。 z-index 分层 .item { z-...