home responsive and some changes
This commit is contained in:
@@ -0,0 +1,56 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:tm_app/core/utils/breakpoints.dart';
|
||||
|
||||
/// A responsive builder widget that automatically switches between different
|
||||
/// layouts based on the current display size.
|
||||
///
|
||||
/// This widget can be used by all screens to handle responsive layouts.
|
||||
class ResponsiveBuilder extends StatelessWidget {
|
||||
/// The widget to display on extra small screens (mobile)
|
||||
final Widget? mobile;
|
||||
|
||||
/// The widget to display on small screens (tablet)
|
||||
final Widget? tablet;
|
||||
|
||||
/// The widget to display on large screens (desktop)
|
||||
final Widget? desktop;
|
||||
|
||||
/// A builder function that receives the current display size
|
||||
/// Use this when you want to handle the layout logic yourself
|
||||
final Widget Function(BuildContext context, DisplaySize? displaySize)?
|
||||
builder;
|
||||
|
||||
const ResponsiveBuilder({
|
||||
super.key,
|
||||
this.mobile,
|
||||
this.tablet,
|
||||
this.desktop,
|
||||
this.builder,
|
||||
}) : assert(
|
||||
builder != null || mobile != null,
|
||||
'Either builder or at least mobile layout must be provided',
|
||||
);
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
final size = MediaQuery.sizeOf(context);
|
||||
final displaySize = size.displaySize;
|
||||
|
||||
// If builder is provided, use it
|
||||
if (builder != null) {
|
||||
return builder!(context, displaySize);
|
||||
}
|
||||
|
||||
// Otherwise, use the appropriate widget based on display size
|
||||
return switch (displaySize) {
|
||||
DisplaySize.extraSmall => mobile ?? _defaultWidget(),
|
||||
DisplaySize.small => tablet ?? mobile ?? _defaultWidget(),
|
||||
DisplaySize.medium => desktop ?? mobile ?? _defaultWidget(),
|
||||
DisplaySize.large => desktop ?? mobile ?? _defaultWidget(),
|
||||
};
|
||||
}
|
||||
|
||||
Widget _defaultWidget() {
|
||||
return const SizedBox.shrink();
|
||||
}
|
||||
}
|
||||
@@ -4,7 +4,7 @@ import 'package:tm_app/core/constants/assets.dart';
|
||||
import 'package:tm_app/core/theme/colors.dart';
|
||||
import 'package:tm_app/core/utils/size_config.dart';
|
||||
|
||||
PreferredSize tenderAppBar({required String title}) {
|
||||
PreferredSize tenderMobileAppBar({required String title}) {
|
||||
return PreferredSize(
|
||||
preferredSize: Size.fromHeight(kToolbarHeight.h()),
|
||||
child: Container(
|
||||
|
||||
Reference in New Issue
Block a user