Flutter Как воссоздать виджет с отслеживанием состояния в build () - PullRequest
0 голосов
/ 05 мая 2020

Я разрабатываю приложение android / ios с использованием флаттера с поставщиком (управление состоянием)

в моем приложении, у меня есть главный каркас с нижним меню навигации. (Итак, один каркас с множеством представлений и управление им с помощью нижней навигации, НЕ Navigator.pu sh ())

Я хочу знать, можно ли вызвать initstate () из build ().

например

... Statefulwidget 

void initState() {
  super.initState();
  MYHttp.callAPI_only_once_for_some_reason();
}

Widget build(...) {
  var flag = Provider.of<MyProvider>(context).flagdata; // flag is true when push notification has been arrived
  if (flag) {
    initstate() // apparently it should not work, but i have to recreate whole stateful widget to call initState()
  }
}

1 Ответ

1 голос
/ 05 мая 2020

Нет, это невозможно. initstate() вызывается только каждый раз, когда отрисовывается новый виджет. Вместо того, чтобы напоминать initstate. Создайте метод, добавьте его для использования состояния инициализации и вызовите везде, где хотите его вызвать.

Посмотрите приведенный ниже код для примера. Работает отлично:

// create the method.
void makeRequest() {
    MYHttp.callAPI_only_once_for_some_reason();
}

void initState() {
  //call the created method here
  makeRequest();
  super.initState();
}

Widget build(...) {
  var flag = Provider.of<MyProvider>(context).flagdata; // flag is true when push notification has been arrived
  if (flag) {
  // call the method here again. if you need to use it.
  makeRequest(); // apparently it should not work, but i have to recreate whole stateful widget to call initState()
  }
}

Надеюсь, это поможет.

...