为什么现在我在我的页面,刷新后会出现刷新成功的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();
这样“我的”页面就不会莫名弹首页的刷新成功了。
本文来自博客园,作者:jialiangzai,转载请注明原文链接:https://www.cnblogs.com/zsnhweb/p/19969937

浙公网安备 33010602011771号