Skip to content

Commit c95cf5d

Browse files
authored
Update main.dart (flutter#4932)
1 parent 2a4139e commit c95cf5d

File tree

1 file changed

+41
-21
lines changed
  • case_study/memory_leaks/leaking_counter_1/lib

1 file changed

+41
-21
lines changed

case_study/memory_leaks/leaking_counter_1/lib/main.dart

Lines changed: 41 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -29,32 +29,39 @@ class MyHomePage extends StatefulWidget {
2929
}
3030

3131
class MyIncrementer {
32-
MyIncrementer(this.increment);
33-
32+
MyIncrementer(this.increment, this.screen);
33+
final Scaffold? screen;
3434
final VoidCallback increment;
3535
}
3636

3737
class _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

Comments
 (0)