функция запуска флаттера каждые x секунд - PullRequest
0 голосов
/ 29 сентября 2018

внутри моего флаттера. Я хочу проверять API каждые 10 секунд.Я нашел этот пост для запуска функции каждые x раз и сделал следующее:

class _MainPage extends State<MainPage> {
  int starter = 0;

  void checkForNewSharedLists(){
    // do request here
    setState((){
      // change state according to result of request
    });

  }

  Widget build(BuildContext context) {
    Timer.periodic(Duration(seconds: 15), (Timer t) => checkForNewSharedLists());
  }
} 

К сожалению, запросы накапливаются: после перезапуска приложения на первом "раунде" тамэто два запроса к API, второй раунд это четыре запроса, третий это восемь и так далее ...

Кто-нибудь знает, как это исправить?

1 Ответ

0 голосов
/ 29 сентября 2018

build() можно и обычно вызывать более одного раза, и каждый раз при создании нового Timer.periodic.

Вам необходимо переместить этот код из build(), например

Timer timer;

@override
void initState() {
  super.initState();
  timer = Timer.periodic(Duration(seconds: 15), (Timer t) => checkForNewSharedLists());
}

@override
void dispose() {
  timer?.cancel();
  super.dispose();
}

Еще лучше было бы удалить такой код из виджетов целиком на уровне API или аналогичном и использовать StreamBuilder для обновления представления в случае обновления данных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...