From d029b5a3b1d2d9901d30dbb5659914ca41849db4 Mon Sep 17 00:00:00 2001 From: Komek Hayytnazarov Date: Tue, 23 Jul 2024 15:55:48 +0500 Subject: [PATCH] developed --- assets/images/header.png | Bin 0 -> 67279 bytes assets/svg/header.svg | 49 +++++++ lib/application/application.dart | 1 + .../bottom_navbar_cubit.dart | 12 ++ lib/configs/configs.dart | 3 +- lib/core/app/app.dart | 9 +- lib/core/constants/assets.dart | 6 +- lib/core/constants/colors.dart | 1 + lib/core/core.dart | 1 + lib/core/enums/enums.dart | 1 + lib/core/router/app_router.dart | 20 ++- .../remote/user_remote_data_source.dart | 18 ++- lib/di/cubits.dart | 11 ++ lib/di/di.dart | 3 +- lib/main.dart | 5 + lib/presentation/screens/login.dart | 63 ++++++--- lib/presentation/screens/orders.dart | 132 ++++++++++++++++++ lib/presentation/screens/root.dart | 83 +++++++++++ lib/presentation/screens/screens.dart | 1 + .../widgets/auth_error_dialog.dart | 50 +++++++ lib/presentation/widgets/bottom_navbar.dart | 53 +++++++ .../widgets/credential_failure_dialog.dart | 49 +++++++ lib/presentation/widgets/order_header.dart | 46 ++++++ .../widgets/successful_auth_dialog.dart | 55 ++++++++ lib/presentation/widgets/widgets.dart | 5 + 25 files changed, 641 insertions(+), 36 deletions(-) create mode 100644 assets/images/header.png create mode 100644 assets/svg/header.svg create mode 100644 lib/application/bottom_navbar_cubit/bottom_navbar_cubit.dart create mode 100644 lib/core/enums/enums.dart create mode 100644 lib/di/cubits.dart create mode 100644 lib/presentation/screens/orders.dart create mode 100644 lib/presentation/screens/root.dart create mode 100644 lib/presentation/widgets/auth_error_dialog.dart create mode 100644 lib/presentation/widgets/bottom_navbar.dart create mode 100644 lib/presentation/widgets/credential_failure_dialog.dart create mode 100644 lib/presentation/widgets/order_header.dart create mode 100644 lib/presentation/widgets/successful_auth_dialog.dart diff --git a/assets/images/header.png b/assets/images/header.png new file mode 100644 index 0000000000000000000000000000000000000000..a8ed4aeaa914a98c5d7ac293d383c852084662c3 GIT binary patch literal 67279 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 qKU=?xhu-h!fl{YVVyE&fDCsQ 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 FV1io>!lwWL literal 0 HcmV?d00001 diff --git a/assets/svg/header.svg b/assets/svg/header.svg new file mode 100644 index 0000000..2a6a64d --- /dev/null +++ b/assets/svg/header.svg @@ -0,0 +1,49 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/lib/application/application.dart b/lib/application/application.dart index 3bbdad3..df57b45 100644 --- a/lib/application/application.dart +++ b/lib/application/application.dart @@ -1 +1,2 @@ +export 'bottom_navbar_cubit/bottom_navbar_cubit.dart'; export 'user_bloc/user_bloc.dart'; diff --git a/lib/application/bottom_navbar_cubit/bottom_navbar_cubit.dart b/lib/application/bottom_navbar_cubit/bottom_navbar_cubit.dart new file mode 100644 index 0000000..55e20ca --- /dev/null +++ b/lib/application/bottom_navbar_cubit/bottom_navbar_cubit.dart @@ -0,0 +1,12 @@ +// navigation_cubit.dart + +import 'package:flutter_bloc/flutter_bloc.dart'; + +import '../../core/enums/enums.dart'; + + +class NavigationCubit extends Cubit { + NavigationCubit() : super(NavigationTab.homeTab); + + void updateTab(NavigationTab tab) => emit(tab); +} diff --git a/lib/configs/configs.dart b/lib/configs/configs.dart index 9ce9071..3ecd21a 100644 --- a/lib/configs/configs.dart +++ b/lib/configs/configs.dart @@ -1,8 +1,7 @@ +export 'app.dart'; export 'app_dimensions.dart'; export 'app_typography.dart'; export 'app_typography_ext.dart'; export 'space.dart'; export 'space_ext.dart'; export 'ui.dart'; - - diff --git a/lib/core/app/app.dart b/lib/core/app/app.dart index 6177edf..1a8e003 100644 --- a/lib/core/app/app.dart +++ b/lib/core/app/app.dart @@ -1,4 +1,5 @@ import 'package:flutter/material.dart'; +import 'package:flutter/services.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import '../../application/application.dart'; @@ -13,15 +14,17 @@ class MyApp extends StatelessWidget { Widget build(BuildContext context) { return MultiBlocProvider( providers: [ + BlocProvider(create: (context) => di.sl()), BlocProvider( - create: (context) => di.sl()..add(CheckUser()), + create: (context) => di.sl(), //..add(CheckUser()), ), ], - child: const MaterialApp( + child: MaterialApp( debugShowCheckedModeBanner: false, title: appTitle, onGenerateRoute: AppRouter.onGenerateRoute, - initialRoute: AppRouter.splash, + onGenerateInitialRoutes: (initialRoute) => AppRouter.generateInitialRoutes(initialRoute), + initialRoute: AppRouter.root, ), ); } diff --git a/lib/core/constants/assets.dart b/lib/core/constants/assets.dart index cddb313..99e0955 100644 --- a/lib/core/constants/assets.dart +++ b/lib/core/constants/assets.dart @@ -1,11 +1,11 @@ sealed class AppAssets { - //svg - + ///svg static const String Logo = 'assets/svg/logo/logo.svg'; static const String BoxesSvg = 'assets/svg/boxes.svg'; static const String Trucks = 'assets/svg/trucks.svg'; - //png + ///png static const String BoxesPng = 'assets/images/boxes.png'; static const String TrucksPng = 'assets/images/trucks.png'; + static const String Header = 'assets/images/header.png'; } diff --git a/lib/core/constants/colors.dart b/lib/core/constants/colors.dart index aaa6dd2..0b118af 100644 --- a/lib/core/constants/colors.dart +++ b/lib/core/constants/colors.dart @@ -3,6 +3,7 @@ import 'package:flutter/material.dart'; sealed class AppColors { static const Color primary = Color(0xFF343FDE); static const Color yellow = Color(0xFFFFC71E); + static const Color surface = Color(0xFFEDEEFC); static const Color CommonCyan = Color(0xff68C4C6); static const Color GreyText = Color(0xff575757); static const Color LightGrey = Color(0xfff1f1f1); diff --git a/lib/core/core.dart b/lib/core/core.dart index 9c28970..c669079 100644 --- a/lib/core/core.dart +++ b/lib/core/core.dart @@ -6,3 +6,4 @@ export 'observer/observer.dart'; export 'usecases/usecases.dart'; export 'networkchecker/network_info.dart'; export 'utils/utils.dart'; +export 'enums/enums.dart'; diff --git a/lib/core/enums/enums.dart b/lib/core/enums/enums.dart new file mode 100644 index 0000000..546b205 --- /dev/null +++ b/lib/core/enums/enums.dart @@ -0,0 +1 @@ +enum NavigationTab { homeTab, categoriesTab, productsTap, cartTab, profileTab } diff --git a/lib/core/router/app_router.dart b/lib/core/router/app_router.dart index 7368ba0..c0fd2be 100644 --- a/lib/core/router/app_router.dart +++ b/lib/core/router/app_router.dart @@ -4,10 +4,10 @@ import '../../presentation/presentation.dart'; import '../errors/exceptions.dart'; sealed class AppRouter { - static const String splash = '/'; + static const String splash = '/splash'; static const String splash2 = '/splash2'; static const String login = '/login'; - // static const String root = '/root'; + static const String root = '/root'; // static const String productDetails = '/product-details'; // static const String search = '/search'; // static const String filter = '/filter'; @@ -34,8 +34,8 @@ sealed class AppRouter { return MaterialPageRoute(builder: (_) => const Splash2Screen()); case login: return MaterialPageRoute(builder: (_) => const LoginScreen()); - // case root: - // return MaterialPageRoute(builder: (_) => const RootScreen()); + case root: + return MaterialPageRoute(builder: (_) => const RootScreen()); // case search: // return MaterialPageRoute(builder: (_) => const SearchScreen()); // case filter: @@ -84,4 +84,16 @@ sealed class AppRouter { throw const RouteException('Route not found!'); } } + + static List> generateInitialRoutes(String initialRoute) { + debugPrint('generateInitialRoutes $initialRoute'); + + return [ + MaterialPageRoute(builder: (context) => const RootScreen()), + if (initialRoute != AppRouter.root) + MaterialPageRoute( + builder: (context) => const SplashScreen(), + ), + ]; + } } diff --git a/lib/data/data_sources/remote/user_remote_data_source.dart b/lib/data/data_sources/remote/user_remote_data_source.dart index 5128b50..a3245b4 100644 --- a/lib/data/data_sources/remote/user_remote_data_source.dart +++ b/lib/data/data_sources/remote/user_remote_data_source.dart @@ -19,7 +19,21 @@ class UserRemoteDataSourceImpl implements UserRemoteDataSource { @override Future signIn(SignInParams params) async { debugPrint('signIn'); - final response = await client.post(Uri.parse('$baseUrl/authentication/local/sign-in'), + + const data = ''' + { + "token": "exampleToken123", + "user": { + "_id": "user123", + "firstName": "John", + "lastName": "Doe", + "email": "john.doe@example.com" + } + } + '''; + + return authenticationResponseModelFromJson(data); + /* final response = await client.post(Uri.parse('$baseUrl/authentication/local/sign-in'), headers: { 'Content-Type': 'application/json', }, @@ -33,7 +47,7 @@ class UserRemoteDataSourceImpl implements UserRemoteDataSource { throw CredentialFailure(); } else { throw ServerException(); - } + } */ } @override diff --git a/lib/di/cubits.dart b/lib/di/cubits.dart new file mode 100644 index 0000000..33eb415 --- /dev/null +++ b/lib/di/cubits.dart @@ -0,0 +1,11 @@ +import '../application/application.dart'; +import 'di.dart'; + +void registerCubits() { + // Navigation + sl.registerFactory(() => NavigationCubit()); + + //Notiications + // sl.registerLazySingleton(() => FlutterLocalNotificationsPlugin()); + // sl.registerFactory(() => NotificationsCubit(sl())); +} diff --git a/lib/di/di.dart b/lib/di/di.dart index 91aaf2a..b78aec4 100644 --- a/lib/di/di.dart +++ b/lib/di/di.dart @@ -1,6 +1,7 @@ import 'package:get_it/get_it.dart'; import 'common.dart'; +import 'cubits.dart'; import 'user.dart'; final sl = GetIt.instance; @@ -16,7 +17,7 @@ Future init() async { // registerOrderFeature(); // Register Cubits - // registerCubits(); + registerCubits(); // Register common dependencies registerCommonDependencies(); diff --git a/lib/main.dart b/lib/main.dart index 4502274..3092f27 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -20,5 +20,10 @@ Future main() async { DeviceOrientation.portraitDown, ]); + SystemChrome.setSystemUIOverlayStyle(const SystemUiOverlayStyle( + statusBarColor: Colors.transparent, + statusBarBrightness: Brightness.dark, + )); + runApp(Phoenix(child: const MyApp())); } diff --git a/lib/presentation/screens/login.dart b/lib/presentation/screens/login.dart index c1e901a..4c6b12f 100644 --- a/lib/presentation/screens/login.dart +++ b/lib/presentation/screens/login.dart @@ -3,11 +3,10 @@ import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:flutter_svg/svg.dart'; import '../../application/user_bloc/user_bloc.dart'; -import '../../configs/app.dart'; import '../../configs/configs.dart'; import '../../core/core.dart'; import '../../domain/domain.dart'; -import '../widgets/button.dart'; +import '../widgets/widgets.dart'; class LoginScreen extends StatefulWidget { const LoginScreen({super.key}); @@ -21,6 +20,13 @@ class _LoginScreenState extends State { final TextEditingController _passwordController = TextEditingController(); final _formKey = GlobalKey(); + void _nextScreen() { + Navigator.of(context).pushNamedAndRemoveUntil( + AppRouter.root, + (route) => false, + ); + } + @override void dispose() { _userNameController.dispose(); @@ -82,7 +88,7 @@ class _LoginScreenState extends State { /// form part SizedBox( - height: AppDimensions.normalize(145), + height: AppDimensions.normalize(165), child: Stack( clipBehavior: Clip.none, children: [ @@ -158,25 +164,40 @@ class _LoginScreenState extends State { /// gap Space.yf(), - SizedBox( - width: double.infinity, - child: AppButton( - textColor: AppColors.primary, - btnColor: AppColors.yellow, - onPressed: () { - if (_formKey.currentState!.validate()) { - context.read().add( - SignInUser( - SignInParams( - username: _userNameController.text, - password: _passwordController.text, - ), - ), - ); + BlocConsumer( + listener: (context, state) { + if (state is UserLogged) { + _nextScreen(); + } else if (state is UserLoggedFail) { + if (state.failure is CredentialFailure) { + showCredentialErrorDialog(context); + } else { + showAuthErrorDialog(context); } - }, - text: 'Yzarlap başlaň', - ), + } + }, + builder: (context, state) { + return SizedBox( + width: double.infinity, + child: AppButton( + textColor: Colors.white, + btnColor: AppColors.primary, + onPressed: () { + if (_formKey.currentState!.validate()) { + context.read().add( + SignInUser( + SignInParams( + username: _userNameController.text, + password: _passwordController.text, + ), + ), + ); + } + }, + text: 'Yzarlap başlaň', + ), + ); + }, ) ], ), diff --git a/lib/presentation/screens/orders.dart b/lib/presentation/screens/orders.dart new file mode 100644 index 0000000..b72ed29 --- /dev/null +++ b/lib/presentation/screens/orders.dart @@ -0,0 +1,132 @@ +import 'package:flutter/material.dart'; + +import '../../configs/configs.dart'; +import '../../core/core.dart'; +import '../widgets/order_header.dart'; + +class OrdersScreen extends StatelessWidget { + const OrdersScreen({super.key}); + + @override + Widget build(BuildContext context) { + App.init(context); + return Scaffold( + backgroundColor: AppColors.surface, + body: CustomScrollView( + slivers: [ + const SliverToBoxAdapter( + child: OrderHeader(), + ), + SliverToBoxAdapter( + child: Padding( + padding: Space.all(1, 1), + child: const Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Text( + 'Sargytlarym', + style: TextStyle( + fontSize: 20, + fontWeight: FontWeight.bold, + ), + ), + Text( + 'öz ýüküňizi yzarlaň', + style: TextStyle( + color: Colors.grey, + ), + ), + ], + ), + ), + ), + SliverList( + delegate: SliverChildBuilderDelegate( + (BuildContext context, int index) { + return _buildOrderCard(); + }, + childCount: 4, // items.length, + ), + ), + ], + ), + ); + } + + Widget _buildOrderCard() { + return Card( + color: Colors.white, + margin: Space.all(.8, 0.5), + child: Padding( + padding: const EdgeInsets.all(16), + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + Text( + '№ABC456789', + style: AppText.b1b, + ), + Text( + 'Genişleýin >', + style: AppText.b1b?.copyWith( + color: AppColors.primary, + ), + ), + ], + ), + const SizedBox(height: 8), + const Row( + children: [ + Icon(Icons.circle, color: Colors.green, size: 12), + SizedBox(width: 4), + Text('Ýolda'), + Spacer(), + Text('Ugradylan senesi: 16.07.2024'), + ], + ), + const SizedBox(height: 16), + const Row( + children: [ + Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Text('Nireden:'), + Text('Urumçy', style: TextStyle(fontWeight: FontWeight.bold)), + SizedBox(height: 8), + Text('Nirede:'), + Text('Aşgabat', style: TextStyle(fontWeight: FontWeight.bold)), + ], + ), + Spacer(), + Column( + crossAxisAlignment: CrossAxisAlignment.end, + children: [ + Text('Ýer sany:'), + Text('10', style: TextStyle(fontWeight: FontWeight.bold)), + SizedBox(height: 8), + Text('Göwrümi:'), + Text('1472,31', style: TextStyle(fontWeight: FontWeight.bold)), + ], + ), + SizedBox(width: 16), + Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Text('Maşyn №:'), + Text('AA1234AA', style: TextStyle(fontWeight: FontWeight.bold)), + SizedBox(height: 8), + Text('Dukan №:'), + Text('A1043', style: TextStyle(fontWeight: FontWeight.bold)), + ], + ), + ], + ), + ], + ), + ), + ); + } +} diff --git a/lib/presentation/screens/root.dart b/lib/presentation/screens/root.dart new file mode 100644 index 0000000..bc4b789 --- /dev/null +++ b/lib/presentation/screens/root.dart @@ -0,0 +1,83 @@ +import 'package:cargo/core/core.dart'; +import 'package:cargo/presentation/screens/orders.dart'; +import 'package:flutter/material.dart'; +import 'package:flutter/services.dart'; +import 'package:flutter_bloc/flutter_bloc.dart'; + +import '../../application/application.dart'; +import '../../configs/configs.dart'; +import '../widgets/bottom_navbar.dart'; + +class RootScreen extends StatelessWidget { + const RootScreen({super.key}); + + Future onPopInvoked(BuildContext context) async { + return (await showDialog( + context: context, + builder: (context) => AlertDialog( + title: const Text( + 'Exit Application', + style: TextStyle(color: AppColors.primary), + ), + content: const Text( + 'Are You Sure?', + ), + actions: [ + TextButton( + child: const Text( + 'Yes', + style: TextStyle( + color: Colors.red, + ), + ), + onPressed: () { + SystemNavigator.pop(); + }, + ), + TextButton( + child: const Text( + 'No', + style: TextStyle(color: AppColors.primary), + ), + onPressed: () { + Navigator.of(context).pop(); + }, + ), + ], + ), + )) ?? + false; + } + + @override + Widget build(BuildContext context) { + App.init(context); + + return PopScope( + onPopInvoked: (didPop) => onPopInvoked(context), + child: Scaffold( + backgroundColor: AppColors.surface, + bottomNavigationBar: const BottomNavigation(), + body: Container( + color: AppColors.surface, + child: Center( + child: BlocBuilder( + builder: (context, activeTab) { + switch (activeTab) { + case NavigationTab.homeTab: + return const OrdersScreen(); + case NavigationTab.categoriesTab: + return const Text(' CategoriesScreen()'); + case NavigationTab.productsTap: + return const Text('ProductsListScreen()'); + default: + return const Text('HomeScreen()'); + } + }, + ), + ), + ), + ), + ); + } +} diff --git a/lib/presentation/screens/screens.dart b/lib/presentation/screens/screens.dart index e3aaf81..3ed80f2 100644 --- a/lib/presentation/screens/screens.dart +++ b/lib/presentation/screens/screens.dart @@ -1,3 +1,4 @@ export 'splash.dart'; export 'splash2.dart'; export 'login.dart'; +export 'root.dart'; diff --git a/lib/presentation/widgets/auth_error_dialog.dart b/lib/presentation/widgets/auth_error_dialog.dart new file mode 100644 index 0000000..62d3a26 --- /dev/null +++ b/lib/presentation/widgets/auth_error_dialog.dart @@ -0,0 +1,50 @@ +import 'package:flutter/material.dart'; + +import '../../configs/configs.dart'; +import '../../core/core.dart'; + +Future showAuthErrorDialog(BuildContext context) async { + return showDialog( + context: context, + barrierDismissible: false, + builder: (BuildContext context) { + return Dialog( + child: Container( + height: AppDimensions.normalize(50), + padding: Space.all(1, .5), + child: Center( + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Text( + 'Error', + style: AppText.b1b, + ), + Space.yf(.5), + Text( + 'Try Again!', + style: AppText.b1, + ), + Row( + mainAxisAlignment: MainAxisAlignment.end, + children: [ + TextButton( + onPressed: () { + Navigator.pop(context); + }, + child: Text( + 'Dismiss', + style: AppText.h3b?.copyWith( + color: AppColors.primary, + ), + ), + ) + ], + ) + ], + ), + ), + ), + ); + }); +} diff --git a/lib/presentation/widgets/bottom_navbar.dart b/lib/presentation/widgets/bottom_navbar.dart new file mode 100644 index 0000000..5d7797a --- /dev/null +++ b/lib/presentation/widgets/bottom_navbar.dart @@ -0,0 +1,53 @@ +// bottom_navigation.dart + +import 'package:cargo/core/core.dart'; +import 'package:flutter/material.dart'; +import 'package:flutter_bloc/flutter_bloc.dart'; + +import '../../application/application.dart'; +import '../../configs/configs.dart'; + +class BottomNavigation extends StatelessWidget { + const BottomNavigation({super.key}); + + @override + Widget build(BuildContext context) { + return BlocBuilder( + builder: (context, activeTab) { + return SizedBox( + height: AppDimensions.normalize(27), + child: BottomNavigationBar( + type: BottomNavigationBarType.fixed, + currentIndex: activeTab.index, + onTap: (index) { + final newTab = NavigationTab.values[index]; + context.read().updateTab(newTab); + }, + items: const [ + BottomNavigationBarItem( + icon: Icon(Icons.list_alt_outlined), + label: 'Sargytlarym', + ), + BottomNavigationBarItem( + icon: Icon(Icons.history_rounded), + label: 'Sargytlaryň taryhy', + ), + BottomNavigationBarItem( + icon: Icon(Icons.person_outline_rounded), + label: 'Şahsy otagym', + ), + ], + selectedItemColor: AppColors.primary, + // unselectedItemColor: Colors.white, + iconSize: AppDimensions.normalize(12), + selectedLabelStyle: AppText.b2b, + unselectedLabelStyle: AppText.b2!.copyWith( + color: const Color(0xFF96969C), + ), + backgroundColor: AppColors.surface, + ), + ); + }, + ); + } +} diff --git a/lib/presentation/widgets/credential_failure_dialog.dart b/lib/presentation/widgets/credential_failure_dialog.dart new file mode 100644 index 0000000..53f7e26 --- /dev/null +++ b/lib/presentation/widgets/credential_failure_dialog.dart @@ -0,0 +1,49 @@ +import 'package:flutter/material.dart'; + +import '../../configs/configs.dart'; +import '../../core/core.dart'; + +Future showCredentialErrorDialog(BuildContext context) async { + return showDialog( + context: context, + barrierDismissible: false, + builder: (BuildContext context) { + return Dialog( + child: Container( + height: AppDimensions.normalize(60), + padding: Space.all(1, .5), + child: Center( + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Text( + 'Username/Password Wrong!', + style: AppText.b1b, + ), + Space.yf(.5), + Text( + 'Try Again!', + style: AppText.b1, + ), + Row( + mainAxisAlignment: MainAxisAlignment.end, + children: [ + TextButton( + onPressed: () { + Navigator.pop(context); + }, + child: Text( + 'Dismiss', + style: AppText.h3b?.copyWith( + color: AppColors.primary, + ), + )) + ], + ) + ], + ), + ), + ), + ); + }); +} diff --git a/lib/presentation/widgets/order_header.dart b/lib/presentation/widgets/order_header.dart new file mode 100644 index 0000000..bdcc046 --- /dev/null +++ b/lib/presentation/widgets/order_header.dart @@ -0,0 +1,46 @@ +import 'package:flutter/material.dart'; + +import '../../configs/configs.dart'; +import '../../core/core.dart'; + +class OrderHeader extends StatelessWidget { + const OrderHeader({super.key}); + + @override + Widget build(BuildContext context) { + return SizedBox( + height: AppDimensions.normalize(80), + child: Stack( + children: [ + Image.asset( + AppAssets.Header, + fit: BoxFit.fill, + ), + Positioned( + top: 0, + bottom: 0, + left: AppDimensions.normalize(12), + child: Column( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + Text( + 'Cargo goşundy', + style: AppText.h1b?.copyWith( + color: Colors.white, + ), + ), + Space.yf(0.30), + Text( + 'Öz sargydyňyzy yzarlaň', + style: AppText.b1?.copyWith( + color: AppColors.yellow, + ), + ), + ], + ), + ), + ], + ), + ); + } +} diff --git a/lib/presentation/widgets/successful_auth_dialog.dart b/lib/presentation/widgets/successful_auth_dialog.dart new file mode 100644 index 0000000..4fbc40b --- /dev/null +++ b/lib/presentation/widgets/successful_auth_dialog.dart @@ -0,0 +1,55 @@ +import 'package:flutter/material.dart'; +import 'package:flutter_bloc/flutter_bloc.dart'; + +import '../../configs/configs.dart'; +import '../../core/core.dart'; + +Future showSuccessfulAuthDialog(BuildContext context, String text) async { + return showDialog( + context: context, + barrierDismissible: false, + builder: (BuildContext context) { + return Dialog( + child: Container( + height: AppDimensions.normalize(77), + padding: Space.all(1, 1.05), + child: Center( + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Text( + 'SUCCESSFULLY ${text.toUpperCase()}', + style: AppText.b1b, + ), + Space.yf(.6), + Text( + 'Congratulations,\nYour Account Has Been Successfully $text!', + style: AppText.b1?.copyWith(height: 1.5), + ), + // Row( + // mainAxisAlignment: MainAxisAlignment.end, + // children: [ + // TextButton( + // onPressed: () { + // context.read().add(const GetCart()); + // context.read().fetchDeliveryInfo(); + // Navigator.of(context).pushNamedAndRemoveUntil( + // AppRouter.root, + // ModalRoute.withName(''), + // ); + // }, + // child: Text( + // 'Ok', + // style: AppText.h3b?.copyWith(color: AppColors.CommonCyan), + // ), + // ) + // ], + // ) + ], + ), + ), + ), + ); + }, + ); +} diff --git a/lib/presentation/widgets/widgets.dart b/lib/presentation/widgets/widgets.dart index cb85cd4..53d08c4 100644 --- a/lib/presentation/widgets/widgets.dart +++ b/lib/presentation/widgets/widgets.dart @@ -1 +1,6 @@ export 'button.dart'; +export 'successful_auth_dialog.dart'; +export 'credential_failure_dialog.dart'; +export 'auth_error_dialog.dart'; +export 'bottom_navbar.dart'; +export 'order_header.dart';