注意:無特殊說明,F(xiàn)lutter版本及Dart版本如下:
- Flutter版本: 1.12.13+hotfix.5
- Dart版本: 2.7.0
ReorderableListView是通過長按拖動某一項到另一個位置來重新排序的列表組件。
ReorderableListView需要設置children
和onReorder
屬性,children
是子控件,onReorder
是拖動完成后的回調(diào),用法如下:
List items = List.generate(20, (int i) => '$i');
ReorderableListView(
children: [
for (String item in items)
Container(
key: ValueKey(item),
height: 100,
margin: EdgeInsets.symmetric(horizontal: 50, vertical: 10),
decoration: BoxDecoration(
color:
Colors.primaries[int.parse(item) % Colors.primaries.length],
borderRadius: BorderRadius.circular(10)),
)
],
onReorder: (int oldIndex, int newIndex) {
if (oldIndex < newIndex) {
newIndex -= 1;
}
var child = items.removeAt(oldIndex);
items.insert(newIndex, child);
setState(() {});
},
)
ReorderableListView的每個子控件必須設置唯一的key,ReorderableListView沒有“懶加載”模式,需要一次構建所有的子組件,所以ReorderableListView并不適合加載大量數(shù)據(jù)的列表,它適用于有限集合且需要排序的情況,比如手機系統(tǒng)里面設置語言的功能,通過拖動對語言排序。
onReorder
是拖動完成的回調(diào),第一個參數(shù)是舊的數(shù)據(jù)索引,第二個參數(shù)是拖動到位置的索引,回調(diào)里面需要對數(shù)據(jù)進行排序并通過setState
刷新數(shù)據(jù)。
效果如下:
header
參數(shù)顯示在列表的頂部,用法如下:
ReorderableListView(
header: Text(
'一枚有態(tài)度的程序員',
style: TextStyle(color: Colors.red,fontSize: 20),
)
...
)
效果如下:
reverse`參數(shù)設置為true且ReorderableListView的滾動方向為垂直時,滾動條直接滑動到底部,如果是水平方向則滾動條直接滑動到右邊,默認為false,用法如下:
ReorderableListView(
reverse: true,
...
)
scrollDirection`參數(shù)表示滾動到方向,默認為垂直,設置為水平方向如下:
ReorderableListView(
scrollDirection: Axis.horizontal,
...
)
由于改為水平滾動,所以子控件的寬度要設置,否則會出現(xiàn)沒有列表。
效果如下:
今天的文章對大家是否有幫助?如果有,請在文章底部留言和點贊,以表示對我的支持,你們的留言、點贊和轉發(fā)關注是我持續(xù)更新的動力!
另外有需要云服務器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務器、裸金屬服務器、高防服務器、香港服務器、美國服務器、虛擬主機、免備案服務器”等云主機租用服務以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務可用性高、性價比高”等特點與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應用場景需求。