import 'dart:math' as math; import 'package:flutter/material.dart'; import 'package:photos/ente_theme_data.dart'; class DynamicFAB extends StatelessWidget { final bool isKeypadOpen; final bool isFormValid; final String buttonText; final Function onPressedFunction; DynamicFAB({ Key key, this.isKeypadOpen, this.buttonText, this.isFormValid, this.onPressedFunction, }) : super(key: key); @override Widget build(BuildContext context) { if (isKeypadOpen) { return Container( decoration: BoxDecoration( boxShadow: [ BoxShadow( color: Theme.of(context).backgroundColor, spreadRadius: 200, blurRadius: 100, offset: Offset(0, 230), ) ], ), width: double.infinity, child: Row( mainAxisAlignment: MainAxisAlignment.end, children: [ FloatingActionButton( heroTag: 'FAB', backgroundColor: Theme.of(context).colorScheme.dynamicFABBackgroundColor, foregroundColor: Theme.of(context).colorScheme.dynamicFABTextColor, child: Transform.rotate( angle: isFormValid ? 0 : math.pi / 2, child: Icon( Icons.chevron_right, size: 36, ), ), onPressed: isFormValid ? onPressedFunction : () { FocusScope.of(context).unfocus(); }, //keypad down here ), ], ), ); } else { return Container( width: double.infinity, height: 56, padding: EdgeInsets.symmetric(horizontal: 20), child: OutlinedButton( onPressed: isFormValid //var here ? onPressedFunction : null, child: Text(buttonText), ), ); } } } class NoScalingAnimation extends FloatingActionButtonAnimator { @override Offset getOffset({Offset begin, Offset end, double progress}) { return end; } @override Animation getRotationAnimation({Animation parent}) { return Tween(begin: 1.0, end: 1.0).animate(parent); } @override Animation getScaleAnimation({Animation parent}) { return Tween(begin: 1.0, end: 1.0).animate(parent); } }