From 723d70e4b8c44dd191bb8cfd6428d9117332d810 Mon Sep 17 00:00:00 2001 From: hailin Date: Mon, 22 Dec 2025 20:21:31 -0800 Subject: [PATCH] =?UTF-8?q?fix(mobile-app):=20=E4=BF=AE=E5=A4=8D=E8=B4=A6?= =?UTF-8?q?=E6=9C=AC=E6=98=8E=E7=BB=86=E7=AD=9B=E9=80=89=E6=A0=8F=E6=BB=9A?= =?UTF-8?q?=E5=8A=A8=E9=87=8D=E7=BD=AE=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 使用 ScrollController 保持筛选栏滚动位置 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 --- .../presentation/pages/ledger_detail_page.dart | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/frontend/mobile-app/lib/features/trading/presentation/pages/ledger_detail_page.dart b/frontend/mobile-app/lib/features/trading/presentation/pages/ledger_detail_page.dart index 328351f8..d39481e5 100644 --- a/frontend/mobile-app/lib/features/trading/presentation/pages/ledger_detail_page.dart +++ b/frontend/mobile-app/lib/features/trading/presentation/pages/ledger_detail_page.dart @@ -15,6 +15,7 @@ class LedgerDetailPage extends ConsumerStatefulWidget { class _LedgerDetailPageState extends ConsumerState with SingleTickerProviderStateMixin { late TabController _tabController; + late ScrollController _filterScrollController; // 数据状态 bool _isLoading = true; @@ -25,6 +26,7 @@ class _LedgerDetailPageState extends ConsumerState // 筛选条件 String? _selectedEntryType; + int _selectedFilterIndex = 0; int _currentPage = 1; static const int _pageSize = 20; @@ -45,12 +47,14 @@ class _LedgerDetailPageState extends ConsumerState void initState() { super.initState(); _tabController = TabController(length: 2, vsync: this); + _filterScrollController = ScrollController(); _loadData(); } @override void dispose() { _tabController.dispose(); + _filterScrollController.dispose(); super.dispose(); } @@ -125,9 +129,10 @@ class _LedgerDetailPageState extends ConsumerState } /// 筛选流水类型 - Future _filterByEntryType(String? entryType) async { + Future _filterByEntryType(String? entryType, int index) async { setState(() { _selectedEntryType = entryType?.isEmpty == true ? null : entryType; + _selectedFilterIndex = index; _currentPage = 1; _isLoading = true; }); @@ -771,15 +776,16 @@ class _LedgerDetailPageState extends ConsumerState height: 44, margin: const EdgeInsets.symmetric(horizontal: 16, vertical: 8), child: ListView.builder( + controller: _filterScrollController, scrollDirection: Axis.horizontal, itemCount: _entryTypes.length, itemBuilder: (context, index) { final type = _entryTypes[index]; - final isSelected = (_selectedEntryType ?? '') == type['value']; + final isSelected = _selectedFilterIndex == index; return Padding( padding: const EdgeInsets.only(right: 8), child: GestureDetector( - onTap: () => _filterByEntryType(type['value']), + onTap: () => _filterByEntryType(type['value'], index), child: Container( padding: const EdgeInsets.symmetric(horizontal: 12, vertical: 8), decoration: BoxDecoration(