KIM
KIM

Reputation: 243

Flutter How to recreate stateful widget in build()

I'm developing android/ios app using flutter with provider(state management)

in my app, i have a Main scaffold with bottom navigation menu. (so, one scaffold with many views and controll it using bottom navigation, NOT Navigator.push())

i want to know that is it possible recall initstate() from build().

for example

... 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()
  }
}

Upvotes: 1

Views: 721

Answers (1)

timilehinjegede
timilehinjegede

Reputation: 14033

No it is not possible. The initstate() is only called each time a new widget is painted. Instead of recalling the initstate. Create a method, add it to use init state and call wherever you want to call it.

Check the code below for an example. It works perfectly:

// 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()
  }
}

I hope this helps.

Upvotes: 1

Related Questions