Files
jiu/client/test/golden/users_mobile_golden_test.dart
T
wangjia 9445042cb4 feat(client): 设置/用户/设备/关于窄屏对齐移动原型(hub 形态/卡片流/sheet/无打印)
- 系统设置窄屏改 hub 三组(门店/偏好/数据):门店信息/编号规则/默认仓库走
  底部 sheet,主题外观接 showThemeSheet,?tab= 深链窄屏忽略;桌面 subnav 不动
- 用户管理窄屏:m-section + 头像卡片流 + 角色图标徽章 + FAB 新增;
  点卡开详情 sheet(drow + 重置密码/启停/编辑),表单复用为 sheet 形态
- 设备管理窄屏:会话卡流(本机标注/在线图标徽章)+ 外设卡流(mc-foot 脚注),
  「+ 添加设备」在区块标题行右侧(m-pill 选择 sheet),打印模板窄屏不渲染
- 关于我们窄屏:品牌 hero + hub 链接组 + 产品信息 drow 卡 + 时间线 pill 标签
  + 意见反馈 sheet(类型 pill/描述/联系方式);授权信息不显示(已迁 /me/license)
- golden:四屏窄屏基准独立成 *_mobile_golden_test.dart(390×844 @2x 三主题),
  桌面 golden 零漂移

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-04 12:19:15 +08:00

82 lines
2.4 KiB
Dart
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
import 'package:flutter/material.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'package:flutter_test/flutter_test.dart';
import 'package:shared_preferences/shared_preferences.dart';
import 'package:jiu_client/core/auth/auth_state.dart';
import 'package:jiu_client/core/utils/clock.dart';
import 'package:jiu_client/models/user.dart';
import 'package:jiu_client/providers/user_provider.dart';
import 'package:jiu_client/screens/settings/users_screen.dart';
import '../support/golden_harness.dart';
/// 用户管理窄屏 golden × 三主题(390×844 @2x):m-section「成员 · 共 N」+
/// 头像卡片流(40 圆标 + 姓名 + 账号 + 角色图标徽章)+ FAB 新增——
/// 对齐原型 m-users.html。数据与桌面 golden 同源(5 人四级角色)。
/// 更新基准:flutter test --update-goldens test/golden/users_mobile_golden_test.dart
const _users = [
AppUser(
id: 1,
username: 'wang',
realName: '王经理',
role: 'superadmin',
isActive: true,
lastLoginAt: '2026-07-13T09:12:00'),
AppUser(
id: 2,
username: 'zhang',
realName: '张主管',
role: 'admin',
isActive: true,
lastLoginAt: '2026-07-13T08:50:00'),
AppUser(
id: 3,
username: 'li',
realName: '李采购',
role: 'operator',
isActive: true,
lastLoginAt: '2026-07-12T18:40:00'),
AppUser(
id: 4,
username: 'zhao',
realName: '赵会计',
role: 'readonly',
isActive: true,
lastLoginAt: '2026-06-19T10:05:00'),
AppUser(
id: 5,
username: 'qian',
realName: '钱仓管',
role: 'operator',
isActive: false,
lastLoginAt: '2026-06-10T14:22:00'),
];
class _FakeUserList extends UserListNotifier {
@override
Future<List<AppUser>> build() async => _users;
@override
Future<void> reload() async {}
}
List<Override> _overrides() => [
userListProvider.overrideWith(() => _FakeUserList()),
isReadonlyProvider.overrideWithValue(false),
];
void main() {
TestWidgetsFlutterBinding.ensureInitialized();
SharedPreferences.setMockInitialValues({});
// 冻结相对日期基准(详情 sheet 的最近登录)
appClock = () => DateTime(2026, 7, 13, 9, 30, 15);
goldenAcrossThemes(
'users 卡片流 整屏(移动)',
goldenPrefix: 'users_mobile',
child: () => const UsersScreen(),
overrides: _overrides,
logical: const Size(390, 844),
);
}