fix(client): 修复测试 timer 泄漏与编译 warning

- login_screen: Future.delayed 改为 Timer,dispose 时主动取消,
  避免测试框架报 pending timer 错误
- stock_in_form_screen: 移除未使用的 repository import,
  items 去掉无效 ?? [] 死代码(items 字段非空)
- stock_out_form_screen: 同上

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
wangjia
2026-04-18 19:36:54 +08:00
parent f5b28dd09a
commit 3bf99966db
3 changed files with 12 additions and 6 deletions
+10 -2
View File
@@ -1,3 +1,5 @@
import 'dart:async';
import 'package:flutter/material.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'package:go_router/go_router.dart';
@@ -32,6 +34,8 @@ class _LoginScreenState extends ConsumerState<LoginScreen> {
OverlayEntry? _hotelEntry;
OverlayEntry? _usernameEntry;
Timer? _closeHotelTimer;
Timer? _closeUsernameTimer;
bool get _hotelShowing => _hotelEntry != null;
bool get _usernameShowing => _usernameEntry != null;
@@ -46,7 +50,8 @@ class _LoginScreenState extends ConsumerState<LoginScreen> {
isHotel: true);
} else if (!_hotelCodeFocus.hasFocus) {
// 延迟关闭:让候选词的 onTap(pointer-up)先执行,再关闭下拉框
Future.delayed(const Duration(milliseconds: 150), _closeHotel);
_closeHotelTimer?.cancel();
_closeHotelTimer = Timer(const Duration(milliseconds: 150), _closeHotel);
}
});
_usernameFocus.addListener(() {
@@ -54,7 +59,8 @@ class _LoginScreenState extends ConsumerState<LoginScreen> {
_openDropdown(_usernameLayerLink, _usernameHistory, _usernameCtrl,
isHotel: false);
} else if (!_usernameFocus.hasFocus) {
Future.delayed(const Duration(milliseconds: 150), _closeUsername);
_closeUsernameTimer?.cancel();
_closeUsernameTimer = Timer(const Duration(milliseconds: 150), _closeUsername);
}
});
}
@@ -175,6 +181,8 @@ class _LoginScreenState extends ConsumerState<LoginScreen> {
@override
void dispose() {
_closeHotelTimer?.cancel();
_closeUsernameTimer?.cancel();
_hotelEntry?.remove();
_usernameEntry?.remove();
_shopCodeCtrl.dispose();