How to force initState every time the page is rendered in flutter?

Viewed 2495

I am adding some data into the SharedPreferenceson page2 of my app and I am trying to retrieve the data on the homepage. I have used an init function on page 1 as follows:

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

    _getrecent();
  }

  void _getrecent() async {
    final prefs = await SharedPreferences.getInstance();
    // prefs.clear();
    String b = prefs.getString("recent").toString();
    Map<String, dynamic> p = json.decode(b);

    if (b.isNotEmpty) {
      print("Shared pref:" + b);
      setState(() {
        c = Drug.fromJson(p);
      });
      cond = true;
    } else {
      print("none in shared prefs");
      cond = false;
    }
  }

Since the initState() loads only once, I was wondering if there was a way to load it every time page1 is rendered. Or perhaps there is a better way to do this. I am new to flutter so I don't have a lot of idea in State Management.

4 Answers

you can override didChangeDependencies method. Called when a dependency of the [State] object changes as you use the setState,

@override
  void didChangeDependencies() {
// your codes
}

Also, you should know that using setState updates the whole widget, which has an overhead. To avoid that you should const, declaring a widget const will only render once so it's efficient.

First thing is you can't force initState to rebuild your widget. For that you have setState to rebuild your widget. As far as I can understand you want to recall initState just to call _getrecent() again.

Here's what you should ideally do :

A simple solution would be to use FutureBuilder. You just need to use _getrecent() in FutureBuilder as parent where you want to use the data you get from _getrecent(). This way everytime your Widget rebuilds it will call _getrecent().

init function will render it only once initially, to avoid that -

You can use setState( ) method to re-render your whole widget.

Related