I find a newer way to final fix this! change FutureBuilder code into a child StatefulWidget with AutomaticKeepAliveClientMixin, and wrap _homeRequestGoodsByRecommendCategory(index) to a fix property _requestFuture with a fix index. that is PageView nested PageView all themself's children need AutomaticKeepAliveClientMixin. and FutureBuilder's future need a origin property. children: List.generate(_homeRecommendDefaultCategoryList.length, (index) { return HomeItemPage( index: index, homeRecommendDefaultCategoryList: _homeRecommendDefaultCategoryList, homeTabBarThresholdNotifier: _homeTabBarThresholdNotifier); })))) and the HomeItemPage should be class HomeItemPage extends StatefulWidget { final int index; final dynamic homeRecommendDefaultCategoryList; final ValueNotifier<double> homeTabBarThresholdNotifier; const HomeItemPage({Key? key, required this.index, required this.homeRecommendDefaultCategoryList, required this.homeTabBarThresholdNotifier}) : super(key: key); @override HomeItemPageState createState() => HomeItemPageState(); } class HomeItemPageState extends State<HomeItemPage> with AutomaticKeepAliveClientMixin { late Future _requestFuture; @override void initState() { super.initState(); _requestFuture = _homeRequestGoodsByRecommendCategory(); print("--> homeItem initState"); } @override void dispose() { print("--> homeItem dispose"); super.dispose(); } @override Widget build(BuildContext context) { super.build(context); print("--> homeItem build"); return FutureBuilder<dynamic>( future: _requestFuture,