How to use get_it for Provider.of<ExampleProvider>(context)?

Viewed 589

I am new to flutter and I am trying to use get_it package for DI. I want to understand how can I replace my dependance on the Inherited Widget with get_it. My code looks like this:

I have a locator file which initialises the locator instance and its setup. locator.dart file:

final locator = GetIt.instance;

void setupLocator() {
  locator.registerLazySingleton<ExampleProvider>(() => ExampleProvider());
}

example_provider.dart:

class ExampleProvider with ChangeNotifier {
  
  bool _value = false;

  bool get value => _value;

  set setValue(bool newValue) {
    _value = newValue;
    notifyListeners();
  }

}

This is the HomePage where provide the ChangeNotifierProvider with ExampleProvider to the child widget.

home_page.dart file:

class HomePage extends StatefulWidget {
  final String title;

  const HomePage({Key? key, required this.title}) : super(key: key);

  @override
  _HomePageState createState() => _HomePageState();
}

class _HomePageState extends State<HomePage> {

  final _exampleProvider = locator.get<ExampleProvider>();

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: Column(
        key: Key('issue_list_screen_column'),
        crossAxisAlignment: CrossAxisAlignment.center,
        mainAxisAlignment: MainAxisAlignment.start,
        children: [
          ChangeNotifierProvider(
            create: (context) => _exampleProvider,
            child: ExampleWidget(
              key: Key('example_widget'),
            ),
          ),
        ],
      ),
      appBar: AppBar(
        title: Text(widget.title),
      ),
    );
  }
}

This is the ExampleWidget where I want to use the locator instead of Provider.of<ExampleProvider>(context)

example_widget.dart file:

class ExampleWidget extends StatefulWidget {
  const ExampleWidget({
    Key? key,
  }) : super(key: key);

  @override
  _ExampleWidgetState createState() => _ExampleWidgetState();
}

class _ExampleWidgetState extends State<ExampleWidget> {
  
  @override
  Widget build(BuildContext context) {

    // How do I use locator over here with context??

    final _exampleProvider = Provider.of<ExampleProvider>(context);

    return  Switch(
          value: _exampleProvider.value,
          onChanged: (newValue) {
            themeProvider.setValue = newValue;
          },
        );
  }
}

So, I want to use locator for the line final _exampleProvider = Provider.of<ExampleProvider>(context); in ExampleWidget. How can I do that? It does not work like this: final _exampleProvider = locator.get<ExampleProvider>();

1 Answers

try this

    final _exampleProvider = locator.get<ExampleProvider>();
Related