drag_select_grid_view

一个支持拖放和点击选择项目的网格。

selecting

基本用法

首先,DragSelectGridView 构造函数与 GridView.builder 非常相似,所以您应该花时间了解后者,然后再深入研究这个库。

一旦您熟悉了 GridView.builder,可能唯一需要了解的额外信息就是 DragSelectGridViewController。通过它,您可以知道哪些索引被选中了。

查看此示例

class MyApp extends StatefulWidget {
  @override
  _MyAppState createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  final controller = DragSelectGridViewController();

  @override
  void initState() {
    super.initState();
    controller.addListener(scheduleRebuild);
  }

  @override
  void dispose() {
    controller.removeListener(scheduleRebuild);
    super.dispose();
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: SelectionAppBar(
        selection: controller.selection,
      ),
      body: DragSelectGridView(
        gridController: controller,
        itemCount: 20,
        itemBuilder: (context, index, selected) {
          return SelectableItem(
            index: index,
            selected: selected,
          );
        },
        gridDelegate: SliverGridDelegateWithMaxCrossAxisExtent(
          maxCrossAxisExtent: 80,
        ),
      ),
    );
  }

  void scheduleRebuild() => setState(() {});
}

正如您在上面的代码中可能注意到的,为了提供良好的用户体验,DragSelectGridView 必须与其他两个小部件一起使用。在示例中,它们是:

  • SelectableItem:一个可选中的小部件,它将直观地指示项目是否被选中。

  • SelectionAppBar:一个自定义的 AppBar,它显示选中的项目数量以及取消选中的选项。

示例项目 提供了一些这些小部件的样本。我不会将它们添加到库中,因为它们与网格本身无关,但只要您遵守许可条款,就可以随意将它们复制到您的项目中。

高级用法

您可以使用 setter DragSelectGridViewController.selection 来直接更改选择(我不确定您为什么需要这个,但我不会问问题)。

它允许这种交互

directly-changing-selection

您可以在 此处 查看代码。

您还可以进行一些其他小的设置,使 DragSelectGridView 满足您的需求,例如 DragSelectGridView.autoScrollHotspotHeightDragSelectGridView.unselectOnWillPop。这些功能都有很好的文档记录,所以我会让您自己探索。

希望这些是您使用此库所需了解的所有内容。

GitHub

https://github.com/hugocbpassos/drag_select_grid_view