// Copyright 2021 The Flutter team. 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 'animations.dart'; class RailTransition extends StatefulWidget { const RailTransition({ super.key, required this.animation, required this.backgroundColor, required this.child, }); final Animation animation; final Widget child; final Color backgroundColor; @override State createState() => _RailTransition(); } class _RailTransition extends State { late Animation offsetAnimation; late Animation widthAnimation; @override void didChangeDependencies() { super.didChangeDependencies(); // The animations are only rebuilt by this method when the text // direction changes because this widget only depends on Directionality. final bool ltr = Directionality.of(context) == TextDirection.ltr; widthAnimation = Tween( begin: 0, end: 1, ).animate(SizeAnimation(widget.animation)); offsetAnimation = Tween( begin: ltr ? const Offset(-1, 0) : const Offset(1, 0), end: Offset.zero, ).animate(OffsetAnimation(widget.animation)); } @override Widget build(BuildContext context) { return ClipRect( child: DecoratedBox( decoration: BoxDecoration(color: widget.backgroundColor), child: Align( alignment: Alignment.topLeft, widthFactor: widthAnimation.value, child: FractionalTranslation( translation: offsetAnimation.value, child: widget.child, ), ), ), ); } }