95 lines
3.0 KiB
Dart
95 lines
3.0 KiB
Dart
// 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/widgets.dart';
|
|
import 'package:flutter_test/flutter_test.dart';
|
|
|
|
class Foo extends StatefulWidget {
|
|
const Foo({ Key key }) : super(key: key);
|
|
@override
|
|
FooState createState() => FooState();
|
|
}
|
|
|
|
class FooState extends State<Foo> {
|
|
ScrollController scrollController = ScrollController();
|
|
|
|
@override
|
|
Widget build(BuildContext context) {
|
|
return LayoutBuilder(
|
|
builder: (BuildContext context, BoxConstraints constraints) {
|
|
return ScrollConfiguration(
|
|
behavior: FooScrollBehavior(),
|
|
child: ListView(
|
|
controller: scrollController,
|
|
children: <Widget>[
|
|
GestureDetector(
|
|
onTap: () {
|
|
setState(() { /* this is needed to trigger the original bug this is regression-testing */ });
|
|
scrollController.animateTo(200.0, duration: const Duration(milliseconds: 500), curve: Curves.linear);
|
|
},
|
|
child: const DecoratedBox(
|
|
decoration: BoxDecoration(color: Color(0x00000000)),
|
|
child: SizedBox(
|
|
height: 200.0,
|
|
),
|
|
),
|
|
),
|
|
const DecoratedBox(
|
|
decoration: BoxDecoration(color: Color(0x00000000)),
|
|
child: SizedBox(
|
|
height: 200.0,
|
|
),
|
|
),
|
|
const DecoratedBox(
|
|
decoration: BoxDecoration(color: Color(0x00000000)),
|
|
child: SizedBox(
|
|
height: 200.0,
|
|
),
|
|
),
|
|
const DecoratedBox(
|
|
decoration: BoxDecoration(color: Color(0x00000000)),
|
|
child: SizedBox(
|
|
height: 200.0,
|
|
),
|
|
),
|
|
const DecoratedBox(
|
|
decoration: BoxDecoration(color: Color(0x00000000)),
|
|
child: SizedBox(
|
|
height: 200.0,
|
|
),
|
|
),
|
|
const DecoratedBox(
|
|
decoration: BoxDecoration(color: Color(0x00000000)),
|
|
child: SizedBox(
|
|
height: 200.0,
|
|
),
|
|
),
|
|
],
|
|
),
|
|
);
|
|
}
|
|
);
|
|
}
|
|
}
|
|
|
|
class FooScrollBehavior extends ScrollBehavior {
|
|
@override
|
|
bool shouldNotify(FooScrollBehavior old) => true;
|
|
}
|
|
|
|
void main() {
|
|
testWidgets('Can animate scroll after setState', (WidgetTester tester) async {
|
|
await tester.pumpWidget(
|
|
const Directionality(
|
|
textDirection: TextDirection.ltr,
|
|
child: Foo(),
|
|
),
|
|
);
|
|
expect(tester.state<ScrollableState>(find.byType(Scrollable)).position.pixels, 0.0);
|
|
await tester.tap(find.byType(GestureDetector).first);
|
|
await tester.pumpAndSettle();
|
|
expect(tester.state<ScrollableState>(find.byType(Scrollable)).position.pixels, 200.0);
|
|
});
|
|
}
|