refactor: 拆分主页与公共组件,扫码登录改走 WinHTTP
- 抽出 lib/core 的日期/JSON 工具,收敛各页重复解析 - 主页与音乐风险页拆成组件,风险功能共用一套运行框架 - 修复设置页作为主页页签保存时弹掉根路由导致的黑屏 - 登录对齐 Astral aimedb 协议:84 位二维码校验、签名与请求头修正, 补 GlobalSign 中间证书;Windows 改用 WinHTTP 绕过服务端对 BoringSSL 的 TLS 指纹拦截(证书校验保持开启) - 补开发预览数据与测试
This commit is contained in:
1 parent
0cb5320290
commit
e9357f5969
55 files changed
+4387
-3392
No files matched your search
@@ -0,0 +1,92 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter_test/flutter_test.dart';
|
||||
import 'package:ichino/config/strings.dart';
|
||||
import 'package:ichino/widgets/risk/risk_list_widgets.dart';
|
||||
|
||||
Widget _wrap(Widget child) =>
|
||||
MaterialApp(home: Scaffold(body: Column(children: [child])));
|
||||
|
||||
void main() {
|
||||
testWidgets('RiskPendingList 空列表显示提示,非空显示行', (tester) async {
|
||||
await tester.pumpWidget(
|
||||
_wrap(
|
||||
const RiskPendingList(
|
||||
title: '待解锁',
|
||||
emptyHint: '还没有添加',
|
||||
count: 0,
|
||||
rows: [],
|
||||
),
|
||||
),
|
||||
);
|
||||
expect(find.text('待解锁 (0)'), findsOneWidget);
|
||||
expect(find.text('还没有添加'), findsOneWidget);
|
||||
|
||||
await tester.pumpWidget(
|
||||
_wrap(
|
||||
RiskPendingList(
|
||||
title: '待解锁',
|
||||
emptyHint: '还没有添加',
|
||||
count: 1,
|
||||
rows: const [
|
||||
RiskPendingRow(leading: '#834', trailing: 'Master', onRemove: _noop),
|
||||
],
|
||||
),
|
||||
),
|
||||
);
|
||||
expect(find.text('待解锁 (1)'), findsOneWidget);
|
||||
expect(find.text('还没有添加'), findsNothing);
|
||||
expect(find.textContaining('#834'), findsOneWidget);
|
||||
});
|
||||
|
||||
testWidgets('RiskPendingRow 禁用时删除按钮不触发回调', (tester) async {
|
||||
var removed = 0;
|
||||
await tester.pumpWidget(
|
||||
_wrap(
|
||||
RiskPendingRow(
|
||||
leading: '#1',
|
||||
trailing: 'x',
|
||||
onRemove: () => removed++,
|
||||
enabled: false,
|
||||
),
|
||||
),
|
||||
);
|
||||
final button = tester.widget<IconButton>(find.byType(IconButton));
|
||||
expect(button.onPressed, isNull);
|
||||
expect(find.byTooltip(AppStrings.listRemoveTooltip), findsOneWidget);
|
||||
|
||||
await tester.pumpWidget(
|
||||
_wrap(
|
||||
RiskPendingRow(
|
||||
leading: '#1',
|
||||
trailing: 'x',
|
||||
onRemove: () => removed++,
|
||||
),
|
||||
),
|
||||
);
|
||||
await tester.tap(find.byTooltip(AppStrings.listRemoveTooltip));
|
||||
expect(removed, 1);
|
||||
});
|
||||
|
||||
testWidgets('RiskNumberField 与 RiskAddButton 共用统一样式', (tester) async {
|
||||
final controller = TextEditingController();
|
||||
addTearDown(controller.dispose);
|
||||
var added = 0;
|
||||
|
||||
await tester.pumpWidget(
|
||||
_wrap(
|
||||
Column(
|
||||
children: [
|
||||
RiskNumberField(controller: controller, label: 'A', hint: 'B'),
|
||||
RiskAddButton(onPressed: () => added++),
|
||||
],
|
||||
),
|
||||
),
|
||||
);
|
||||
expect(find.text('A'), findsOneWidget);
|
||||
expect(find.text('B'), findsOneWidget);
|
||||
await tester.tap(find.text(AppStrings.listAddButton));
|
||||
expect(added, 1);
|
||||
});
|
||||
}
|
||||
|
||||
void _noop() {}
|
||||
Reference in new issue
Block a user