blob: 2a931a97b87d29b45b902c33ea811887c2decf1d [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 'dart:ui';
import 'package:flutter/material.dart';
import 'package:flutter_api_samples/widgets/implicit_animations/animated_fractionally_sized_box.0.dart'
as example;
import 'package:flutter_test/flutter_test.dart';
void main() {
testWidgets(
'AnimatedFractionallySizedBox animates on tap',
(WidgetTester tester) async {
await tester.pumpWidget(
const example.AnimatedFractionallySizedBoxExampleApp(),
);
final Finder fractionallySizedBoxFinder = find.descendant(
of: find.byType(AnimatedFractionallySizedBox),
matching: find.byType(FractionallySizedBox),
);
const double beginWidthFactor = 0.75;
const double endWidthFactor = 0.25;
const double beginHeightFactor = 0.25;
const double endHeightFactor = 0.75;
const Alignment beginAlignment = Alignment.bottomRight;
const Alignment endAlignment = Alignment.topLeft;
FractionallySizedBox fractionallySizedBox = tester.widget(
fractionallySizedBoxFinder,
);
expect(fractionallySizedBox.widthFactor, beginWidthFactor);
expect(fractionallySizedBox.heightFactor, beginHeightFactor);
expect(fractionallySizedBox.alignment, beginAlignment);
// Tap on the AnimatedFractionallySizedBoxExample to start the forward
// animation.
await tester.tap(
find.byType(example.AnimatedFractionallySizedBoxExample),
);
await tester.pump();
fractionallySizedBox = tester.widget(fractionallySizedBoxFinder);
expect(fractionallySizedBox.widthFactor, beginWidthFactor);
expect(fractionallySizedBox.heightFactor, beginHeightFactor);
expect(fractionallySizedBox.alignment, beginAlignment);
// Advance animation to the middle.
await tester.pump(
example.AnimatedFractionallySizedBoxExampleApp.duration ~/ 2,
);
final double t =
example.AnimatedFractionallySizedBoxExampleApp.curve.transform(0.5);
fractionallySizedBox = tester.widget(fractionallySizedBoxFinder);
expect(
fractionallySizedBox.widthFactor,
lerpDouble(beginWidthFactor, endWidthFactor, t),
);
expect(
fractionallySizedBox.heightFactor,
lerpDouble(beginHeightFactor, endHeightFactor, t),
);
expect(
fractionallySizedBox.alignment,
Alignment.lerp(beginAlignment, endAlignment, t),
);
// Advance animation to the end.
await tester.pump(
example.AnimatedFractionallySizedBoxExampleApp.duration ~/ 2,
);
fractionallySizedBox = tester.widget(fractionallySizedBoxFinder);
expect(fractionallySizedBox.widthFactor, endWidthFactor);
expect(fractionallySizedBox.heightFactor, endHeightFactor);
expect(fractionallySizedBox.alignment, endAlignment);
// Tap on the AnimatedFractionallySizedBoxExample again to start the
// reverse animation.
await tester.tap(
find.byType(example.AnimatedFractionallySizedBoxExample),
);
await tester.pump();
fractionallySizedBox = tester.widget(fractionallySizedBoxFinder);
expect(fractionallySizedBox.widthFactor, endWidthFactor);
expect(fractionallySizedBox.heightFactor, endHeightFactor);
expect(fractionallySizedBox.alignment, endAlignment);
// Advance animation to the middle.
await tester.pump(
example.AnimatedFractionallySizedBoxExampleApp.duration ~/ 2,
);
fractionallySizedBox = tester.widget(fractionallySizedBoxFinder);
expect(
fractionallySizedBox.widthFactor,
lerpDouble(endWidthFactor, beginWidthFactor, t),
);
expect(
fractionallySizedBox.heightFactor,
lerpDouble(endHeightFactor, beginHeightFactor, t),
);
expect(
fractionallySizedBox.alignment,
Alignment.lerp(endAlignment, beginAlignment, t),
);
// Advance animation to the end.
await tester.pump(
example.AnimatedFractionallySizedBoxExampleApp.duration ~/ 2,
);
fractionallySizedBox = tester.widget(fractionallySizedBoxFinder);
expect(fractionallySizedBox.widthFactor, beginWidthFactor);
expect(fractionallySizedBox.heightFactor, beginHeightFactor);
expect(fractionallySizedBox.alignment, beginAlignment);
},
);
}