From 3bf99966db3113d193ade3acab55b9fff6db864c Mon Sep 17 00:00:00 2001 From: wangjia <809946525@qq.com> Date: Sat, 18 Apr 2026 19:36:54 +0800 Subject: [PATCH] =?UTF-8?q?fix(client):=20=E4=BF=AE=E5=A4=8D=E6=B5=8B?= =?UTF-8?q?=E8=AF=95=20timer=20=E6=B3=84=E6=BC=8F=E4=B8=8E=E7=BC=96?= =?UTF-8?q?=E8=AF=91=20warning?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 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 --- client/lib/screens/auth/login_screen.dart | 12 ++++++++++-- .../lib/screens/stock_in/stock_in_form_screen.dart | 3 +-- .../lib/screens/stock_out/stock_out_form_screen.dart | 3 +-- 3 files changed, 12 insertions(+), 6 deletions(-) diff --git a/client/lib/screens/auth/login_screen.dart b/client/lib/screens/auth/login_screen.dart index 9b28522..b7bc608 100644 --- a/client/lib/screens/auth/login_screen.dart +++ b/client/lib/screens/auth/login_screen.dart @@ -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 { 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 { 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 { _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 { @override void dispose() { + _closeHotelTimer?.cancel(); + _closeUsernameTimer?.cancel(); _hotelEntry?.remove(); _usernameEntry?.remove(); _shopCodeCtrl.dispose(); diff --git a/client/lib/screens/stock_in/stock_in_form_screen.dart b/client/lib/screens/stock_in/stock_in_form_screen.dart index b3a19e3..156a08e 100644 --- a/client/lib/screens/stock_in/stock_in_form_screen.dart +++ b/client/lib/screens/stock_in/stock_in_form_screen.dart @@ -8,7 +8,6 @@ import '../../providers/partner_provider.dart'; import '../../providers/product_provider.dart'; import '../../providers/stock_in_provider.dart'; import '../../providers/warehouse_provider.dart'; -import '../../repositories/stock_in_repository.dart'; class StockInFormScreen extends ConsumerStatefulWidget { final int? editOrderId; @@ -55,7 +54,7 @@ class _StockInFormScreenState extends ConsumerState { } _remarkCtrl.text = order.remark ?? ''; _items.clear(); - for (final item in order.items ?? []) { + for (final item in order.items) { final row = _ItemRow(); row.productId = item.productId; row.qtyCtrl.text = item.quantity.toStringAsFixed(0); diff --git a/client/lib/screens/stock_out/stock_out_form_screen.dart b/client/lib/screens/stock_out/stock_out_form_screen.dart index 72623e2..5590daf 100644 --- a/client/lib/screens/stock_out/stock_out_form_screen.dart +++ b/client/lib/screens/stock_out/stock_out_form_screen.dart @@ -9,7 +9,6 @@ import '../../providers/partner_provider.dart'; import '../../providers/product_provider.dart'; import '../../providers/stock_out_provider.dart'; import '../../providers/warehouse_provider.dart'; -import '../../repositories/stock_out_repository.dart'; class StockOutFormScreen extends ConsumerStatefulWidget { final int? editOrderId; @@ -58,7 +57,7 @@ class _StockOutFormScreenState extends ConsumerState { } _remarkCtrl.text = order.remark ?? ''; _items.clear(); - for (final item in order.items ?? []) { + for (final item in order.items) { final row = _ItemRow(); row.productId = item.productId; row.qtyCtrl.text = item.quantity.toStringAsFixed(0);