Search code examples
flutterflutter-widgetflutter-state

flutter share state across multiple instances of a widget


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