import 'package:flutter/material.dart'; /// Wraps content with SafeArea and animated bottom padding based on keyboard. /// Use this to keep forms scrollable without Scaffold resizing. class KeyboardInsetWrapper extends StatelessWidget { final Widget child; final EdgeInsets basePadding; final double extraBottom; final Duration duration; final Curve curve; final bool safeAreaTop; final bool safeAreaBottom; const KeyboardInsetWrapper({ super.key, required this.child, this.basePadding = EdgeInsets.zero, this.extraBottom = 0, this.duration = const Duration(milliseconds: 180), this.curve = Curves.easeOut, this.safeAreaTop = true, this.safeAreaBottom = true, }); @override Widget build(BuildContext context) { final mediaQuery = MediaQuery.of(context); final bottomInset = mediaQuery.viewInsets.bottom; final padding = basePadding.add(EdgeInsets.only(bottom: bottomInset + extraBottom)); final applyBottomSafeArea = safeAreaBottom && bottomInset == 0; return SafeArea( top: safeAreaTop, bottom: applyBottomSafeArea, child: AnimatedPadding( duration: duration, curve: curve, padding: padding, child: child, ), ); } }