From d6f1cf2a2c28ab3da86e96aa335347e6108fdb35 Mon Sep 17 00:00:00 2001 From: Zhou Weidong <502333560@qq.com> Date: Thu, 22 Oct 2026 19:07:32 +0800 Subject: [PATCH] =?UTF-8?q?fix(home):=20=E4=BF=AE=E5=A4=8D=E5=88=86?= =?UTF-8?q?=E7=B1=BB=E5=88=86=E9=A1=B5=E6=8E=A7=E5=88=B6=E5=99=A8=E5=88=9D?= =?UTF-8?q?=E5=A7=8B=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/plans/PROGRESS.md | 1 + lib/pages/home/widgets/home_feed_grid.dart | 15 +++++++++------ 2 files changed, 10 insertions(+), 6 deletions(-) diff --git a/docs/plans/PROGRESS.md b/docs/plans/PROGRESS.md index 814e5e0..d5589ab 100644 --- a/docs/plans/PROGRESS.md +++ b/docs/plans/PROGRESS.md @@ -1113,6 +1113,7 @@ $ flutter test - 一级分类未选 18/w400、选中 20/w700;二级 chips 间距 10、左右 8、15/w600,并以稳定 AnimatedContainer 切换。 - 首页内容区改为横向 PageView:点击与滑动共用 PageController,各 tab 保留纵向滚动位置。 +- PageController 与各 tab ScrollController 改为字段直接初始化,修复热重载后的 LateInitializationError。 - 四类卡片去底板/描边,封面统一 3:4、8 圆角、行距 10、封底标题间距 6;状态角标为右上角紧凑异形丝带。 - 标题下方恢复左对齐题材文字,使用 `|` 分隔、灰色小字,与封面状态角标保持独立。 - 首页搜索栏到一级、一级到二级、二级到网格间距为 8/8/10;非精选 tab 直接以 10 衔接网格。 diff --git a/lib/pages/home/widgets/home_feed_grid.dart b/lib/pages/home/widgets/home_feed_grid.dart index caa1574..70ec7d5 100644 --- a/lib/pages/home/widgets/home_feed_grid.dart +++ b/lib/pages/home/widgets/home_feed_grid.dart @@ -43,8 +43,10 @@ class HomeFeedGrid extends StatefulWidget { class _HomeFeedGridState extends State { HomePrimaryTab _selectedPrimary = HomePrimaryTab.featured; - late final PageController _pageController; - late final Map _scrollControllers; + final PageController _pageController = PageController(); + final Map _scrollControllers = { + for (final tab in HomePrimaryTab.values) tab: ScrollController(), + }; final Map _selectedTags = { for (final tab in HomePrimaryTab.values) tab: null, }; @@ -52,10 +54,11 @@ class _HomeFeedGridState extends State { @override void initState() { super.initState(); - _pageController = PageController(initialPage: _selectedPrimary.index); - _scrollControllers = { - for (final tab in HomePrimaryTab.values) tab: ScrollController(), - }; + WidgetsBinding.instance.addPostFrameCallback((_) { + if (mounted && _pageController.hasClients) { + _pageController.jumpToPage(_selectedPrimary.index); + } + }); } @override