mirror of
https://github.com/alibaba/flutter-go.git
synced 2025-07-14 18:02:49 +08:00
Add:创建 flutter go web 版
This commit is contained in:
143
packages/flutter_web/test/material/scrollbar_test.dart
Normal file
143
packages/flutter_web/test/material/scrollbar_test.dart
Normal file
@ -0,0 +1,143 @@
|
||||
// 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());
|
||||
// });
|
||||
}
|
Reference in New Issue
Block a user