flutter share state across multiple instances of a widget

Issue

In my flutter app, I have a ConnectivityStatus widget which displays the current connection status of the app to my raspberry pi. In the initState of my widget, I subscribe to a timer to check the connection every 5 seconds and update the state accordingly, then unsubscribe upon disposal.

The issue is, when multiple screens use the ConnectivityStatus widget, such as in a stack navigator setup, I now have two concurrent subscriptions as neither instance has disposed. This causes many redundant, unneeded requests to occur.

What I really want is to either share a single instance of the widget across multiple screens, or have one global state multiple instances can access.

How can I achieve this or what are other recommended solutions to my problem?

Solution

The most simple way of achieving this would be to use InheritedWidget to pass the ConnectivityStatus to the descending widgets.
https://api.flutter.dev/flutter/widgets/InheritedWidget-class.html

You could also look into other state management solutions such as Provider
https://pub.dev/packages/provider
or Bloc
https://pub.dev/packages/flutter_bloc

Answered By – dshukertjr

Answer Checked By – Terry (FlutterFixes Volunteer)

Leave a Reply

Your email address will not be published. Required fields are marked *