mirror of
https://github.com/flutter/flutter.git
synced 2026-02-20 02:29:02 +08:00
This requires all AnimationController objects to be given a TickerProvider, a class that can create the Ticker. It also provides some nice mixins for people who want to have their State provide a TickerProvider. And a schedulerTickerProvider for those cases where you just want to see your battery burn. Also, we now enforce destruction order for elements.
87 lines
2.9 KiB
Dart
87 lines
2.9 KiB
Dart
// Copyright 2015 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 'dart:async';
|
|
|
|
import 'package:flutter_test/flutter_test.dart';
|
|
import 'package:flutter/rendering.dart';
|
|
import 'package:flutter/widgets.dart';
|
|
|
|
void main() {
|
|
|
|
testWidgets('Can animate position data', (WidgetTester tester) async {
|
|
|
|
final RelativeRectTween rect = new RelativeRectTween(
|
|
begin: new RelativeRect.fromRect(
|
|
new Rect.fromLTRB(10.0, 20.0, 20.0, 30.0),
|
|
new Rect.fromLTRB(0.0, 10.0, 100.0, 110.0)
|
|
),
|
|
end: new RelativeRect.fromRect(
|
|
new Rect.fromLTRB(80.0, 90.0, 90.0, 100.0),
|
|
new Rect.fromLTRB(0.0, 10.0, 100.0, 110.0)
|
|
)
|
|
);
|
|
final AnimationController controller = new AnimationController(
|
|
duration: const Duration(seconds: 10),
|
|
vsync: tester,
|
|
);
|
|
final List<Size> sizes = <Size>[];
|
|
final List<Offset> positions = <Offset>[];
|
|
final GlobalKey key = new GlobalKey();
|
|
|
|
void recordMetrics() {
|
|
RenderBox box = key.currentContext.findRenderObject();
|
|
BoxParentData boxParentData = box.parentData;
|
|
sizes.add(box.size);
|
|
positions.add(boxParentData.offset);
|
|
}
|
|
|
|
await tester.pumpWidget(
|
|
new Center(
|
|
child: new Container(
|
|
height: 100.0,
|
|
width: 100.0,
|
|
child: new Stack(
|
|
children: <Widget>[
|
|
new PositionedTransition(
|
|
rect: rect.animate(controller),
|
|
child: new Container(
|
|
key: key
|
|
)
|
|
)
|
|
]
|
|
)
|
|
)
|
|
)
|
|
); // t=0
|
|
recordMetrics();
|
|
Completer<Null> completer = new Completer<Null>();
|
|
controller.forward().whenComplete(completer.complete);
|
|
expect(completer.isCompleted, isFalse);
|
|
await tester.pump(); // t=0 again
|
|
expect(completer.isCompleted, isFalse);
|
|
recordMetrics();
|
|
await tester.pump(const Duration(seconds: 1)); // t=1
|
|
expect(completer.isCompleted, isFalse);
|
|
recordMetrics();
|
|
await tester.pump(const Duration(seconds: 1)); // t=2
|
|
expect(completer.isCompleted, isFalse);
|
|
recordMetrics();
|
|
await tester.pump(const Duration(seconds: 3)); // t=5
|
|
expect(completer.isCompleted, isFalse);
|
|
recordMetrics();
|
|
await tester.pump(const Duration(seconds: 5)); // t=10
|
|
expect(completer.isCompleted, isFalse);
|
|
recordMetrics();
|
|
|
|
expect(sizes, equals(<Size>[const Size(10.0, 10.0), const Size(10.0, 10.0), const Size(10.0, 10.0), const Size(10.0, 10.0), const Size(10.0, 10.0), const Size(10.0, 10.0)]));
|
|
expect(positions, equals(<Offset>[const Offset(10.0, 10.0), const Offset(10.0, 10.0), const Offset(17.0, 17.0), const Offset(24.0, 24.0), const Offset(45.0, 45.0), const Offset(80.0, 80.0)]));
|
|
|
|
controller.stop();
|
|
await tester.pump();
|
|
expect(completer.isCompleted, isTrue);
|
|
});
|
|
|
|
}
|