【Flutter】drag_select_grid_view: ^0.6.2 使用

组件网址:drag_select_grid_view | Flutter package

这个组件就是滑动选中功能。

使用起来跟GridView差不多

复制代码
import 'package:drag_select_grid_view/drag_select_grid_view.dart';

class MyWidget extends StatefulWidget {
  @override
  _MyWidgetState createState() => _MyWidgetState();
}

class _MyWidgetState extends State<MyWidget> {
  final DragSelectGridViewController controller = DragSelectGridViewController();
  final List<String> items = List.generate(20, (index) => 'Item $index');

  @override
  void initState() {
    super.initState();
    // 监听选择变化
    controller.addListener(() {
      print('选中: ${controller.value.amount} 项');
    });
  }

  @override
  Widget build(BuildContext context) {
    return DragSelectGridView(
      gridController: controller,
      itemCount: items.length,
      itemBuilder: (context, index, selected) {
        return Card(
          color: selected ? Colors.blue[100] : Colors.white,
          child: Center(child: Text(items[index])),
        );
      },
      gridDelegate: SliverGridDelegateWithFixedCrossAxisCount(
        crossAxisCount: 2,
      ),
    );
  }

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

核心API

控制器方法

以下是ai生成的,其实第一个跟第二个根本没有,但是让AI生成代码的时候它老是用前面两个

dart 复制代码
// 选择/取消选择
controller.selectIndex(0);           // 选择索引0
controller.deselectIndex(0);         // 取消选择索引0
controller.clear();                  // 清空所有选择

// 获取状态
controller.value.selectedIndexes;    // 获取选中索引集合
controller.value.amount;             // 获取选中数量
controller.value.isSelecting;        // 是否有选中项

选中下标存储Selection

controller.value指的就是Selection


选中的item下标会存在Selection的selectedIndexes里面,如果要全选的话也可以通过以下代码赋值。

dart 复制代码
dragController.value = Selection(indexes);

使用起来很简单。

问题

drag_select_grid_view有一个跟我项目需求不符合的地方,这就要进行额外的处理,那就是当选择的item数量为0的时候会退出编辑模式,而我希望编辑模式由用户退出,或者是进行了删除等操作之后再自动退出。

dart 复制代码
/// Whether the grid is currently in select mode.
  bool get isSelecting => amount > 0;
相关推荐
kirk_wang14 分钟前
Flutter艺术探索-Flutter三方库鸿蒙适配实战:从原理到实践
flutter·移动开发·flutter教程·移动开发教程
晚霞的不甘1 小时前
Flutter for OpenHarmony 实现高级视差侧滑菜单:融合动效、模糊与交互动画的现代 UI 设计
flutter·ui·前端框架·交互·鸿蒙
晚霞的不甘2 小时前
Flutter for OpenHarmony构建全功能视差侧滑菜单系统:从动效设计到多页面导航的完整实践
前端·学习·flutter·microsoft·前端框架·交互
恋猫de小郭3 小时前
Flutter 在 Android 出现随机字体裁剪?其实是图层合并时的边界计算问题
android·flutter·ios
2501_944448004 小时前
Flutter for OpenHarmony 衣橱管家App实战 - 智能推荐实现
flutter
菜鸟小芯4 小时前
【开源鸿蒙跨平台开发先锋训练营】DAY8~DAY13 底部选项卡&我的页面功能实现
flutter·harmonyos
灰灰勇闯IT4 小时前
Flutter for OpenHarmony:悬浮按钮(FloatingActionButton)最佳实践 —— 强化核心操作,提升用户效率
flutter·华为·交互
雨季6664 小时前
Flutter 三端应用实战:OpenHarmony “心流之泉”——在碎片洪流中,为你筑一眼专注的清泉
开发语言·前端·flutter·交互
一起养小猫5 小时前
Flutter for OpenHarmony 进阶:表达式解析算法与计算器核心实现
算法·flutter·harmonyos
不爱吃糖的程序媛6 小时前
Flutter 三方库鸿蒙(OHOS)适配分析流程
flutter·华为·harmonyos