check web and tablet for logic

This commit is contained in:
amirrezaghabeli
2025-08-23 15:22:28 +03:30
parent b00ba07122
commit 14ab9a75ca
27 changed files with 569 additions and 282 deletions
+60 -32
View File
@@ -1,8 +1,5 @@
import 'package:flutter/material.dart';
import 'package:flutter_svg/flutter_svg.dart';
import 'package:provider/provider.dart';
import 'package:tm_app/core/constants/assets.dart';
import 'package:tm_app/core/constants/strings.dart';
import 'package:tm_app/core/theme/colors.dart';
import 'package:tm_app/core/utils/size_config.dart';
import 'package:tm_app/view_models/tender_detail_view_model.dart';
@@ -10,15 +7,73 @@ import 'package:tm_app/views/detail/widgets/tender_detail_action.dart';
import 'package:tm_app/views/detail/widgets/tender_detail_card.dart';
import 'package:tm_app/views/detail/widgets/tender_detail_header.dart';
class TenderDetailDesktopPage extends StatelessWidget {
class TenderDetailDesktopPage extends StatefulWidget {
final String tenderId;
const TenderDetailDesktopPage({required this.tenderId, super.key});
@override
State<TenderDetailDesktopPage> createState() =>
_TenderDetailDesktopPageState();
}
class _TenderDetailDesktopPageState extends State<TenderDetailDesktopPage> {
late final TenderDetailViewModel viewModel;
@override
void initState() {
viewModel = context.read<TenderDetailViewModel>();
viewModel.addListener(_viewModelListener);
super.initState();
}
void _viewModelListener() {
if (viewModel.status.isNotEmpty &&
viewModel.status == 'approved' &&
viewModel.approvalStatus == true) {
ScaffoldMessenger.of(
context,
).showSnackBar(SnackBar(content: Text('tender approved successfully!')));
}
if (viewModel.status.isNotEmpty &&
viewModel.status == 'unapproved' &&
viewModel.approvalStatus == true) {
ScaffoldMessenger.of(context).showSnackBar(
SnackBar(content: Text('tender approve removed sucessfully!')),
);
}
if (viewModel.status.isNotEmpty &&
viewModel.status == 'rejected' &&
viewModel.approvalStatus == true) {
ScaffoldMessenger.of(
context,
).showSnackBar(SnackBar(content: Text('tender rejected sucessfully!')));
}
if (viewModel.status.isNotEmpty &&
viewModel.status == 'unrejected' &&
viewModel.approvalStatus == true) {
ScaffoldMessenger.of(context).showSnackBar(
SnackBar(content: Text('tender reject removed sucessfully!')),
);
}
// if (viewModel.errorMessage != null) {
// ScaffoldMessenger.of(context).showSnackBar(
// SnackBar(
// backgroundColor: AppColors.errorColor,
// content: Text(viewModel.errorMessage!),
// ),
// );
// }
}
@override
void dispose() {
viewModel.removeListener(_viewModelListener);
super.dispose();
}
@override
Widget build(BuildContext context) {
return Scaffold(
backgroundColor: AppColors.backgroundColor,
appBar: _buildAppBar(context),
body: Consumer<TenderDetailViewModel>(
builder: (context, tenderViewModel, child) {
if (tenderViewModel.isLoading) {
@@ -60,31 +115,4 @@ class TenderDetailDesktopPage extends StatelessWidget {
),
);
}
PreferredSizeWidget _buildAppBar(BuildContext context) {
return PreferredSize(
preferredSize: const Size.fromHeight(60),
child: AppBar(
backgroundColor: AppColors.backgroundColor,
elevation: 0,
titleSpacing: 0,
leading: IconButton(
icon: SvgPicture.asset(
AssetsManager.arrowLeft,
height: 24.0.w(),
width: 24.0.w(),
),
onPressed: () => Navigator.pop(context),
),
title: Text(
AppStrings.tenderDetailTitle,
style: TextStyle(
color: AppColors.grey70,
fontWeight: FontWeight.w600,
fontSize: 20.0.sp(),
),
),
),
);
}
}
+59 -1
View File
@@ -10,10 +10,68 @@ import 'package:tm_app/views/detail/widgets/tender_detail_action.dart';
import 'package:tm_app/views/detail/widgets/tender_detail_card.dart';
import 'package:tm_app/views/detail/widgets/tender_detail_header.dart';
class TenderDetailTabletPage extends StatelessWidget {
class TenderDetailTabletPage extends StatefulWidget {
final String tenderId;
const TenderDetailTabletPage({required this.tenderId, super.key});
@override
State<TenderDetailTabletPage> createState() => _TenderDetailTabletPageState();
}
class _TenderDetailTabletPageState extends State<TenderDetailTabletPage> {
late final TenderDetailViewModel viewModel;
@override
void initState() {
viewModel = context.read<TenderDetailViewModel>();
viewModel.addListener(_viewModelListener);
super.initState();
}
void _viewModelListener() {
if (viewModel.status.isNotEmpty &&
viewModel.status == 'approved' &&
viewModel.approvalStatus == true) {
ScaffoldMessenger.of(
context,
).showSnackBar(SnackBar(content: Text('tender approved successfully!')));
}
if (viewModel.status.isNotEmpty &&
viewModel.status == 'unapproved' &&
viewModel.approvalStatus == true) {
ScaffoldMessenger.of(context).showSnackBar(
SnackBar(content: Text('tender approve removed sucessfully!')),
);
}
if (viewModel.status.isNotEmpty &&
viewModel.status == 'rejected' &&
viewModel.approvalStatus == true) {
ScaffoldMessenger.of(
context,
).showSnackBar(SnackBar(content: Text('tender rejected sucessfully!')));
}
if (viewModel.status.isNotEmpty &&
viewModel.status == 'unrejected' &&
viewModel.approvalStatus == true) {
ScaffoldMessenger.of(context).showSnackBar(
SnackBar(content: Text('tender reject removed sucessfully!')),
);
}
// if (viewModel.errorMessage != null) {
// ScaffoldMessenger.of(context).showSnackBar(
// SnackBar(
// backgroundColor: AppColors.errorColor,
// content: Text(viewModel.errorMessage!),
// ),
// );
// }
}
@override
void dispose() {
viewModel.removeListener(_viewModelListener);
super.dispose();
}
@override
Widget build(BuildContext context) {
return Scaffold(