How to put Flutter GetXController permanently in memory?

Issue

I am using get package.

Here’s what my code looks like,

class MyController extends GetXController{
//code to fetch data from firebase
}

class SecondScreen extends GetView<MyController>{
  @override
  Widget build(BuildContext context) {
    return GetBuilder(
      init: MyController(),
      builder: (controller) {
        return Scaffold(
        //code...
        );
      },
    );
}
}

Doubt:
I have a button, using which I am navigating to the secondScreen from homePage, and everytime I tap on the button the controller MyController is initialized again and so the data is fetched again. But I want to do something that will keep that controller that is initizlized the first time in memory permanently. How can I do that?

I know that, we can do something like this,
Get.put(Controller(), permanent: true);
But, in my code, I haven’t used Get.put method anywhere as when the class extending GetView is called the controller is initialized automatically.

Solution

Well, actually you are putting/initializing MyController. Just not inside the GetX dependency container.
Because you are doing:

GetBuilder(
 init: MyController(),
 .... 
)

What you should do instead is:

GetBuilders(
 init: Get.put(MyController()),
 .... 
)

That way you are letting GetX dependency manager to manage your dependencies. And it’s smart enough to know that that route is on the backstack so doesn’t remove from memory.

Answered By – S. M. JAHANGIR

Answer Checked By – David Marino (FlutterFixes Volunteer)

Leave a Reply

Your email address will not be published.