flutterdartchangenotifier

How ChangeNotifier notify the state?


Can someone give me idea how provider notify the state?

I don't want to use ChangeNotifierProvider, Can you give me a suggestion without library?

I just need better explanation with example. How provider combine InheritedWidget.


Solution

  • What do you think about the following example (inspired by an answer here) with an AnimatedBuilder:

    import 'package:flutter/material.dart';
    
    class MyChangeNotifier extends ChangeNotifier {
      int count = 0;
    
      void addOne() {
        count++;
        notifyListeners();
      }
    }
    
    class MyApp extends StatelessWidget {
      final MyChangeNotifier myChangeNotifier = MyChangeNotifier();
    
      @override
      Widget build(BuildContext context) {
        return MaterialApp(
          home: Scaffold(
            body: Center(
              child: ExampleButton(myChangeNotifier),
            ),
            floatingActionButton: FloatingActionButton(
              child: const Icon(Icons.add),
              onPressed: myChangeNotifier.addOne,
            ),
          ),
        );
      }
    }
    
    class ExampleButton extends StatelessWidget {
      final MyChangeNotifier myChangeNotifier;
      const ExampleButton(this.myChangeNotifier, {Key? key}) : super(key: key);
    
      @override
      Widget build(BuildContext context) {
        return AnimatedBuilder(
            animation: myChangeNotifier,
            builder: (context, child) {
              return OutlinedButton(
                  onPressed: myChangeNotifier.addOne,
                  child: Text(
                    'Tap me - or the floating button\n\n${myChangeNotifier.count}',
                    textAlign: TextAlign.center,
                  ));
            });
      }
    }
    
    void main() => runApp(MyApp());
    

    The ChangeNotifier implements the Listenable class. You can see here how to listen to that Listenable, for example with an AnimatedBuilder (what my code does). A ChangeNotifyProvider (I know, you don't want that) would also implement that for you and notify your widgets lower in the widget tree about changes.