Files
Eventify-frontend/lib/screens/responsive_layout.dart

52 lines
1.7 KiB
Dart
Raw Normal View History

2026-01-31 15:23:18 +05:30
// lib/widgets/responsive_layout.dart
import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';
/// Simple responsive layout chooser.
///
/// Behavior:
/// - On desktop platforms (Windows / macOS / Linux) -> always use `desktop`.
/// - On web -> treat as desktop (tablet/desktop UI). If you want web to act
/// like mobile at very narrow widths, you can change that logic here.
/// - On mobile platforms (Android / iOS) -> use `mobile` when width < mobileBreakpoint,
/// otherwise use `desktop`.
///
/// Tablet uses the desktop UI by design (per your request).
class ResponsiveLayout extends StatelessWidget {
final Widget mobile;
final Widget desktop;
final double mobileBreakpoint;
const ResponsiveLayout({
Key? key,
required this.mobile,
required this.desktop,
this.mobileBreakpoint = 700, // tune this value if you prefer different breakpoint
}) : assert(mobileBreakpoint > 0),
super(key: key);
bool _isMobilePlatform() {
// kIsWeb is true for web builds.
if (kIsWeb) return false; // treat web as desktop/tablet by default
// defaultTargetPlatform works on Flutter (all non-web platforms).
return defaultTargetPlatform == TargetPlatform.android || defaultTargetPlatform == TargetPlatform.iOS;
}
bool _chooseMobile(BuildContext context) {
final width = MediaQuery.of(context).size.width;
// If running on Android/iOS, allow width to determine mobile vs desktop.
if (_isMobilePlatform()) {
return width < mobileBreakpoint;
}
// On desktop platforms (Windows/macOS/Linux) and on web, always use desktop UI.
return false;
}
@override
Widget build(BuildContext context) {
return _chooseMobile(context) ? mobile : desktop;
}
}