/// 全局业务常量集中地。 /// /// 收口此前散落在各处的「业务魔数」:网络超时、轮询间隔、重试退避、输入防抖、 /// 分页大小、业务上限等可调参数。**不**收 UI 尺寸/间距/字号等纯样式常量 /// (那些保留在各自 widget / 主题里,离使用点最近更易维护)。 /// /// 新增需要复用或可能调整的业务数值时,统一加到这里,避免再写裸字面量。 abstract final class AppConstants { // ── 网络超时 ── /// 未登录公共 Dio(登录/刷新)连接超时 static const Duration publicConnectTimeout = Duration(seconds: 8); /// 未登录公共 Dio 读取超时 static const Duration publicReceiveTimeout = Duration(seconds: 15); /// 登录态探测/轻量请求超时 static const Duration authProbeTimeout = Duration(seconds: 4); /// 异常上报请求超时 static const Duration errorReportTimeout = Duration(seconds: 5); /// 检查更新请求超时 static const Duration updateCheckTimeout = Duration(seconds: 5); /// 连通性探测请求超时 static const Duration connectivityTimeout = Duration(seconds: 15); /// 批量导入(Excel 上传)发送超时 static const Duration importSendTimeout = Duration(seconds: 120); /// 批量导入(Excel 解析入库)读取超时 static const Duration importReceiveTimeout = Duration(seconds: 300); // ── 重试 / 退避 ── /// 网络层错误自动重试的递增间隔(1s → 2s → 4s) static const List retryBackoffs = [ Duration(seconds: 1), Duration(seconds: 2), Duration(seconds: 4), ]; /// 连通性探测的多轮预算(4s → 8s → 12s) static const List connectivityBudgets = [ Duration(seconds: 4), Duration(seconds: 8), Duration(seconds: 12), ]; /// 连通性探测单轮(不重试)预算 static const List connectivitySingleBudget = [Duration(seconds: 4)]; /// 连通性探测每轮失败后的退避步长(600ms × 轮次) static const Duration connectivityRetryStep = Duration(milliseconds: 600); // ── 轮询间隔 ── /// 会话心跳上报间隔 static const Duration heartbeatInterval = Duration(seconds: 30); /// 在线时连通性轮询间隔 static const Duration connectivityOnlinePoll = Duration(seconds: 30); /// 离线时连通性轮询间隔 static const Duration connectivityOfflinePoll = Duration(minutes: 1); /// 后台检查更新轮询间隔 static const Duration updatePollInterval = Duration(hours: 1); /// 启动后首次检查更新前的延迟 static const Duration updateInitialDelay = Duration(seconds: 3); // ── 输入防抖 / 交互延迟 ── /// 下拉框失焦自动收起延迟 static const Duration dropdownCloseDelay = Duration(milliseconds: 150); /// 搜索输入防抖 static const Duration searchDebounce = Duration(milliseconds: 300); /// 自更新流程各步骤间的过渡延迟 static const Duration updaterStepDelay = Duration(milliseconds: 400); // ── 分页 ── /// 列表默认每页条数 static const int defaultPageSize = 20; /// 入库选货弹窗一次性拉取的库存条数 static const int stockInPickerPageSize = 500; /// 出库选货弹窗一次性拉取的库存条数 static const int stockOutPickerPageSize = 1000; /// 盘点拉取库存的每页条数 static const int inventoryCheckPageSize = 200; // ── 业务上限 ── /// 授权未返回时的默认设备上限 static const int defaultMaxDevices = 3; }