@@ -29,32 +29,39 @@ class MyHomePage extends StatefulWidget {
2929}
3030
3131class MyIncrementer {
32- MyIncrementer (this .increment);
33-
32+ MyIncrementer (this .increment, this .screen );
33+ final Scaffold ? screen;
3434 final VoidCallback increment;
3535}
3636
3737class _MyHomePageState extends State <MyHomePage > {
3838 int _counter = 0 ;
3939
40- late MyIncrementer _incrementer = MyIncrementer (() => setState (() {
41- _counter++ ;
42- }));
40+ late MyIncrementer _incrementer = MyIncrementer (
41+ () => setState (() {
42+ _counter++ ;
43+ }),
44+ null ,
45+ );
4346
44- void _updateAndInvokeIncrementer (BuildContext context) {
45- final incrementer = _incrementer;
47+ /// Increments counter if current screen contains floating action button.
48+ void _incrementCounter (BuildContext context) {
49+ final oldIncrementer = _incrementer;
4650
47- _incrementer = MyIncrementer (() {
48- if (identityHashCode (context) > 0 ) {
49- incrementer.increment ();
50- }
51- });
51+ _incrementer = MyIncrementer (
52+ () {
53+ final screen = theScreen;
54+ if (screen.floatingActionButton != null ) {
55+ oldIncrementer.increment ();
56+ }
57+ },
58+ theScreen,
59+ );
5260
5361 _incrementer.increment ();
5462 }
5563
56- @override
57- Widget build (BuildContext context) {
64+ Scaffold get theScreen {
5865 return Scaffold (
5966 appBar: AppBar (
6067 title: Text (widget.title),
@@ -64,20 +71,33 @@ class _MyHomePageState extends State<MyHomePage> {
6471 mainAxisAlignment: MainAxisAlignment .center,
6572 children: < Widget > [
6673 const Text (
67- 'You have pushed the button this many times:' ,
68- ),
69- Text (
70- '$_counter ' ,
71- style: Theme .of (context).textTheme.headlineMedium,
74+ 'The counter value is:' ,
7275 ),
76+ MyCounter (value: _counter),
7377 ],
7478 ),
7579 ),
7680 floatingActionButton: FloatingActionButton (
77- onPressed: () => _updateAndInvokeIncrementer (context),
78- tooltip: 'Increment' ,
81+ onPressed: () => _incrementCounter (context),
82+ tooltip: 'Increment counter ' ,
7983 child: const Icon (Icons .add),
8084 ),
8185 );
8286 }
87+
88+ @override
89+ Widget build (BuildContext context) => theScreen;
90+ }
91+
92+ class MyCounter extends StatelessWidget {
93+ const MyCounter ({super .key, required this .value});
94+ final int value;
95+
96+ @override
97+ Widget build (BuildContext context) {
98+ return Text (
99+ '$value ' ,
100+ style: Theme .of (context).textTheme.headlineMedium,
101+ );
102+ }
83103}
0 commit comments