fluffychat/lib/widgets/layouts/max_width_body.dart

63 lines
1.8 KiB
Dart
Raw Normal View History

2021-04-09 16:26:44 +00:00
import 'dart:math';
import 'package:flutter/material.dart';
import 'package:fluffychat/config/app_config.dart';
2021-04-09 16:26:44 +00:00
class MaxWidthBody extends StatelessWidget {
2021-11-19 19:28:17 +00:00
final Widget? child;
2021-04-09 16:26:44 +00:00
final double maxWidth;
final bool withFrame;
2021-04-09 16:26:44 +00:00
final bool withScrolling;
2024-01-07 09:43:51 +00:00
final EdgeInsets? innerPadding;
2021-04-09 16:26:44 +00:00
const MaxWidthBody({
this.child,
this.maxWidth = 600,
this.withFrame = true,
this.withScrolling = true,
2024-01-07 09:43:51 +00:00
this.innerPadding,
super.key,
});
2021-04-09 16:26:44 +00:00
@override
Widget build(BuildContext context) {
return SafeArea(
child: LayoutBuilder(
builder: (context, constraints) {
final paddingVal = max(0, (constraints.maxWidth - maxWidth) / 2);
final hasPadding = paddingVal > 0;
final padding = EdgeInsets.symmetric(
vertical: hasPadding ? 32 : 0,
horizontal: max(0, (constraints.maxWidth - maxWidth) / 2),
);
final childWithPadding = Padding(
padding: padding,
child: withFrame && hasPadding
? Material(
elevation:
Theme.of(context).appBarTheme.scrolledUnderElevation ??
4,
clipBehavior: Clip.hardEdge,
2024-01-07 09:43:51 +00:00
borderRadius: BorderRadius.circular(AppConfig.borderRadius),
shadowColor: Theme.of(context).appBarTheme.shadowColor,
child: child,
)
: child,
);
2024-01-07 09:43:51 +00:00
if (!withScrolling) {
return Padding(
padding: innerPadding ?? EdgeInsets.zero,
child: childWithPadding,
);
}
return SingleChildScrollView(
2024-01-07 09:43:51 +00:00
padding: innerPadding,
physics: const ScrollPhysics(),
child: childWithPadding,
);
},
),
2021-04-09 16:26:44 +00:00
);
}
}