Merge pull request 'folder structure changes' (#5) from folder_structure into main

Reviewed-on: https://repo.ravanertebat.com/TM/tm_app/pulls/5
This commit is contained in:
a.ghabeli
2025-08-03 10:51:06 +03:30
19 changed files with 185 additions and 13 deletions
View File
@@ -1,7 +1,7 @@
import 'package:flutter/material.dart';
import 'package:flutter_svg/svg.dart';
import 'size_config.dart';
import '../../core/utils/size_config.dart';
class BottomNavigation extends StatefulWidget {
const BottomNavigation({super.key});
-1
View File
@@ -24,7 +24,6 @@ class AppStrings {
//Home
static const String home = 'Home';
static const String partnership = 'Partnership';
static const String selfApply = 'Self-apply';
static const String contracting = 'Contracting';
+1 -1
View File
@@ -2,9 +2,9 @@
import 'package:flutter/material.dart';
import 'package:provider/provider.dart';
import 'core/utils/size_config.dart';
import 'data/repositories/auth_repository.dart';
import 'data/services/auth_service.dart';
import 'size_config.dart';
import 'view_models/auth_view_model.dart';
import 'views/login/login_screen.dart';
@@ -1,8 +1,8 @@
import 'package:flutter/material.dart';
import '../../../bottom_navigation.dart';
import '../../../core/constants/strings.dart';
import '../../../size_config.dart';
import '../../common/widgets/bottom_navigation.dart';
import '../../core/utils/size_config.dart';
import 'widgets.dart';
class Homescreen extends StatelessWidget {
+1 -1
View File
@@ -1,6 +1,6 @@
import 'package:flutter/material.dart';
import '../../size_config.dart';
import '../../core/utils/size_config.dart';
class ProgressBarColumn extends StatefulWidget {
const ProgressBarColumn({
+1 -1
View File
@@ -1,7 +1,7 @@
import 'package:flutter/material.dart';
import 'package:flutter_svg/svg.dart';
import '../../size_config.dart';
import '../../core/utils/size_config.dart';
class StatisticsCard extends StatelessWidget {
const StatisticsCard({
+1 -1
View File
@@ -1,7 +1,7 @@
import 'package:flutter/material.dart';
import 'package:flutter_svg/svg.dart';
import '../../size_config.dart';
import '../../core/utils/size_config.dart';
class TendersListItem extends StatelessWidget {
const TendersListItem({super.key});
+1 -1
View File
@@ -3,7 +3,7 @@ import 'package:flutter/material.dart';
import '../../core/constants/assets.dart';
import '../../core/constants/strings.dart';
import '../../size_config.dart';
import '../../core/utils/size_config.dart';
import 'widgets/widgets.dart';
class LoginScreen extends StatefulWidget {
+38
View File
@@ -0,0 +1,38 @@
import 'package:flutter/material.dart';
import '../../../core/constants/colors.dart';
import '../../../core/constants/strings.dart';
import '../../../core/utils/size_config.dart';
class LoginButton extends StatelessWidget {
final bool isEnabled;
final VoidCallback? onPressed;
const LoginButton({
super.key,
required this.isEnabled,
required this.onPressed,
});
@override
Widget build(BuildContext context) {
return SizedBox(
width: double.infinity,
height: 55.0.h(),
child: ElevatedButton(
onPressed: onPressed,
style: ElevatedButton.styleFrom(
backgroundColor: isEnabled ? AppColors.mainBlue : Colors.grey[300],
foregroundColor: Colors.white,
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(28.0.w()),
),
),
child: Text(
AppStrings.loginButton,
style: TextStyle(fontSize: 16.0.sp(), fontWeight: FontWeight.bold),
),
),
);
}
}
+13
View File
@@ -0,0 +1,13 @@
import 'package:flutter/material.dart';
import '../../../core/constants/assets.dart';
import '../../../core/utils/size_config.dart';
class LoginLogo extends StatelessWidget {
const LoginLogo({super.key});
@override
Widget build(BuildContext context) {
return Image.asset(AssetsManager.logo, width: 190.0.w(), height: 88.0.h());
}
}
@@ -0,0 +1,75 @@
import 'package:flutter/material.dart';
import 'package:flutter_svg/svg.dart';
import '../../../core/constants/assets.dart';
import '../../../core/constants/colors.dart';
import '../../../core/utils/size_config.dart';
class LoginTextField extends StatelessWidget {
final TextEditingController controller;
final FocusNode focusNode;
final String label;
final String iconPath;
final bool isPassword;
final bool obscureText;
final VoidCallback? onToggleVisibility;
const LoginTextField({
super.key,
required this.controller,
required this.focusNode,
required this.label,
required this.iconPath,
this.isPassword = false,
this.obscureText = false,
this.onToggleVisibility,
});
@override
Widget build(BuildContext context) {
return TextField(
controller: controller,
focusNode: focusNode,
obscureText: isPassword ? obscureText : false,
decoration: InputDecoration(
labelText: label,
prefixIcon: Padding(
padding: EdgeInsets.all(12.0.w()),
child: SvgPicture.asset(
iconPath,
width: 24.0.w(),
height: 24.0.h(),
colorFilter: ColorFilter.mode(
focusNode.hasFocus ? Colors.black87 : Colors.grey,
BlendMode.srcIn,
),
),
),
suffixIcon:
isPassword
? IconButton(
onPressed: onToggleVisibility,
icon: SvgPicture.asset(
obscureText
? AssetsManager.passwordVisibility
: AssetsManager.passwordVisibilityOff,
width: 24.0.w(),
height: 24.0.h(),
colorFilter: ColorFilter.mode(
focusNode.hasFocus ? Colors.black87 : Colors.grey,
BlendMode.srcIn,
),
),
)
: null,
border: OutlineInputBorder(
borderRadius: BorderRadius.circular(12.0.w()),
),
focusedBorder: OutlineInputBorder(
borderSide: BorderSide(color: AppColors.borderBlue),
borderRadius: BorderRadius.circular(12.0.w()),
),
),
);
}
}
+30
View File
@@ -0,0 +1,30 @@
import 'package:flutter/material.dart';
import '../../../core/constants/strings.dart';
import '../../../core/utils/size_config.dart';
class LoginTitle extends StatelessWidget {
const LoginTitle({super.key});
@override
Widget build(BuildContext context) {
return Column(
children: [
Text(
AppStrings.signInTitle,
style: TextStyle(fontSize: 28.0.sp(), fontWeight: FontWeight.w700),
),
SizedBox(height: 8.0.h()),
Text(
AppStrings.signInSubtitle,
style: TextStyle(
fontSize: 14.0.sp(),
fontWeight: FontWeight.w400,
color: Colors.grey,
),
textAlign: TextAlign.center,
),
],
);
}
}
+1 -1
View File
@@ -2,7 +2,7 @@ import 'package:flutter/material.dart';
import '../../../core/constants/colors.dart';
import '../../../core/constants/strings.dart';
import '../../../size_config.dart';
import '../../../core/utils/size_config.dart';
class LoginButton extends StatelessWidget {
final bool isEnabled;
+1 -1
View File
@@ -1,7 +1,7 @@
import 'package:flutter/material.dart';
import '../../../core/constants/assets.dart';
import '../../../size_config.dart';
import '../../../core/utils/size_config.dart';
class LoginLogo extends StatelessWidget {
const LoginLogo({super.key});
+1 -1
View File
@@ -3,7 +3,7 @@ import 'package:flutter_svg/svg.dart';
import '../../../core/constants/assets.dart';
import '../../../core/constants/colors.dart';
import '../../../size_config.dart';
import '../../../core/utils/size_config.dart';
class LoginTextField extends StatelessWidget {
final TextEditingController controller;
+1 -1
View File
@@ -1,7 +1,7 @@
import 'package:flutter/material.dart';
import '../../../core/constants/strings.dart';
import '../../../size_config.dart';
import '../../../core/utils/size_config.dart';
class LoginTitle extends StatelessWidget {
const LoginTitle({super.key});
+17
View File
@@ -0,0 +1,17 @@
import 'package:flutter/material.dart';
import '../../core/utils/size_config.dart';
class TendersScreen extends StatelessWidget {
const TendersScreen({super.key});
@override
Widget build(BuildContext context) {
return Scaffold(
body: Padding(
padding: EdgeInsets.symmetric(horizontal: 24.0.w(), vertical: 24.0.h()),
child: Column(children: [Text('Tenders')]),
),
);
}
}