Equivalent of ChangeNotifierProvider widget in Riverpod

Issue

Is there a widget equivalent of the ChangeNotifierProvider widget of Provider in Riverpod?

The use case is to create a provider only when a page whose parent widget is ChangeNotifierProvider/or a page that has ChangeNotifierProvider in its widget tree has been pushed unto the Navigator stack using create. I would like the provider to be automatically disposed when the page is popped and the ChangeNotifierProvider widget is removed from the widget tree just like in Provider.

Solution

Riverpod has a ChangeNotifierProvider too, so you can use that.

As for the "I would like the provider to be automatically disposed when the page is popped", this functionality is instead implemented using autoDispose

So in the end, the syntax would be:

class MyNotifier extends ChangeNotifier {}

final myNotifierProvider = ChangeNotifierProvider.autoDispose<MyNotifier>((ref) {
  return MyNotifier();
});

...

class MyWidget extends ConsumerWidget {
  @override
  Widget build(BuildContext context, ScopedReader watch) {
    MyNotifier myNotifier = watch(myNotifierProvider);
  }
}

With this, when all the widgets using MyNotifier are destroyed (aka when the route is popped), then MyNotifier will be disposed.

Answered By – Rémi Rousselet

Answer Checked By – Clifford M. (FlutterFixes Volunteer)

Leave a Reply

Your email address will not be published.