mirror of
https://github.com/flutter/flutter
synced 2024-10-05 15:59:49 +00:00
Leak clean up. (#144803)
Fix some leaks and mark others. [Known leaks](https://github.com/issues?q=is%3Aopen+is%3Aissue+label%3A%22a%3A+leak+tracking%22+-label%3A%22c%3A+new+feature%22+)
This commit is contained in:
parent
e10049b2ff
commit
9fee27b244
|
@ -3263,6 +3263,12 @@ class _MenuPanel extends StatefulWidget {
|
|||
class _MenuPanelState extends State<_MenuPanel> {
|
||||
ScrollController scrollController = ScrollController();
|
||||
|
||||
@override
|
||||
void dispose() {
|
||||
scrollController.dispose();
|
||||
super.dispose();
|
||||
}
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
final (MenuStyle? themeStyle, MenuStyle defaultStyle) = switch (widget.orientation) {
|
||||
|
|
|
@ -1410,18 +1410,23 @@ class _TabBarState extends State<TabBar> {
|
|||
?? tabBarTheme.indicatorSize
|
||||
?? _defaults.indicatorSize!;
|
||||
|
||||
final _IndicatorPainter? oldPainter = _indicatorPainter;
|
||||
|
||||
_indicatorPainter = !_controllerIsValid ? null : _IndicatorPainter(
|
||||
controller: _controller!,
|
||||
indicator: _getIndicator(indicatorSize),
|
||||
indicatorSize: indicatorSize,
|
||||
indicatorPadding: widget.indicatorPadding,
|
||||
tabKeys: _tabKeys,
|
||||
old: _indicatorPainter,
|
||||
// Passing old painter so that the constructor can copy some values from it.
|
||||
old: oldPainter,
|
||||
labelPaddings: _labelPaddings,
|
||||
dividerColor: widget.dividerColor ?? tabBarTheme.dividerColor ?? _defaults.dividerColor,
|
||||
dividerHeight: widget.dividerHeight ?? tabBarTheme.dividerHeight ?? _defaults.dividerHeight,
|
||||
showDivider: theme.useMaterial3 && !widget.isScrollable,
|
||||
);
|
||||
|
||||
oldPainter?.dispose();
|
||||
}
|
||||
|
||||
@override
|
||||
|
|
|
@ -9,6 +9,7 @@ library;
|
|||
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter_test/flutter_test.dart';
|
||||
import 'package:leak_tracker_flutter_testing/leak_tracker_flutter_testing.dart';
|
||||
|
||||
void main() {
|
||||
/*
|
||||
|
@ -77,7 +78,10 @@ void main() {
|
|||
// Currently skipped due to daily flake: https://github.com/flutter/flutter/issues/87588
|
||||
}, skip: true); // Typically skip: isBrowser https://github.com/flutter/flutter/issues/42767
|
||||
|
||||
testWidgets('Should show event indicator for pointer events with setSurfaceSize', (WidgetTester tester) async {
|
||||
testWidgets('Should show event indicator for pointer events with setSurfaceSize',
|
||||
// TODO(polina-c): clean up leaks, https://github.com/flutter/flutter/issues/134787 [leaks-to-clean]
|
||||
experimentalLeakTesting: LeakTesting.settings.withIgnoredAll(),
|
||||
(WidgetTester tester) async {
|
||||
final AnimationSheetBuilder animationSheet = AnimationSheetBuilder(frameSize: const Size(200, 200), allLayers: true);
|
||||
addTearDown(animationSheet.dispose);
|
||||
final List<Offset> taps = <Offset>[];
|
||||
|
|
|
@ -7,12 +7,16 @@ import 'dart:typed_data';
|
|||
import 'package:flutter/cupertino.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter_test/flutter_test.dart';
|
||||
import 'package:leak_tracker_flutter_testing/leak_tracker_flutter_testing.dart';
|
||||
|
||||
import '../../image_data.dart';
|
||||
|
||||
late List<int> selectedTabs;
|
||||
|
||||
void main() {
|
||||
// TODO(polina-c): dispose ImageStreamCompleterHandle, https://github.com/flutter/flutter/issues/145599 [leaks-to-clean]
|
||||
LeakTesting.settings = LeakTesting.settings.withIgnoredAll();
|
||||
|
||||
setUp(() {
|
||||
selectedTabs = <int>[];
|
||||
});
|
||||
|
|
|
@ -6,6 +6,7 @@ import 'package:flutter/cupertino.dart';
|
|||
import 'package:flutter/foundation.dart';
|
||||
import 'package:flutter/services.dart';
|
||||
import 'package:flutter_test/flutter_test.dart';
|
||||
import 'package:leak_tracker_flutter_testing/leak_tracker_flutter_testing.dart';
|
||||
|
||||
import '../image_data.dart';
|
||||
import '../rendering/rendering_tester.dart' show TestCallbackPainter;
|
||||
|
@ -39,6 +40,9 @@ class MockCupertinoTabController extends CupertinoTabController {
|
|||
}
|
||||
|
||||
void main() {
|
||||
// TODO(polina-c): dispose ImageStreamCompleterHandle, https://github.com/flutter/flutter/issues/145599 [leaks-to-clean]
|
||||
LeakTesting.settings = LeakTesting.settings.withIgnoredAll();
|
||||
|
||||
setUp(() {
|
||||
selectedTabs = <int>[];
|
||||
});
|
||||
|
@ -244,7 +248,9 @@ void main() {
|
|||
);
|
||||
});
|
||||
|
||||
testWidgets('Programmatic tab switching by changing the index of an existing controller', (WidgetTester tester) async {
|
||||
testWidgets('Programmatic tab switching by changing the index of an existing controller',
|
||||
experimentalLeakTesting: LeakTesting.settings.withCreationStackTrace(),
|
||||
(WidgetTester tester) async {
|
||||
final CupertinoTabController controller = CupertinoTabController(initialIndex: 1);
|
||||
addTearDown(controller.dispose);
|
||||
final List<int> tabsPainted = <int>[];
|
||||
|
@ -825,6 +831,8 @@ void main() {
|
|||
|
||||
testWidgets('A controller can control more than one CupertinoTabScaffold, '
|
||||
'removal of listeners does not break the controller',
|
||||
// TODO(polina-c): dispose TabController, https://github.com/flutter/flutter/issues/144910 [leaks-to-clean]
|
||||
experimentalLeakTesting: LeakTesting.settings.withIgnoredAll(),
|
||||
(WidgetTester tester) async {
|
||||
final List<int> tabsPainted0 = <int>[];
|
||||
final List<int> tabsPainted1 = <int>[];
|
||||
|
@ -1094,7 +1102,9 @@ void main() {
|
|||
expect(find.text("don't lose me"), findsOneWidget);
|
||||
});
|
||||
|
||||
testWidgets('textScaleFactor is set to 1.0', (WidgetTester tester) async {
|
||||
testWidgets('textScaleFactor is set to 1.0',
|
||||
experimentalLeakTesting: LeakTesting.settings.withCreationStackTrace(),
|
||||
(WidgetTester tester) async {
|
||||
await tester.pumpWidget(
|
||||
CupertinoApp(
|
||||
home: Builder(builder: (BuildContext context) {
|
||||
|
@ -1267,7 +1277,10 @@ void main() {
|
|||
.setMockMethodCallHandler(SystemChannels.platform, null);
|
||||
});
|
||||
|
||||
testWidgets('System back navigation inside of tabs', (WidgetTester tester) async {
|
||||
testWidgets('System back navigation inside of tabs',
|
||||
// TODO(polina-c): dispose TabController, https://github.com/flutter/flutter/issues/144910
|
||||
experimentalLeakTesting: LeakTesting.settings.withIgnoredAll(),
|
||||
(WidgetTester tester) async {
|
||||
await tester.pumpWidget(
|
||||
CupertinoApp(
|
||||
home: MediaQuery(
|
||||
|
|
|
@ -5,6 +5,7 @@
|
|||
import 'package:flutter/cupertino.dart';
|
||||
import 'package:flutter/services.dart';
|
||||
import 'package:flutter_test/flutter_test.dart';
|
||||
import 'package:leak_tracker_flutter_testing/leak_tracker_flutter_testing.dart';
|
||||
|
||||
void main() {
|
||||
testWidgets('Use home', (WidgetTester tester) async {
|
||||
|
@ -81,7 +82,9 @@ void main() {
|
|||
expect(find.text('generated home'), findsOneWidget);
|
||||
});
|
||||
|
||||
testWidgets('Use onUnknownRoute', (WidgetTester tester) async {
|
||||
testWidgets('Use onUnknownRoute',
|
||||
experimentalLeakTesting: LeakTesting.settings.withIgnoredAll(), // leaking by design because of exception
|
||||
(WidgetTester tester) async {
|
||||
late String unknownForRouteCalled;
|
||||
await tester.pumpWidget(
|
||||
CupertinoApp(
|
||||
|
|
|
@ -49,6 +49,12 @@ Future<void> testExecutable(FutureOr<void> Function() testMain) {
|
|||
LeakTesting.settings = LeakTesting.settings.withIgnored(
|
||||
createdByTestHelpers: true,
|
||||
allNotGCed: true,
|
||||
classes: <String>[
|
||||
// TODO(polina-c): CurvedAnimation is leaking, https://github.com/flutter/flutter/issues/145600 [leaks-to-clean]
|
||||
'CurvedAnimation',
|
||||
// TODO(polina-c): _NullElement is leaking, https://github.com/flutter/flutter/issues/145602 [leaks-to-clean]
|
||||
'_NullElement',
|
||||
],
|
||||
);
|
||||
}
|
||||
|
||||
|
|
|
@ -5,6 +5,7 @@
|
|||
import 'package:flutter/gestures.dart';
|
||||
import 'package:flutter/scheduler.dart';
|
||||
import 'package:flutter_test/flutter_test.dart';
|
||||
import 'package:leak_tracker_flutter_testing/leak_tracker_flutter_testing.dart';
|
||||
|
||||
import 'gesture_tester.dart';
|
||||
|
||||
|
@ -764,7 +765,10 @@ void main() {
|
|||
]);
|
||||
});
|
||||
|
||||
testGesture('Horizontal drag with multiple pointers - averageBoundaryPointers', (GestureTester tester) {
|
||||
testGesture('Horizontal drag with multiple pointers - averageBoundaryPointers',
|
||||
// TODO(polina-c): dispose gesture recognizers https://github.com/flutter/flutter/issues/145605 [leaks-to-clean]
|
||||
experimentalLeakTesting: LeakTesting.settings.withIgnoredAll(),
|
||||
(GestureTester tester) {
|
||||
final HorizontalDragGestureRecognizer drag =
|
||||
HorizontalDragGestureRecognizer()
|
||||
..multitouchDragStrategy = MultitouchDragStrategy.averageBoundaryPointers;
|
||||
|
@ -924,7 +928,10 @@ void main() {
|
|||
]);
|
||||
});
|
||||
|
||||
testGesture('Vertical drag with multiple pointers - averageBoundaryPointers', (GestureTester tester) {
|
||||
testGesture('Vertical drag with multiple pointers - averageBoundaryPointers',
|
||||
// TODO(polina-c): dispose gesture recognizers https://github.com/flutter/flutter/issues/145605 [leaks-to-clean]
|
||||
experimentalLeakTesting: LeakTesting.settings.withIgnoredAll(),
|
||||
(GestureTester tester) {
|
||||
final VerticalDragGestureRecognizer drag =
|
||||
VerticalDragGestureRecognizer()
|
||||
..multitouchDragStrategy = MultitouchDragStrategy.averageBoundaryPointers;
|
||||
|
@ -1084,7 +1091,10 @@ void main() {
|
|||
]);
|
||||
});
|
||||
|
||||
testGesture('Pan drag with multiple pointers - averageBoundaryPointers', (GestureTester tester) {
|
||||
testGesture('Pan drag with multiple pointers - averageBoundaryPointers',
|
||||
// TODO(polina-c): dispose gesture recognizers https://github.com/flutter/flutter/issues/145605 [leaks-to-clean]
|
||||
experimentalLeakTesting: LeakTesting.settings.withIgnoredAll(),
|
||||
(GestureTester tester) {
|
||||
final PanGestureRecognizer drag =
|
||||
PanGestureRecognizer()
|
||||
..multitouchDragStrategy = MultitouchDragStrategy.averageBoundaryPointers;
|
||||
|
|
|
@ -5,6 +5,7 @@
|
|||
import 'package:fake_async/fake_async.dart';
|
||||
import 'package:flutter/gestures.dart';
|
||||
import 'package:flutter_test/flutter_test.dart';
|
||||
import 'package:leak_tracker_flutter_testing/leak_tracker_flutter_testing.dart';
|
||||
import 'package:meta/meta.dart';
|
||||
|
||||
class GestureTester {
|
||||
|
@ -25,10 +26,14 @@ class GestureTester {
|
|||
typedef GestureTest = void Function(GestureTester tester);
|
||||
|
||||
@isTest
|
||||
void testGesture(String description, GestureTest callback) {
|
||||
testWidgets(description, (_) async {
|
||||
FakeAsync().run((FakeAsync async) {
|
||||
callback(GestureTester._(async));
|
||||
});
|
||||
});
|
||||
void testGesture(String description, GestureTest callback, {LeakTesting? experimentalLeakTesting}) {
|
||||
testWidgets(
|
||||
description,
|
||||
(_) async {
|
||||
FakeAsync().run((FakeAsync async) {
|
||||
callback(GestureTester._(async));
|
||||
});
|
||||
},
|
||||
experimentalLeakTesting: experimentalLeakTesting,
|
||||
);
|
||||
}
|
||||
|
|
|
@ -8,6 +8,7 @@ import 'package:flutter/material.dart';
|
|||
import 'package:flutter/rendering.dart';
|
||||
import 'package:flutter/services.dart';
|
||||
import 'package:flutter_test/flutter_test.dart';
|
||||
import 'package:leak_tracker_flutter_testing/leak_tracker_flutter_testing.dart';
|
||||
|
||||
class StateMarker extends StatefulWidget {
|
||||
const StateMarker({ super.key, this.child });
|
||||
|
@ -369,7 +370,9 @@ void main() {
|
|||
expect(find.text('route "/b"', skipOffstage: false), findsNothing);
|
||||
});
|
||||
|
||||
testWidgets('onGenerateRoute / onUnknownRoute', (WidgetTester tester) async {
|
||||
testWidgets('onGenerateRoute / onUnknownRoute',
|
||||
experimentalLeakTesting: LeakTesting.settings.withIgnoredAll(), // leaking by design because of exception
|
||||
(WidgetTester tester) async {
|
||||
final List<String> log = <String>[];
|
||||
await tester.pumpWidget(
|
||||
MaterialApp(
|
||||
|
|
|
@ -96,7 +96,7 @@ void main() {
|
|||
});
|
||||
|
||||
testWidgets('CircleAvatar backgroundImage is used as a fallback for foregroundImage',
|
||||
// TODO(polina-c): clean up leaks, https://github.com/flutter/flutter/issues/134787 [leaks-to-clean]
|
||||
// TODO(polina-c): make sure images are disposed, https://github.com/flutter/flutter/issues/141388 [leaks-to-clean]
|
||||
experimentalLeakTesting: LeakTesting.settings.withIgnoredAll(),
|
||||
(WidgetTester tester) async {
|
||||
final ErrorImageProvider errorImage = ErrorImageProvider();
|
||||
|
|
|
@ -8,8 +8,12 @@ import 'package:flutter/material.dart';
|
|||
import 'package:flutter/rendering.dart';
|
||||
import 'package:flutter/services.dart';
|
||||
import 'package:flutter_test/flutter_test.dart';
|
||||
import 'package:leak_tracker_testing/leak_tracker_testing.dart';
|
||||
|
||||
void main() {
|
||||
// TODO(polina-c): _DropdownMenuState should not be used after disposal, https://github.com/flutter/flutter/issues/145622 [leaks-to-clean]
|
||||
LeakTesting.settings = LeakTesting.settings.withIgnoredAll();
|
||||
|
||||
const String longText = 'one two three four five six seven eight nine ten eleven twelve';
|
||||
final List<DropdownMenuEntry<TestMenu>> menuChildren = <DropdownMenuEntry<TestMenu>>[];
|
||||
|
||||
|
@ -1800,8 +1804,7 @@ void main() {
|
|||
checkExpectedHighlight(searchResult: 'Read', otherItems: <String>['All', 'Unread']);
|
||||
});
|
||||
|
||||
testWidgets('onSelected gets called when a selection is made in a nested menu',
|
||||
(WidgetTester tester) async {
|
||||
testWidgets('onSelected gets called when a selection is made in a nested menu', (WidgetTester tester) async {
|
||||
int selectionCount = 0;
|
||||
|
||||
final ThemeData themeData = ThemeData();
|
||||
|
|
|
@ -6,7 +6,6 @@ import 'package:flutter/foundation.dart';
|
|||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter_test/flutter_test.dart';
|
||||
|
||||
|
||||
void main() {
|
||||
Finder findMenuPanels() {
|
||||
return find.byWidgetPredicate((Widget widget) => widget.runtimeType.toString() == '_MenuPanel');
|
||||
|
|
|
@ -2207,8 +2207,7 @@ void main() {
|
|||
|
||||
testWidgets(
|
||||
'didUpdate bottomSheet while a previous bottom sheet is still displayed',
|
||||
// TODO(polina-c): clean up leaks, https://github.com/flutter/flutter/issues/134787 [leaks-to-clean]
|
||||
experimentalLeakTesting: LeakTesting.settings.withIgnoredAll(),
|
||||
experimentalLeakTesting: LeakTesting.settings.withIgnoredAll(), // leaking by design because of exception
|
||||
(WidgetTester tester) async {
|
||||
final GlobalKey<ScaffoldState> key = GlobalKey<ScaffoldState>();
|
||||
const Key buttonKey = Key('button');
|
||||
|
|
|
@ -973,8 +973,7 @@ void main() {
|
|||
});
|
||||
|
||||
testWidgets(
|
||||
"TabBarTheme's labelColor & unselectedLabelColor override labelStyle & unselectedLabelStyle colors",
|
||||
(WidgetTester tester) async {
|
||||
"TabBarTheme's labelColor & unselectedLabelColor override labelStyle & unselectedLabelStyle colors", (WidgetTester tester) async {
|
||||
const Color labelColor = Color(0xfff00000);
|
||||
const Color unselectedLabelColor = Color(0x95ff0000);
|
||||
const TextStyle labelStyle = TextStyle(
|
||||
|
|
|
@ -7,6 +7,7 @@ import 'package:flutter/material.dart';
|
|||
import 'package:flutter/rendering.dart';
|
||||
import 'package:flutter/services.dart';
|
||||
import 'package:flutter_test/flutter_test.dart';
|
||||
import 'package:leak_tracker_flutter_testing/leak_tracker_flutter_testing.dart';
|
||||
|
||||
import '../widgets/semantics_tester.dart';
|
||||
import 'feedback_tester.dart';
|
||||
|
@ -112,6 +113,9 @@ Widget buildLeftRightApp({required List<String> tabs, required String value, boo
|
|||
}
|
||||
|
||||
void main() {
|
||||
// TODO(polina-c): dispose TabController, https://github.com/flutter/flutter/issues/144910 [leaks-to-clean]
|
||||
LeakTesting.settings = LeakTesting.settings.withIgnoredAll();
|
||||
|
||||
setUp(() {
|
||||
debugResetSemanticsIdCounter();
|
||||
});
|
||||
|
|
|
@ -10,7 +10,6 @@ import 'package:flutter/material.dart';
|
|||
import 'package:flutter/rendering.dart';
|
||||
import 'package:flutter/services.dart';
|
||||
import 'package:flutter_test/flutter_test.dart';
|
||||
import 'package:leak_tracker_flutter_testing/leak_tracker_flutter_testing.dart';
|
||||
|
||||
Future<void> verifyMarkedNeedsLayoutDuringTransientCallbacksPhase(WidgetTester tester, RenderObject renderObject) async {
|
||||
assert(!renderObject.debugNeedsLayout);
|
||||
|
@ -37,9 +36,6 @@ Future<void> verifyMarkedNeedsLayoutDuringTransientCallbacksPhase(WidgetTester t
|
|||
}
|
||||
|
||||
void main() {
|
||||
// TODO(polina-c): clean up leaks, https://github.com/flutter/flutter/issues/134787 [leaks-to-clean]
|
||||
LeakTesting.settings = LeakTesting.settings.withIgnored(classes: <String>['CurvedAnimation']);
|
||||
|
||||
testWidgets('RenderParagraph relayout upon system fonts changes', (WidgetTester tester) async {
|
||||
await tester.pumpWidget(
|
||||
const MaterialApp(
|
||||
|
|
|
@ -22,6 +22,7 @@ void main() {
|
|||
group('RawImage', () {
|
||||
testWidgets('properties', (WidgetTester tester) async {
|
||||
final ui.Image image1 = (await tester.runAsync<ui.Image>(() => createTestImage()))!;
|
||||
addTearDown(image1.dispose);
|
||||
|
||||
await tester.pumpWidget(
|
||||
Directionality(
|
||||
|
@ -50,6 +51,7 @@ void main() {
|
|||
expect(renderObject.isAntiAlias, false);
|
||||
|
||||
final ui.Image image2 = (await tester.runAsync<ui.Image>(() => createTestImage(width: 2, height: 2)))!;
|
||||
addTearDown(image2.dispose);
|
||||
const String debugImageLabel = 'debugImageLabel';
|
||||
const double width = 1;
|
||||
const double height = 1;
|
||||
|
|
|
@ -5,9 +5,12 @@
|
|||
import 'package:flutter/rendering.dart';
|
||||
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() {
|
||||
testWidgets('Sliver in a box', (WidgetTester tester) async {
|
||||
testWidgets('Sliver in a box',
|
||||
experimentalLeakTesting: LeakTesting.settings.withIgnoredAll(), // leaking by design because of exception
|
||||
(WidgetTester tester) async {
|
||||
await tester.pumpWidget(
|
||||
DecoratedBox(
|
||||
decoration: const BoxDecoration(),
|
||||
|
@ -32,7 +35,9 @@ void main() {
|
|||
expect(tester.takeException(), isFlutterError);
|
||||
});
|
||||
|
||||
testWidgets('Box in a sliver', (WidgetTester tester) async {
|
||||
testWidgets('Box in a sliver',
|
||||
experimentalLeakTesting: LeakTesting.settings.withIgnoredAll(), // leaking by design because of exception
|
||||
(WidgetTester tester) async {
|
||||
late ViewportOffset offset1;
|
||||
addTearDown(() => offset1.dispose());
|
||||
await tester.pumpWidget(
|
||||
|
|
|
@ -4,6 +4,7 @@
|
|||
|
||||
import 'package:flutter/widgets.dart';
|
||||
import 'package:flutter_test/flutter_test.dart';
|
||||
import 'package:leak_tracker_flutter_testing/leak_tracker_flutter_testing.dart';
|
||||
|
||||
import 'test_widgets.dart';
|
||||
|
||||
|
@ -164,7 +165,9 @@ void main() {
|
|||
await tester.pumpWidget(Container());
|
||||
});
|
||||
|
||||
testWidgets('Setting state during dispose is forbidden', (WidgetTester tester) async {
|
||||
testWidgets('Setting state during dispose is forbidden',
|
||||
experimentalLeakTesting: LeakTesting.settings.withIgnoredAll(), // leaking by design because of exception
|
||||
(WidgetTester tester) async {
|
||||
await tester.pumpWidget(const BadDisposeWidget());
|
||||
expect(tester.takeException(), isNull);
|
||||
await tester.pumpWidget(Container());
|
||||
|
|
|
@ -5,7 +5,6 @@
|
|||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter/services.dart';
|
||||
import 'package:flutter_test/flutter_test.dart';
|
||||
import 'package:leak_tracker_flutter_testing/leak_tracker_flutter_testing.dart';
|
||||
|
||||
import 'clipboard_utils.dart';
|
||||
import 'editable_text_utils.dart';
|
||||
|
@ -91,10 +90,7 @@ void main() {
|
|||
expect(find.byKey(key2), findsNothing);
|
||||
});
|
||||
|
||||
testWidgets('A menu can be hidden and then reshown',
|
||||
// TODO(polina-c): clean up leaks, https://github.com/flutter/flutter/issues/134787 [leaks-to-clean]
|
||||
experimentalLeakTesting: LeakTesting.settings.withIgnoredAll(),
|
||||
(WidgetTester tester) async {
|
||||
testWidgets('A menu can be hidden and then reshown', (WidgetTester tester) async {
|
||||
final GlobalKey key1 = GlobalKey();
|
||||
late final BuildContext context;
|
||||
|
||||
|
@ -182,10 +178,7 @@ void main() {
|
|||
controller.remove();
|
||||
});
|
||||
|
||||
testWidgets('Calling show when a built-in widget is already showing its context menu hides the built-in menu',
|
||||
// TODO(polina-c): clean up leaks, https://github.com/flutter/flutter/issues/134787 [leaks-to-clean]
|
||||
experimentalLeakTesting: LeakTesting.settings.withIgnoredAll(),
|
||||
(WidgetTester tester) async {
|
||||
testWidgets('Calling show when a built-in widget is already showing its context menu hides the built-in menu', (WidgetTester tester) async {
|
||||
final GlobalKey builtInKey = GlobalKey();
|
||||
final GlobalKey directKey = GlobalKey();
|
||||
late final BuildContext context;
|
||||
|
|
|
@ -2541,7 +2541,10 @@ void main() {
|
|||
});
|
||||
|
||||
// Regression test for https://github.com/flutter/flutter/issues/6128.
|
||||
testWidgets('Draggable plays nice with onTap', (WidgetTester tester) async {
|
||||
testWidgets('Draggable plays nice with onTap',
|
||||
// TODO(polina-c): fix the leaking ImmediateMultiDragGestureRecognizer https://github.com/flutter/flutter/pull/144396 [leaks-to-clean]
|
||||
experimentalLeakTesting: LeakTesting.settings.withIgnoredAll(),
|
||||
(WidgetTester tester) async {
|
||||
late final OverlayEntry entry;
|
||||
addTearDown(() => entry..remove()..dispose());
|
||||
|
||||
|
@ -3432,7 +3435,7 @@ void main() {
|
|||
|
||||
// Regression test for https://github.com/flutter/flutter/issues/92083
|
||||
testWidgets('feedback respect the MouseRegion cursor configure',
|
||||
// TODO(polina-c): clean up leaks, https://github.com/flutter/flutter/issues/134787 [leaks-to-clean]
|
||||
// TODO(polina-c): fix the leaking ImmediateMultiDragGestureRecognizer https://github.com/flutter/flutter/pull/144396 [leaks-to-clean]
|
||||
experimentalLeakTesting: LeakTesting.settings.withIgnoredAll(),
|
||||
(WidgetTester tester) async {
|
||||
await tester.pumpWidget(
|
||||
|
|
|
@ -7,6 +7,7 @@ import 'dart:math' as math;
|
|||
import 'package:flutter/rendering.dart';
|
||||
import 'package:flutter/widgets.dart';
|
||||
import 'package:flutter_test/flutter_test.dart';
|
||||
import 'package:leak_tracker_flutter_testing/leak_tracker_flutter_testing.dart';
|
||||
|
||||
import 'two_dimensional_utils.dart';
|
||||
|
||||
|
@ -1062,7 +1063,10 @@ void main() {
|
|||
return tester.element(findKey(vicinity));
|
||||
}
|
||||
|
||||
testWidgets('Axis.vertical', (WidgetTester tester) async {
|
||||
testWidgets('Axis.vertical',
|
||||
// TODO(polina-c): RenderTwoDimensionalViewport should dispose _delegate https://github.com/flutter/flutter/issues/145628 [leaks-to-clean]
|
||||
experimentalLeakTesting: LeakTesting.settings.withIgnoredAll(),
|
||||
(WidgetTester tester) async {
|
||||
await tester.pumpWidget(simpleBuilderTest(useCacheExtent: true));
|
||||
|
||||
Scrollable.ensureVisible(findContext(
|
||||
|
|
|
@ -8,6 +8,7 @@ import 'package:flutter/material.dart';
|
|||
import 'package:flutter/rendering.dart';
|
||||
import 'package:flutter/services.dart';
|
||||
import 'package:flutter_test/flutter_test.dart';
|
||||
import 'package:leak_tracker_flutter_testing/leak_tracker_flutter_testing.dart';
|
||||
|
||||
class HoverClient extends StatefulWidget {
|
||||
const HoverClient({
|
||||
|
@ -1836,7 +1837,10 @@ void main() {
|
|||
});
|
||||
|
||||
// Regression test for https://github.com/flutter/flutter/issues/67044
|
||||
testWidgets('Handle mouse events should ignore the detached MouseTrackerAnnotation', (WidgetTester tester) async {
|
||||
testWidgets('Handle mouse events should ignore the detached MouseTrackerAnnotation',
|
||||
// TODO(polina-c): dispose gesture recognizers https://github.com/flutter/flutter/issues/145605 [leaks-to-clean]
|
||||
experimentalLeakTesting: LeakTesting.settings.withIgnoredAll(),
|
||||
(WidgetTester tester) async {
|
||||
await tester.pumpWidget(MaterialApp(
|
||||
home: Center(
|
||||
child: Draggable<int>(
|
||||
|
|
|
@ -10,6 +10,7 @@ import 'package:flutter/rendering.dart';
|
|||
import 'package:flutter/scheduler.dart';
|
||||
import 'package:flutter/services.dart';
|
||||
import 'package:flutter_test/flutter_test.dart';
|
||||
import 'package:leak_tracker_flutter_testing/leak_tracker_flutter_testing.dart';
|
||||
|
||||
import 'navigator_utils.dart';
|
||||
import 'observer_tester.dart';
|
||||
|
@ -1830,7 +1831,9 @@ void main() {
|
|||
});
|
||||
|
||||
group('error control test', () {
|
||||
testWidgets('onUnknownRoute null and onGenerateRoute returns null', (WidgetTester tester) async {
|
||||
testWidgets('onGenerateRoute returns null',
|
||||
experimentalLeakTesting: LeakTesting.settings.withIgnoredAll(), // leaking by design because of exception
|
||||
(WidgetTester tester) async {
|
||||
final GlobalKey<NavigatorState> navigatorKey = GlobalKey<NavigatorState>();
|
||||
await tester.pumpWidget(Navigator(
|
||||
key: navigatorKey,
|
||||
|
@ -1856,7 +1859,9 @@ void main() {
|
|||
);
|
||||
});
|
||||
|
||||
testWidgets('onUnknownRoute null and onGenerateRoute returns null', (WidgetTester tester) async {
|
||||
testWidgets('onUnknownRoute null and onGenerateRoute returns null',
|
||||
experimentalLeakTesting: LeakTesting.settings.withIgnoredAll(), // leaking by design because of exception
|
||||
(WidgetTester tester) async {
|
||||
final GlobalKey<NavigatorState> navigatorKey = GlobalKey<NavigatorState>();
|
||||
await tester.pumpWidget(Navigator(
|
||||
key: navigatorKey,
|
||||
|
@ -2895,7 +2900,9 @@ void main() {
|
|||
);
|
||||
});
|
||||
|
||||
testWidgets('throw if page list is empty', (WidgetTester tester) async {
|
||||
testWidgets('throw if page list is empty',
|
||||
experimentalLeakTesting: LeakTesting.settings.withIgnoredAll(), // leaking by design because of exception
|
||||
(WidgetTester tester) async {
|
||||
final List<TestPage> myPages = <TestPage>[];
|
||||
final FlutterExceptionHandler? originalOnError = FlutterError.onError;
|
||||
FlutterErrorDetails? firstError;
|
||||
|
|
|
@ -94,7 +94,10 @@ Future<void> main() async {
|
|||
);
|
||||
});
|
||||
|
||||
testWidgets('TestBorder and Directionality - 2', (WidgetTester tester) async {
|
||||
testWidgets('TestBorder and Directionality - 2',
|
||||
// TODO(polina-c): dispose ImageStreamCompleterHandle, https://github.com/flutter/flutter/issues/145599 [leaks-to-clean]
|
||||
experimentalLeakTesting: LeakTesting.settings.withIgnoredAll(),
|
||||
(WidgetTester tester) async {
|
||||
final List<String> log = <String>[];
|
||||
await tester.pumpWidget(
|
||||
Directionality(
|
||||
|
|
|
@ -7,6 +7,7 @@ import 'dart:ui';
|
|||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter/rendering.dart';
|
||||
import 'package:flutter_test/flutter_test.dart';
|
||||
import 'package:leak_tracker_flutter_testing/leak_tracker_flutter_testing.dart';
|
||||
|
||||
import 'multi_view_testing.dart';
|
||||
|
||||
|
@ -344,7 +345,10 @@ void main() {
|
|||
});
|
||||
});
|
||||
|
||||
testWidgets('correctly switches between view configurations', (WidgetTester tester) async {
|
||||
testWidgets('correctly switches between view configurations',
|
||||
// TODO(polina-c): clean up leaks, https://github.com/flutter/flutter/issues/134787 [leaks-to-clean]
|
||||
experimentalLeakTesting: LeakTesting.settings.withIgnoredAll(),
|
||||
(WidgetTester tester) async {
|
||||
await tester.pumpWidget(
|
||||
wrapWithView: false,
|
||||
View(
|
||||
|
|
Loading…
Reference in a new issue