mnemo_cards/mnemo_cards_web_v2/lib/utils/responsive.dart
Dmitry 0f49280805
Some checks are pending
Backend CI / test (push) Waiting to run
Backend CI / build (push) Blocked by required conditions
Mobile App CI / test (push) Waiting to run
Mobile App CI / build-android (push) Blocked by required conditions
Mobile App CI / build-ios (push) Blocked by required conditions
Web App CI / test (push) Waiting to run
Web App CI / build (push) Blocked by required conditions
Deploy Mnemo Cards / Deploy Backend (push) Waiting to run
Deploy Mnemo Cards / Deploy Web App (push) Blocked by required conditions
Deploy Mnemo Cards / Final Verification (push) Blocked by required conditions
Deploy Telegram Bot / Deploy Telegram Bot (push) Waiting to run
fixes and format
2025-12-20 21:26:15 +03:00

59 lines
1.7 KiB
Dart

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 {
const ResponsiveCenter({required this.child, super.key});
final Widget child;
@override
Widget build(BuildContext context) {
return Center(
child: ConstrainedBox(
constraints: BoxConstraints(maxWidth: Responsive.getMaxWidth(context)),
child: child,
),
);
}
}