2025-11-10 23:55:41 +00:00
|
|
|
import 'package:flutter/material.dart';
|
|
|
|
|
|
|
|
|
|
/// Responsive utilities for different screen sizes
|
|
|
|
|
class Responsive {
|
|
|
|
|
/// Mobile: < 600px
|
|
|
|
|
static bool isMobile(BuildContext context) =>
|
|
|
|
|
MediaQuery.of(context).size.width < 600;
|
|
|
|
|
|
|
|
|
|
/// Tablet: 600px - 1200px
|
|
|
|
|
static bool isTablet(BuildContext context) =>
|
|
|
|
|
MediaQuery.of(context).size.width >= 600 &&
|
|
|
|
|
MediaQuery.of(context).size.width < 1200;
|
|
|
|
|
|
|
|
|
|
/// Desktop: >= 1200px
|
|
|
|
|
static bool isDesktop(BuildContext context) =>
|
|
|
|
|
MediaQuery.of(context).size.width >= 1200;
|
|
|
|
|
|
|
|
|
|
/// Get maximum content width based on screen size
|
|
|
|
|
static double getMaxWidth(BuildContext context) {
|
|
|
|
|
if (isDesktop(context)) return 1200;
|
|
|
|
|
if (isTablet(context)) return 900;
|
|
|
|
|
return double.infinity;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/// Get grid cross axis count based on screen size
|
|
|
|
|
static int getGridCrossAxisCount(BuildContext context) {
|
|
|
|
|
if (isDesktop(context)) return 4;
|
|
|
|
|
if (isTablet(context)) return 3;
|
|
|
|
|
return 2;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/// Get responsive padding
|
|
|
|
|
static EdgeInsets getPagePadding(BuildContext context) {
|
|
|
|
|
if (isDesktop(context)) {
|
|
|
|
|
return const EdgeInsets.symmetric(horizontal: 32, vertical: 24);
|
|
|
|
|
}
|
|
|
|
|
if (isTablet(context)) {
|
|
|
|
|
return const EdgeInsets.symmetric(horizontal: 24, vertical: 16);
|
|
|
|
|
}
|
|
|
|
|
return const EdgeInsets.all(16);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/// Widget that constrains content width for better readability on large screens
|
|
|
|
|
class ResponsiveCenter extends StatelessWidget {
|
2025-12-20 18:26:15 +00:00
|
|
|
const ResponsiveCenter({required this.child, super.key});
|
2025-11-10 23:55:41 +00:00
|
|
|
|
|
|
|
|
final Widget child;
|
|
|
|
|
|
|
|
|
|
@override
|
|
|
|
|
Widget build(BuildContext context) {
|
|
|
|
|
return Center(
|
|
|
|
|
child: ConstrainedBox(
|
2025-12-20 18:26:15 +00:00
|
|
|
constraints: BoxConstraints(maxWidth: Responsive.getMaxWidth(context)),
|
2025-11-10 23:55:41 +00:00
|
|
|
child: child,
|
|
|
|
|
),
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
}
|