How to use a provider insider another provider without using context in Flutter

Viewed 542

I'm using Flutter provider, and I want to access a provider from another provider without using context.
I found many documentations on the internet explaining how to use ProxyProvider, but no one of the implementations was working (I think it's related to the last update 3 months ago).
I posted this question in StackOverflow after encountering a problem in ProxyProvider, but I didn't get an answer.
So now I'm just searching for any way to use a provider inside another one without using context.

1 Answers

You mean a Provider or the service that the Provider encapsulates? If it's the latter, the way that I've done it is by calling a provided service inside another provided service, given that they are all under the same MultiProvider. For example, I have two provided services:

MultiProvider(
  providers: [
    ChangeNotifierProvider(
       create: (_) => FirstService()
    ),
    ChangeNotifierProvider(
       create: (_) => SecondService()
    ),
  ]
)

FirstService looks like this:

class FirstService extends ChangeNotifier {

  List<String> getListOfValues() {
    return ['a', 'b', 'c'];
  }
}

and for example, I need to access those values from the SecondService, then I do this:

class SecondService extends ChangeNotifier {

   void pullDataFromService(BuildContext context) {
      FirstService firstService = Provider.of<FirstService>(context, listen: false);
      var values = firstService.getListOfValues();
   }
}

So pretty much you pass a context to a method where you need to access a provided service and you extract it from the Provider as normal, then access its functionality from the other service where you fetch it.

Related