diff --git a/lib/common/models/.gitkeep b/lib/common/models/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/lib/bottom_navigation.dart b/lib/common/widgets/bottom_navigation.dart similarity index 98% rename from lib/bottom_navigation.dart rename to lib/common/widgets/bottom_navigation.dart index 1a8dba8..970137b 100644 --- a/lib/bottom_navigation.dart +++ b/lib/common/widgets/bottom_navigation.dart @@ -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}); diff --git a/lib/core/constants/strings.dart b/lib/core/constants/strings.dart index 7e9f5de..e08b27c 100644 --- a/lib/core/constants/strings.dart +++ b/lib/core/constants/strings.dart @@ -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'; diff --git a/lib/size_config.dart b/lib/core/utils/size_config.dart similarity index 100% rename from lib/size_config.dart rename to lib/core/utils/size_config.dart diff --git a/lib/main.dart b/lib/main.dart index dfaf797..b4402f8 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -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'; diff --git a/lib/views/home/home_page.dart b/lib/views/home/home_screen.dart similarity index 97% rename from lib/views/home/home_page.dart rename to lib/views/home/home_screen.dart index 987404a..49a04d7 100644 --- a/lib/views/home/home_page.dart +++ b/lib/views/home/home_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 { diff --git a/lib/views/home/progress_bar_column.dart b/lib/views/home/progress_bar_column.dart index ff9d5b6..c1554c3 100644 --- a/lib/views/home/progress_bar_column.dart +++ b/lib/views/home/progress_bar_column.dart @@ -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({ diff --git a/lib/views/home/statistics_card.dart b/lib/views/home/statistics_card.dart index 9090d33..d6aa597 100644 --- a/lib/views/home/statistics_card.dart +++ b/lib/views/home/statistics_card.dart @@ -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({ diff --git a/lib/views/home/tenders_list_item.dart b/lib/views/home/tenders_list_item.dart index decbabe..52a1203 100644 --- a/lib/views/home/tenders_list_item.dart +++ b/lib/views/home/tenders_list_item.dart @@ -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}); diff --git a/lib/views/login/login_screen.dart b/lib/views/login/login_screen.dart index ef2137b..3631fc6 100644 --- a/lib/views/login/login_screen.dart +++ b/lib/views/login/login_screen.dart @@ -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 { diff --git a/lib/views/login/widget/login_button.dart b/lib/views/login/widget/login_button.dart new file mode 100644 index 0000000..c8da53d --- /dev/null +++ b/lib/views/login/widget/login_button.dart @@ -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), + ), + ), + ); + } +} diff --git a/lib/views/login/widget/login_logo.dart b/lib/views/login/widget/login_logo.dart new file mode 100644 index 0000000..bfeecd5 --- /dev/null +++ b/lib/views/login/widget/login_logo.dart @@ -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()); + } +} diff --git a/lib/views/login/widget/login_textfield.dart b/lib/views/login/widget/login_textfield.dart new file mode 100644 index 0000000..4bc6f04 --- /dev/null +++ b/lib/views/login/widget/login_textfield.dart @@ -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()), + ), + ), + ); + } +} diff --git a/lib/views/login/widget/login_title.dart b/lib/views/login/widget/login_title.dart new file mode 100644 index 0000000..174a936 --- /dev/null +++ b/lib/views/login/widget/login_title.dart @@ -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, + ), + ], + ); + } +} diff --git a/lib/views/login/widgets/login_button.dart b/lib/views/login/widgets/login_button.dart index 09cd44f..c8da53d 100644 --- a/lib/views/login/widgets/login_button.dart +++ b/lib/views/login/widgets/login_button.dart @@ -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; diff --git a/lib/views/login/widgets/login_logo.dart b/lib/views/login/widgets/login_logo.dart index 70ba9e9..bfeecd5 100644 --- a/lib/views/login/widgets/login_logo.dart +++ b/lib/views/login/widgets/login_logo.dart @@ -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}); diff --git a/lib/views/login/widgets/login_textfield.dart b/lib/views/login/widgets/login_textfield.dart index 59a6e36..4bc6f04 100644 --- a/lib/views/login/widgets/login_textfield.dart +++ b/lib/views/login/widgets/login_textfield.dart @@ -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; diff --git a/lib/views/login/widgets/login_title.dart b/lib/views/login/widgets/login_title.dart index 87089a2..174a936 100644 --- a/lib/views/login/widgets/login_title.dart +++ b/lib/views/login/widgets/login_title.dart @@ -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}); diff --git a/lib/views/tenders/tenders_screen.dart b/lib/views/tenders/tenders_screen.dart new file mode 100644 index 0000000..cd24651 --- /dev/null +++ b/lib/views/tenders/tenders_screen.dart @@ -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')]), + ), + ); + } +}