问题背景
文件列表支持长按进入多选模式,进行批量复制、移动、删除等操作。
最初实现时,系统返回键 / 手势返回的行为是:
- 不区分是否处于多选模式;
- 在非根目录时直接
navigateUp,在根目录时直接退出应用。
这与常见的操作习惯不符:
- 多选时按返回,我更希望的是“先退出多选”,而不是直接离开当前目录或退出应用。
解决方案
在 HomePage 外层已经用 PopScope 统一接管了系统返回事件,只需要在这里增加一层多选判断:
- 如果当前处于多选模式:
- 把
_selectionMode置为 false; - 清空
_selectedIds; - 消耗这次返回事件,不再继续向上。
- 把
- 如果不在多选模式:
- 按原有逻辑处理:
- 根目录:退出应用;
- 非根目录:
navigateUp返回上一级。
- 按原有逻辑处理:
这样,无论是 Android 返回键还是系统手势返回,行为都与顶部 AppBar 左上角的“关闭多选”按钮保持一致。
收获
- 多选模式本质上是一种“临时状态”,返回键优先解除这种状态是很多应用的通用约定(如相册、文件管理器)。
- 把所有返回逻辑汇总到
PopScope里统一处理,可以避免:- 某些路径只在按钮上处理、返回键却走了另一套逻辑;
- 导致难以复现的“有时退出多选、有时直接离开页面”的不一致行为。