mirror of
https://github.com/alibaba/flutter-go.git
synced 2025-07-08 18:32:58 +08:00
144 lines
5.3 KiB
Dart
144 lines
5.3 KiB
Dart
// Copyright 2016 The Chromium 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_web/material.dart';
|
|
import 'package:flutter_web/scheduler.dart';
|
|
import 'package:flutter_web_test/flutter_web_test.dart';
|
|
|
|
class TestCanvas implements Canvas {
|
|
TestCanvas([this.invocations]);
|
|
|
|
final List<Invocation> invocations;
|
|
|
|
@override
|
|
void noSuchMethod(Invocation invocation) {
|
|
invocations?.add(invocation);
|
|
}
|
|
}
|
|
|
|
void main() {
|
|
testWidgets('Scrollbar doesn\'t show when tapping list',
|
|
(WidgetTester tester) async {
|
|
await tester.pumpWidget(Directionality(
|
|
textDirection: TextDirection.ltr,
|
|
child: Center(
|
|
child: Container(
|
|
decoration:
|
|
BoxDecoration(border: Border.all(color: const Color(0xFFFFFF00))),
|
|
height: 200.0,
|
|
width: 300.0,
|
|
child: Scrollbar(
|
|
child: ListView(
|
|
children: <Widget>[
|
|
Container(height: 40.0, child: const Text('0')),
|
|
Container(height: 40.0, child: const Text('1')),
|
|
Container(height: 40.0, child: const Text('2')),
|
|
Container(height: 40.0, child: const Text('3')),
|
|
Container(height: 40.0, child: const Text('4')),
|
|
Container(height: 40.0, child: const Text('5')),
|
|
Container(height: 40.0, child: const Text('6')),
|
|
Container(height: 40.0, child: const Text('7')),
|
|
],
|
|
),
|
|
),
|
|
),
|
|
),
|
|
));
|
|
|
|
SchedulerBinding.instance.debugAssertNoTransientCallbacks(
|
|
'Building a list with a scrollbar triggered an animation.');
|
|
await tester.tap(find.byType(ListView));
|
|
SchedulerBinding.instance.debugAssertNoTransientCallbacks(
|
|
'Tapping a block with a scrollbar triggered an animation.');
|
|
await tester.pump(const Duration(milliseconds: 200));
|
|
await tester.pump(const Duration(milliseconds: 200));
|
|
await tester.pump(const Duration(milliseconds: 200));
|
|
await tester.pump(const Duration(milliseconds: 200));
|
|
await tester.drag(find.byType(ListView), const Offset(0.0, -10.0));
|
|
expect(SchedulerBinding.instance.transientCallbackCount, greaterThan(0));
|
|
await tester.pump(const Duration(milliseconds: 200));
|
|
await tester.pump(const Duration(milliseconds: 200));
|
|
await tester.pump(const Duration(milliseconds: 200));
|
|
await tester.pump(const Duration(milliseconds: 200));
|
|
});
|
|
|
|
testWidgets('ScrollbarPainter does not divide by zero',
|
|
(WidgetTester tester) async {
|
|
await tester.pumpWidget(Directionality(
|
|
textDirection: TextDirection.ltr,
|
|
child: Container(
|
|
height: 200.0,
|
|
width: 300.0,
|
|
child: Scrollbar(
|
|
child: ListView(
|
|
children: <Widget>[
|
|
Container(height: 40.0, child: const Text('0')),
|
|
],
|
|
),
|
|
),
|
|
),
|
|
));
|
|
|
|
final CustomPaint custom = tester.widget(find
|
|
.descendant(
|
|
of: find.byType(Scrollbar), matching: find.byType(CustomPaint))
|
|
.first);
|
|
final dynamic scrollPainter = custom.foregroundPainter;
|
|
// Dragging makes the scrollbar first appear.
|
|
await tester.drag(find.text('0'), const Offset(0.0, -10.0));
|
|
await tester.pump(const Duration(milliseconds: 200));
|
|
await tester.pump(const Duration(milliseconds: 200));
|
|
|
|
final ScrollMetrics metrics = FixedScrollMetrics(
|
|
minScrollExtent: 0.0,
|
|
maxScrollExtent: 0.0,
|
|
pixels: 0.0,
|
|
viewportDimension: 100.0,
|
|
axisDirection: AxisDirection.down);
|
|
scrollPainter.update(metrics, AxisDirection.down);
|
|
|
|
final List<Invocation> invocations = <Invocation>[];
|
|
final TestCanvas canvas = TestCanvas(invocations);
|
|
scrollPainter.paint(canvas, const Size(10.0, 100.0));
|
|
final Rect thumbRect = invocations.single.positionalArguments[0];
|
|
expect(thumbRect.isFinite, isTrue);
|
|
});
|
|
|
|
// TODO(flutter_web): Renable, Web doesn't support Platform.iOS yet.
|
|
// testWidgets('Adaptive scrollbar', (WidgetTester tester) async {
|
|
// Widget viewWithScroll(TargetPlatform platform) {
|
|
// return Directionality(
|
|
// textDirection: TextDirection.ltr,
|
|
// child: Theme(
|
|
// data: ThemeData(
|
|
// platform: platform
|
|
// ),
|
|
// child: Scrollbar(
|
|
// child: SingleChildScrollView(
|
|
// child: const SizedBox(width: 4000.0, height: 4000.0),
|
|
// ),
|
|
// ),
|
|
// ),
|
|
// );
|
|
// }
|
|
//
|
|
// await tester.pumpWidget(viewWithScroll(TargetPlatform.android));
|
|
// await tester.drag(find.byType(SingleChildScrollView), const Offset(0.0, -10.0));
|
|
// await tester.pump();
|
|
// // Scrollbar fully showing
|
|
// await tester.pump(const Duration(milliseconds: 500));
|
|
// expect(find.byType(Scrollbar), paints..rect());
|
|
//
|
|
// await tester.pumpWidget(viewWithScroll(TargetPlatform.iOS));
|
|
// final TestGesture gesture = await tester.startGesture(
|
|
// tester.getCenter(find.byType(SingleChildScrollView))
|
|
// );
|
|
// await gesture.moveBy(const Offset(0.0, -10.0));
|
|
// await tester.drag(find.byType(SingleChildScrollView), const Offset(0.0, -10.0));
|
|
// await tester.pump();
|
|
// await tester.pump(const Duration(milliseconds: 200));
|
|
// expect(find.byType(Scrollbar), paints..rrect());
|
|
// });
|
|
}
|