Understanding state management with the Provider package in Flutter
class YourProvider with ChangeNotifier { // Properties YourDataType _data = YourInitialData; // Getter YourDataType get data => _data; // Setter (optional) set userData(User? user) { if (user == null) { clear(); } else { initialize(); } } // Methods for initialization void initialize() { // Initialization logic fetchAndSetData(); } // Methods for state modification Future<void> updateData() async { // Data modification logic notifyListeners(); } // Method for clearing state void clear() { // Clearing state logic notifyListeners(); } }
ChangeNotifierProvider
ChangeNotifierProvider<YourProvider>( create: (BuildContext ctx) => YourProvider(), ),
ChangeNotifierProxyProvider
ChangeNotifierProxyProvider<DependencyProvider, YourProvider>( create: (BuildContext ctx) => YourProvider(), update: (BuildContext context, DependencyProvider dependencyProvider, YourProvider? yourProvider) => yourProvider!..dependencyData = dependencyProvider.data, ),
Provider.of
Consumer
final yourProvider = Provider.of<YourProvider>(context);
Consumer<YourProvider>( builder: (context, yourProvider, child) { // Widget that uses yourProvider.data }, )
notifyListeners()