blob: c28f535b8625b6c0740a9834d461eb3f97ecfb9b [file] [log] [blame]
// 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/material.dart';
import 'package:flutter_test/flutter_test.dart';
void main() {
test('Can dispose ScrollPosition when hasPixels is false', () {
final ScrollPosition position = ScrollPositionWithSingleContext(
initialPixels: null,
keepScrollOffset: false,
physics: const AlwaysScrollableScrollPhysics(),
context: ScrollableState(),
);
expect(position.hasPixels, false);
position.dispose(); // Should not throw/assert.
});
testWidgets('scrollable in hidden overlay does not crash when unhidden', (WidgetTester tester) async {
// Regression test for https://github.com/flutter/flutter/issues/44269.
final TabController controller = TabController(vsync: const TestVSync(), length: 1);
final OverlayEntry entry1 = OverlayEntry(
maintainState: true,
opaque: true,
builder: (BuildContext context) {
return TabBar(
isScrollable: true,
controller: controller,
tabs: const <Tab>[
Tab(text: 'Main'),
],
);
},
);
final OverlayEntry entry2 = OverlayEntry(
maintainState: true,
opaque: true,
builder: (BuildContext context) {
return const Text('number2');
},
);
await tester.pumpWidget(
MaterialApp(
home: Material(
child: Overlay(
initialEntries: <OverlayEntry>[
entry1,
entry2,
],
),
),
),
);
entry2.remove();
await tester.pump();
expect(tester.takeException(), isNull);
});
}