Flutter 拖拽排序组件 ReorderableListView

Flutter 拖拽排序组件 ReorderableListView

注意:无特殊说明,Flutter版本及Dart版本以下:程序员

  • Flutter版本: 1.12.13+hotfix.5
  • Dart版本: 2.7.0

ReorderableListView是经过长按拖动某一项到另外一个位置来从新排序的列表组件。ide

ReorderableListView须要设置childrenonReorder属性,children是子控件,onReorder是拖动完成后的回调,用法以下:.net

List<String> items = List.generate(20, (int i) => '$i');
ReorderableListView(
  children: <Widget>[
    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并不适合加载大量数据的列表,它适用于有限集合且须要排序的状况,好比手机系统里面设置语言的功能,经过拖动对语言排序。code

onReorder是拖动完成的回调,第一个参数是旧的数据索引,第二个参数是拖动到位置的索引,回调里面须要对数据进行排序并经过setState刷新数据。blog

效果以下:排序

Flutter 拖拽排序组件 ReorderableListView

header参数显示在列表的顶部,用法以下:索引

ReorderableListView(
  header: Text(
    '一枚有态度的程序员',
    style: TextStyle(color: Colors.red,fontSize: 20),
  )
  ...
)

效果以下:ci

Flutter 拖拽排序组件 ReorderableListView

reverse`参数设置为true且ReorderableListView的滚动方向为垂直时,滚动条直接滑动到底部,若是是水平方向则滚动条直接滑动到右边,默认为false,用法以下:rem

ReorderableListView(
  reverse: true,
  ...
)

scrollDirection`参数表示滚动到方向,默认为垂直,设置为水平方向以下:get

ReorderableListView(
  scrollDirection: Axis.horizontal,
  ...
)

因为改成水平滚动,因此子控件的宽度要设置,不然会出现没有列表。

效果以下:

Flutter 拖拽排序组件 ReorderableListView

今天的文章对你们是否有帮助?若是有,请在文章底部留言和点赞,以表示对个人支持,大家的留言、点赞和转发关注是我持续更新的动力!

Flutter 拖拽排序组件 ReorderableListView

更多相关阅读:

相关文章
相关标签/搜索