Flutter просмотр страниц и FutureBuild продолжают загружаться из api каждый раз, когда я обращаюсь к странице

#flutter #dart

#flutter #dart

Вопрос:

я сталкиваюсь с проблемой с просмотром страниц и Futurebuild, которая заключается в том, что каждый раз, когда я переключаюсь между первой страницей и второй страницей, страница будет перестроена again…it вызовет новые данные из API, даже если там нет ничего нового … любой может мне помочь в этом

 class Home extends StatefulWidget {
  const Home({Key key}) : super(key: key);
  

  @override
  _HomeState createState() => _HomeState();
}

class _HomeState extends State<Home> {
 
  PageController pageController = PageController(keepPage: false);

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

  @override
  void dispose() {
    super.dispose();
  }

  @override
  Widget build(BuildContext context) {
    final homePage = HomeProjects(pageController: pageController);
    final portfolioPage = Portfolio(pageController: pageController);


    return Scaffold(
      body: ScrollConfiguration(
        behavior: MyBehavior(),
        child: PageView(reverse: true, controller: pageController,

            //physics: NeverScrollableScrollPhysics(),
            children: [
              homePage,
              portfolioPage,
            ]),
      ),
    );
  }
}
  

Ответ №1:

Если вы выполняете HTTP-вызовы только внутри своих страниц, это желаемый результат. Вам нужно будет кэшировать ответы, чтобы избежать повторных сетевых вызовов.

Перенос вызовов api на initState — это не то, что я бы лично сделал — данные, полученные при создании первой страницы, могут устареть без вашего ведома.

Ответ №2:

Ну, вы создаете свои страницы каждый раз, когда вызывается build.

Если вы этого не хотите, переместите строки, которые фактически создают страницы, во время и место, где они будут вызваны только один раз. initState может быть хорошим местом.

Комментарии:

1. пробовал это, но безуспешно, я переместил эту строку в initstate (), домашняя страница = HomeProjects(PageController: PageController); …. но безуспешно