Skip to content

Commit 61a388a

Browse files
authored
Fix not disposed items in Cupertino app and route. (#134085)
1 parent 99f5cf0 commit 61a388a

File tree

3 files changed

+21
-3
lines changed

3 files changed

+21
-3
lines changed

packages/flutter/lib/src/cupertino/app.dart

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -506,6 +506,12 @@ class _CupertinoAppState extends State<CupertinoApp> {
506506
_heroController = CupertinoApp.createCupertinoHeroController();
507507
}
508508

509+
@override
510+
void dispose() {
511+
_heroController.dispose();
512+
super.dispose();
513+
}
514+
509515
// Combine the default localization for Cupertino with the ones contributed
510516
// by the localizationsDelegates parameter, if any. Only the first delegate
511517
// of a particular LocalizationsDelegate.type is loaded so the

packages/flutter/lib/src/cupertino/route.dart

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -121,6 +121,12 @@ mixin CupertinoRouteTransitionMixin<T> on PageRoute<T> {
121121
return _previousTitle!;
122122
}
123123

124+
@override
125+
void dispose() {
126+
_previousTitle?.dispose();
127+
super.dispose();
128+
}
129+
124130
@override
125131
void didChangePrevious(Route<dynamic>? previousRoute) {
126132
final String? previousTitleString = previousRoute is CupertinoRouteTransitionMixin

packages/flutter/test/cupertino/app_test.dart

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,9 +7,10 @@ import 'package:flutter/foundation.dart';
77
import 'package:flutter/rendering.dart';
88
import 'package:flutter/services.dart';
99
import 'package:flutter_test/flutter_test.dart';
10+
import 'package:leak_tracker_flutter_testing/leak_tracker_flutter_testing.dart';
1011

1112
void main() {
12-
testWidgets('Heroes work', (WidgetTester tester) async {
13+
testWidgetsWithLeakTracking('Heroes work', (WidgetTester tester) async {
1314
await tester.pumpWidget(CupertinoApp(
1415
home: ListView(children: <Widget>[
1516
const Hero(tag: 'a', child: Text('foo')),
@@ -394,6 +395,11 @@ void main() {
394395
return renderEditable!;
395396
}
396397

398+
final FocusNode focusNode = FocusNode();
399+
addTearDown(focusNode.dispose);
400+
final TextEditingController controller = TextEditingController();
401+
addTearDown(controller.dispose);
402+
397403
await tester.pumpWidget(
398404
CupertinoApp(
399405
theme: const CupertinoThemeData(
@@ -405,8 +411,8 @@ void main() {
405411
return EditableText(
406412
backgroundCursorColor: DefaultSelectionStyle.of(context).selectionColor!,
407413
cursorColor: DefaultSelectionStyle.of(context).cursorColor!,
408-
controller: TextEditingController(),
409-
focusNode: FocusNode(),
414+
controller: controller,
415+
focusNode: focusNode,
410416
style: const TextStyle(),
411417
);
412418
},

0 commit comments

Comments
 (0)