Fixed size on web and changed details design button in desktop and tablet

This commit is contained in:
llsajjad
2025-08-09 16:55:29 +03:30
parent 080125b851
commit e468ec9c43
11 changed files with 225 additions and 185 deletions
@@ -13,6 +13,8 @@ class TenderDetailDesktopPage extends StatelessWidget {
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
SizeConfig.init(context);
return Scaffold( return Scaffold(
backgroundColor: AppColors.backgroundColor, backgroundColor: AppColors.backgroundColor,
appBar: _buildAppBar(context), appBar: _buildAppBar(context),
@@ -25,11 +27,11 @@ class TenderDetailDesktopPage extends StatelessWidget {
child: Column( child: Column(
crossAxisAlignment: CrossAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start,
children: [ children: [
TenderDetailHeader(isBig: true), TenderDetailHeader(isScreenBig: true),
SizedBox(height: 24.0.h()), SizedBox(height: 24.0.h()),
const TenderDetailCard(), const TenderDetailCard(),
SizedBox(height: 24.0.h()), SizedBox(height: 24.0.h()),
TenderDetailActions(), TenderDetailActions(isScreenBig: true),
], ],
), ),
), ),
@@ -22,11 +22,11 @@ class TenderDetailMobilePage extends StatelessWidget {
child: Column( child: Column(
crossAxisAlignment: CrossAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start,
children: [ children: [
TenderDetailHeader(isBig: false), TenderDetailHeader(isScreenBig: false),
SizedBox(height: 24.0.h()), SizedBox(height: 24.0.h()),
const TenderDetailCard(), const TenderDetailCard(),
SizedBox(height: 24.0.h()), SizedBox(height: 24.0.h()),
TenderDetailActions(), TenderDetailActions(isScreenBig: false,),
], ],
), ),
), ),
@@ -25,11 +25,11 @@ class TenderDetailTabletPage extends StatelessWidget {
child: Column( child: Column(
crossAxisAlignment: CrossAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start,
children: [ children: [
TenderDetailHeader(isBig: true), TenderDetailHeader(isScreenBig: true),
SizedBox(height: 24.0.h()), SizedBox(height: 24.0.h()),
const TenderDetailCard(), const TenderDetailCard(),
SizedBox(height: 24.0.h()), SizedBox(height: 24.0.h()),
TenderDetailActions(), TenderDetailActions(isScreenBig: true,),
], ],
), ),
), ),
+12 -4
View File
@@ -8,15 +8,22 @@ class DeadlineItem extends StatelessWidget {
final String approvalDate; final String approvalDate;
final String submissionText; final String submissionText;
final String submissionDate; final String submissionDate;
final bool isBig; final bool isScreenBig;
const DeadlineItem({ const DeadlineItem({
required this.title, required this.approvalText, required this.approvalDate, required this.submissionText, required this.submissionDate, required this.isBig, super.key, required this.title,
required this.approvalText,
required this.approvalDate,
required this.submissionText,
required this.submissionDate,
required this.isScreenBig,
super.key,
}); });
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
return isBig ? Padding( return isScreenBig
? Padding(
padding: EdgeInsets.symmetric(vertical: 0), padding: EdgeInsets.symmetric(vertical: 0),
child: Column( child: Column(
crossAxisAlignment: CrossAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start,
@@ -95,7 +102,8 @@ class DeadlineItem extends StatelessWidget {
const Divider(), const Divider(),
], ],
), ),
) : Padding( )
: Padding(
padding: EdgeInsets.symmetric(vertical: 0), padding: EdgeInsets.symmetric(vertical: 0),
child: Column( child: Column(
crossAxisAlignment: CrossAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start,
@@ -5,11 +5,36 @@ import 'package:tm_app/core/utils/size_config.dart';
import 'package:tm_app/views/login/widgets/login_button.dart'; import 'package:tm_app/views/login/widgets/login_button.dart';
class TenderDetailActions extends StatelessWidget { class TenderDetailActions extends StatelessWidget {
const TenderDetailActions({super.key}); final bool isScreenBig;
const TenderDetailActions({required this.isScreenBig, super.key});
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
return Column( return isScreenBig
? Row(
children: [
Spacer(),
BaseButton(
isEnabled: true,
text: AppStrings.tenderRejectButton,
textColor: AppColors.red10,
backgroundColor: AppColors.backgroundColor,
borderWidth: 1,
onPressed: () {},
width: 120.0.w(),
),
SizedBox(width: 5.0.w()),
BaseButton(
isEnabled: true,
text: AppStrings.tenderSubmitButton,
backgroundColor: AppColors.lightBlue,
textColor: AppColors.mainBlue,
onPressed: () {},
width: 120.0.w(),
),
],
)
: Column(
children: [ children: [
BaseButton( BaseButton(
isEnabled: true, isEnabled: true,
@@ -8,8 +8,8 @@ import 'package:tm_app/views/detail/widgets/tender_document_section.dart';
import 'package:tm_app/views/detail/widgets/tender_location_section.dart'; import 'package:tm_app/views/detail/widgets/tender_location_section.dart';
class TenderDetailHeader extends StatelessWidget { class TenderDetailHeader extends StatelessWidget {
final bool isBig; final bool isScreenBig;
const TenderDetailHeader({required this.isBig, super.key}); const TenderDetailHeader({required this.isScreenBig, super.key});
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
@@ -29,7 +29,7 @@ class TenderDetailHeader extends StatelessWidget {
SizedBox(height: 10.0.h()), SizedBox(height: 10.0.h()),
const Divider(), const Divider(),
SizedBox(height: 5.0.h()), SizedBox(height: 5.0.h()),
TenderDetailInfoSection(isBig: isBig,), TenderDetailInfoSection(isScreenBig: isScreenBig),
TenderLocationSection(), TenderLocationSection(),
SizedBox(height: 16.0.h()), SizedBox(height: 16.0.h()),
TenderDocumentSection(), TenderDocumentSection(),
@@ -4,9 +4,9 @@ import 'package:tm_app/views/detail/widgets/deadline_item.dart';
import 'package:tm_app/views/detail/widgets/info_item.dart'; import 'package:tm_app/views/detail/widgets/info_item.dart';
class TenderDetailInfoSection extends StatelessWidget { class TenderDetailInfoSection extends StatelessWidget {
final bool isBig; final bool isScreenBig;
const TenderDetailInfoSection({required this.isBig ,super.key}); const TenderDetailInfoSection({required this.isScreenBig, super.key});
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
@@ -22,7 +22,8 @@ class TenderDetailInfoSection extends StatelessWidget {
approvalText: AppStrings.tenderApprovalText, approvalText: AppStrings.tenderApprovalText,
approvalDate: AppStrings.tenderApprovalDateExample, approvalDate: AppStrings.tenderApprovalDateExample,
submissionText: AppStrings.tenderSubmissionText, submissionText: AppStrings.tenderSubmissionText,
submissionDate: AppStrings.tenderSubmissionDateExample, isBig: isBig, submissionDate: AppStrings.tenderSubmissionDateExample,
isScreenBig: isScreenBig,
), ),
InfoItem( InfoItem(
title: AppStrings.tenderClientLabel, title: AppStrings.tenderClientLabel,
@@ -6,8 +6,8 @@ import 'package:tm_app/core/theme/colors.dart';
import '../../../core/constants/assets.dart'; import '../../../core/constants/assets.dart';
import '../../../core/constants/strings.dart'; import '../../../core/constants/strings.dart';
import '../../../core/utils/size_config.dart'; import '../../../core/utils/size_config.dart';
import '../widgets/widgets.dart';
import '../../../view_models/login_view_model.dart'; import '../../../view_models/login_view_model.dart';
import '../widgets/widgets.dart';
class LoginDesktopPage extends StatefulWidget { class LoginDesktopPage extends StatefulWidget {
const LoginDesktopPage({super.key}); const LoginDesktopPage({super.key});
@@ -40,7 +40,7 @@ class _LoginDesktopPageState extends State<LoginDesktopPage> {
child: SingleChildScrollView( child: SingleChildScrollView(
padding: EdgeInsets.symmetric(horizontal: 24.0.w()), padding: EdgeInsets.symmetric(horizontal: 24.0.w()),
child: SizedBox( child: SizedBox(
width: 120.0.w(), width: 526,
child: ListenableBuilder( child: ListenableBuilder(
listenable: _viewModel, listenable: _viewModel,
builder: (context, _) { builder: (context, _) {
@@ -79,7 +79,8 @@ class _LoginDesktopPageState extends State<LoginDesktopPage> {
BaseButton( BaseButton(
isEnabled: _viewModel.isLoginEnabled, isEnabled: _viewModel.isLoginEnabled,
onPressed: _viewModel.isLoginEnabled onPressed:
_viewModel.isLoginEnabled
? () => HomeRouteData().go(context) ? () => HomeRouteData().go(context)
: null, : null,
), ),
+4 -3
View File
@@ -6,8 +6,8 @@ import 'package:tm_app/core/theme/colors.dart';
import '../../../core/constants/assets.dart'; import '../../../core/constants/assets.dart';
import '../../../core/constants/strings.dart'; import '../../../core/constants/strings.dart';
import '../../../core/utils/size_config.dart'; import '../../../core/utils/size_config.dart';
import '../widgets/widgets.dart';
import '../../../view_models/login_view_model.dart'; import '../../../view_models/login_view_model.dart';
import '../widgets/widgets.dart';
class LoginTabletPage extends StatefulWidget { class LoginTabletPage extends StatefulWidget {
const LoginTabletPage({super.key}); const LoginTabletPage({super.key});
@@ -40,7 +40,7 @@ class _LoginTabletPageState extends State<LoginTabletPage> {
child: SingleChildScrollView( child: SingleChildScrollView(
padding: EdgeInsets.symmetric(horizontal: 24.0.w()), padding: EdgeInsets.symmetric(horizontal: 24.0.w()),
child: SizedBox( child: SizedBox(
width: 120.0.w(), width: 526,
child: ListenableBuilder( child: ListenableBuilder(
listenable: _viewModel, listenable: _viewModel,
builder: (context, _) { builder: (context, _) {
@@ -79,7 +79,8 @@ class _LoginTabletPageState extends State<LoginTabletPage> {
BaseButton( BaseButton(
isEnabled: _viewModel.isLoginEnabled, isEnabled: _viewModel.isLoginEnabled,
onPressed: _viewModel.isLoginEnabled onPressed:
_viewModel.isLoginEnabled
? () => HomeRouteData().go(context) ? () => HomeRouteData().go(context)
: null, : null,
), ),
+3 -1
View File
@@ -14,6 +14,7 @@ class BaseButton extends StatelessWidget {
final double? borderWidth; final double? borderWidth;
final double? borderRadius; final double? borderRadius;
final double? elevation; final double? elevation;
final double? width;
const BaseButton({ const BaseButton({
required this.isEnabled, required this.isEnabled,
@@ -25,13 +26,14 @@ class BaseButton extends StatelessWidget {
this.borderWidth, this.borderWidth,
this.borderRadius, this.borderRadius,
this.elevation, this.elevation,
this.width,
super.key, super.key,
}); });
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
return SizedBox( return SizedBox(
width: double.infinity, width: width ?? double.infinity,
height: 55.0.h(), height: 55.0.h(),
child: ElevatedButton( child: ElevatedButton(
onPressed: isEnabled ? onPressed : null, onPressed: isEnabled ? onPressed : null,