1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
// Copyright 2014 The Flutter Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
import 'package:flutter/widgets.dart';
import 'package:flutter_test/flutter_test.dart';
import 'package:leak_tracker_flutter_testing/leak_tracker_flutter_testing.dart';
void main() {
testWidgetsWithLeakTracking('StatefulWidget BuildContext.mounted', (WidgetTester tester) async {
late BuildContext capturedContext;
await tester.pumpWidget(TestStatefulWidget(
onBuild: (BuildContext context) {
capturedContext = context;
}
));
expect(capturedContext.mounted, isTrue);
await tester.pumpWidget(Container());
expect(capturedContext.mounted, isFalse);
});
testWidgetsWithLeakTracking('StatelessWidget BuildContext.mounted', (WidgetTester tester) async {
late BuildContext capturedContext;
await tester.pumpWidget(TestStatelessWidget(
onBuild: (BuildContext context) {
capturedContext = context;
}
));
expect(capturedContext.mounted, isTrue);
await tester.pumpWidget(Container());
expect(capturedContext.mounted, isFalse);
});
}
typedef BuildCallback = void Function(BuildContext);
class TestStatelessWidget extends StatelessWidget {
const TestStatelessWidget({super.key, required this.onBuild});
final BuildCallback onBuild;
@override
Widget build(BuildContext context) {
onBuild(context);
return Container();
}
}
class TestStatefulWidget extends StatefulWidget {
const TestStatefulWidget({super.key, required this.onBuild});
final BuildCallback onBuild;
@override
State<TestStatefulWidget> createState() => _TestStatefulWidgetState();
}
class _TestStatefulWidgetState extends State<TestStatefulWidget> {
@override
Widget build(BuildContext context) {
widget.onBuild(context);
return Container();
}
}