home responsive and some changes

This commit is contained in:
amirrezaghabeli
2025-08-09 08:18:05 +03:30
parent 4179a0b292
commit eaa9ef18c2
16 changed files with 634 additions and 210 deletions
+56
View File
@@ -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();
}
}
+1 -1
View File
@@ -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(