Search code examples
flutterdartstatefulwidgetflutter-state

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


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.


Solution

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