@@ -29,32 +29,39 @@ class MyHomePage extends StatefulWidget {
29
29
}
30
30
31
31
class MyIncrementer {
32
- MyIncrementer (this .increment);
33
-
32
+ MyIncrementer (this .increment, this .screen );
33
+ final Scaffold ? screen;
34
34
final VoidCallback increment;
35
35
}
36
36
37
37
class _MyHomePageState extends State <MyHomePage > {
38
38
int _counter = 0 ;
39
39
40
- late MyIncrementer _incrementer = MyIncrementer (() => setState (() {
41
- _counter++ ;
42
- }));
40
+ late MyIncrementer _incrementer = MyIncrementer (
41
+ () => setState (() {
42
+ _counter++ ;
43
+ }),
44
+ null ,
45
+ );
43
46
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;
46
50
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
+ );
52
60
53
61
_incrementer.increment ();
54
62
}
55
63
56
- @override
57
- Widget build (BuildContext context) {
64
+ Scaffold get theScreen {
58
65
return Scaffold (
59
66
appBar: AppBar (
60
67
title: Text (widget.title),
@@ -64,20 +71,33 @@ class _MyHomePageState extends State<MyHomePage> {
64
71
mainAxisAlignment: MainAxisAlignment .center,
65
72
children: < Widget > [
66
73
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:' ,
72
75
),
76
+ MyCounter (value: _counter),
73
77
],
74
78
),
75
79
),
76
80
floatingActionButton: FloatingActionButton (
77
- onPressed: () => _updateAndInvokeIncrementer (context),
78
- tooltip: 'Increment' ,
81
+ onPressed: () => _incrementCounter (context),
82
+ tooltip: 'Increment counter ' ,
79
83
child: const Icon (Icons .add),
80
84
),
81
85
);
82
86
}
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
+ }
83
103
}
0 commit comments