为什么现在我在我的页面,刷新后会出现刷新成功的message,这个不应该是在home里面吗

原因在这里:你的 MainPage 用的是 IndexedStack

IndexedStack(
  index: _currentIndex,
  children: [HomeView(), CateView(), CartView(), MineView()],
)

IndexedStack 的特点是:虽然只显示当前 index 的页面,但 children 里的页面都会被创建并执行 initState

而你现在默认选中的是“我的”页:

int _currentIndex = 3;

但是 HomeView() 也已经被创建了,所以 HomeView.initState() 会执行:

Future.microtask(() => {
  _refreshKey.currentState?.show(),
  paddingNum = 50,
});

这句会主动触发首页的 RefreshIndicator,然后执行:

_refreshHander()

最后调用:

MessageShop.show(context, '刷新成功');

所以你人在“我的”页面,也会看到首页触发出来的“刷新成功”。

简单说就是:

你看到的是 MineView
但 HomeView 已经初始化了
HomeView 初始化时主动调用了刷新
刷新完成后弹出了 message

最直接的解决办法:不要在首页初始化时调用 _refreshKey.currentState?.show(),改成直接请求数据。

@override
void initState() {
  super.initState();
  _regestrHander();
  getListData();
}

如果你还想保留“首页下拉刷新成功才提示”,可以把首次加载和手动刷新拆开:

Future<void> _refreshHander() async {
  _page = 1;
  _pageSize = 10;
  _isLoading = false;
  _isMore = true;

  await getListData();

  if (!mounted) return;
  MessageShop.show(context, '刷新成功');
}

首次进入页面用:

getListData();

手动下拉才走:

_refreshHander();

这样“我的”页面就不会莫名弹首页的刷新成功了。

posted @ 2026-05-04 01:29  jialiangzai  阅读(7)  评论(0)    收藏  举报