fixed TM-171 jira task

This commit is contained in:
amirrezaghabeli
2025-10-01 14:11:53 +03:30
parent d42f477dcb
commit 006b421a9e
12 changed files with 69 additions and 17 deletions
+19 -1
View File
@@ -1,9 +1,11 @@
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:go_router/go_router.dart'; import 'package:go_router/go_router.dart';
import 'package:provider/provider.dart';
import 'package:shared_preferences/shared_preferences.dart';
import 'package:tm_app/views/completion_of_documents/pages/m_completion_of_documents_page.dart'; import 'package:tm_app/views/completion_of_documents/pages/m_completion_of_documents_page.dart';
import 'package:tm_app/views/detail/pages/detail_screen.dart'; import 'package:tm_app/views/detail/pages/detail_screen.dart';
import 'package:tm_app/views/forget_password_create/pages/forgot_password_create_screen.dart'; import 'package:tm_app/views/forget_password_create/pages/forgot_password_create_screen.dart';
import 'package:tm_app/views/forget_password_otp.dart/pages/forgot_password_otp_screen.dart'; import 'package:tm_app/views/forget_password_otp/pages/forgot_password_otp_screen.dart';
import 'package:tm_app/views/home/pages/home_screen.dart'; import 'package:tm_app/views/home/pages/home_screen.dart';
import 'package:tm_app/views/liked_tenders/pages/liked_tenders_screen.dart'; import 'package:tm_app/views/liked_tenders/pages/liked_tenders_screen.dart';
import 'package:tm_app/views/login/pages/login_screen.dart'; import 'package:tm_app/views/login/pages/login_screen.dart';
@@ -34,6 +36,22 @@ final GoRouter appRouter = GoRouter(
routes: $appRoutes, routes: $appRoutes,
initialLocation: '/splash', initialLocation: '/splash',
navigatorKey: rootNavigatorKey, navigatorKey: rootNavigatorKey,
redirect: (context, state) {
final prefs = context.read<SharedPreferences>();
final hasToken = prefs.getString('bearer') != null;
final path = state.uri.path;
final location = state.matchedLocation;
final isSplash = path == '/splash' || location == '/splash';
final isLogin = path == '/login' || location == '/login';
final isForgotFlow =
path.startsWith('/forgot-password') ||
location.startsWith('/forgot-password');
final isPublic = isSplash || isLogin || isForgotFlow;
if (!hasToken && !isPublic) {
return '/splash';
}
return null;
},
); );
// Login route - outside the shell // Login route - outside the shell
@@ -101,7 +101,7 @@ class _TabletForgotPasswordCreatePageState
onToggleVisibility: onToggleVisibility:
viewModel.toggleForgotPasswordVisibility, viewModel.toggleForgotPasswordVisibility,
), ),
SizedBox(height: 16.0.h()), SizedBox(height: 24.0.h()),
Container( Container(
alignment: Alignment.centerLeft, alignment: Alignment.centerLeft,
padding: EdgeInsets.only(left: 16.0.w()), padding: EdgeInsets.only(left: 16.0.w()),
@@ -149,7 +149,7 @@ class _TabletForgotPasswordCreatePageState
), ),
), ),
), ),
SizedBox(height: 80.0.h()), SizedBox(height: 70.0.h()),
viewModel.isResetPasswordLoading viewModel.isResetPasswordLoading
? BaseButton( ? BaseButton(
isEnabled: viewModel.isNewPasswordValid, isEnabled: viewModel.isNewPasswordValid,
@@ -169,6 +169,7 @@ class _TabletForgotPasswordCreatePageState
: null, : null,
), ),
SizedBox(height: 32.0.h()),
TextButton( TextButton(
onPressed: () { onPressed: () {
context.pop(); context.pop();
@@ -1,7 +1,8 @@
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:tm_app/views/forget_password_otp.dart/pages/d_forget_password_otp_page.dart'; import 'package:tm_app/core/utils/size_config.dart';
import 'package:tm_app/views/forget_password_otp.dart/pages/m_forget_password_otp_page.dart'; import 'package:tm_app/views/forget_password_otp/pages/d_forget_password_otp_page.dart';
import 'package:tm_app/views/forget_password_otp.dart/pages/t_forget_password_otp_page.dart'; import 'package:tm_app/views/forget_password_otp/pages/m_forget_password_otp_page.dart';
import 'package:tm_app/views/forget_password_otp/pages/t_forget_password_otp_page.dart';
import '../../shared/responsive_builder.dart'; import '../../shared/responsive_builder.dart';
@@ -10,6 +11,7 @@ class ForgotPasswordOtpScreen extends StatelessWidget {
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
SizeConfig.init(context);
return const ResponsiveBuilder( return const ResponsiveBuilder(
mobile: MobileForgotPasswordOtpPage(), mobile: MobileForgotPasswordOtpPage(),
tablet: TabletForgotPasswordOtpPage(), tablet: TabletForgotPasswordOtpPage(),
@@ -113,7 +113,7 @@ class _TabletForgotPasswordOtpPageState
), ),
), ),
), ),
SizedBox(height: 24.0.h()), SizedBox(height: 70.0.h()),
viewModel.isLoadingOtp viewModel.isLoadingOtp
? BaseButton( ? BaseButton(
isEnabled: viewModel.isOtpValid, isEnabled: viewModel.isOtpValid,
@@ -131,7 +131,7 @@ class _TabletForgotPasswordOtpPageState
} }
: null, : null,
), ),
const SizedBox(height: 12.0), SizedBox(height: 32.0.h()),
TextButton( TextButton(
onPressed: () { onPressed: () {
context.pop(); context.pop();
@@ -1,4 +1,5 @@
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:tm_app/core/utils/size_config.dart';
import '../../shared/responsive_builder.dart'; import '../../shared/responsive_builder.dart';
import 'd_forgot_apssword_page.dart'; import 'd_forgot_apssword_page.dart';
@@ -10,6 +11,7 @@ class ForgotPasswordScreen extends StatelessWidget {
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
SizeConfig.init(context);
return const ResponsiveBuilder( return const ResponsiveBuilder(
mobile: MobileForgotPasswordPage(), mobile: MobileForgotPasswordPage(),
tablet: TabletForgotPasswordPage(), tablet: TabletForgotPasswordPage(),
@@ -59,7 +59,7 @@ class _TabletForgotPasswordPageState extends State<TabletForgotPasswordPage> {
builder: (context, viewModel, _) { builder: (context, viewModel, _) {
return Center( return Center(
child: SizedBox( child: SizedBox(
width: 364, width: 364.0.w(),
child: Column( child: Column(
mainAxisSize: MainAxisSize.min, mainAxisSize: MainAxisSize.min,
children: [ children: [
@@ -97,7 +97,7 @@ class _TabletForgotPasswordPageState extends State<TabletForgotPasswordPage> {
label: ForgotPasswordStrings.emailHint, label: ForgotPasswordStrings.emailHint,
isPassword: false, isPassword: false,
), ),
SizedBox(height: 24.0.h()), SizedBox(height: 70.0.h()),
viewModel.isLoadingForgot viewModel.isLoadingForgot
? const BaseButton( ? const BaseButton(
isEnabled: false, isEnabled: false,
@@ -115,7 +115,7 @@ class _TabletForgotPasswordPageState extends State<TabletForgotPasswordPage> {
} }
: null, : null,
), ),
const SizedBox(height: 12), SizedBox(height: 32.0.h()),
TextButton( TextButton(
onPressed: () { onPressed: () {
Navigator.pop(context); Navigator.pop(context);
+6 -6
View File
@@ -51,7 +51,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: 526, width: 364.0.w(),
child: Consumer<AuthViewModel>( child: Consumer<AuthViewModel>(
builder: (context, viewModel, _) { builder: (context, viewModel, _) {
return Column( return Column(
@@ -65,9 +65,9 @@ class _LoginTabletPageState extends State<LoginTabletPage> {
height: 50.0.h(), height: 50.0.h(),
), ),
), ),
SizedBox(height: 32.0.h()), SizedBox(height: 72.0.h()),
const LoginTitle(), const LoginTitle(),
SizedBox(height: 32.0.h()), SizedBox(height: 40.0.h()),
LoginTextField( LoginTextField(
controller: viewModel.usernameController, controller: viewModel.usernameController,
focusNode: viewModel.usernameFocus, focusNode: viewModel.usernameFocus,
@@ -77,7 +77,7 @@ class _LoginTabletPageState extends State<LoginTabletPage> {
borderRedus: 12, borderRedus: 12,
prefixIconPadding: 4.0.w(), prefixIconPadding: 4.0.w(),
), ),
SizedBox(height: 16.0.h()), SizedBox(height: 24.0.h()),
LoginTextField( LoginTextField(
controller: viewModel.passwordController, controller: viewModel.passwordController,
focusNode: viewModel.passwordFocus, focusNode: viewModel.passwordFocus,
@@ -90,7 +90,7 @@ class _LoginTabletPageState extends State<LoginTabletPage> {
onToggleVisibility: viewModel.togglePasswordVisibility, onToggleVisibility: viewModel.togglePasswordVisibility,
borderRedus: 12, borderRedus: 12,
), ),
SizedBox(height: 32.0.h()), SizedBox(height: 70.0.h()),
if (viewModel.isLoading) if (viewModel.isLoading)
const BaseButton( const BaseButton(
isEnabled: false, isEnabled: false,
@@ -107,7 +107,7 @@ class _LoginTabletPageState extends State<LoginTabletPage> {
} }
: null, : null,
), ),
const SizedBox(height: 32.0), SizedBox(height: 30.0.h()),
TextButton( TextButton(
onPressed: () { onPressed: () {
const ForgotPasswordRouteData().push(context); const ForgotPasswordRouteData().push(context);
+24
View File
@@ -12,3 +12,27 @@ firebase.initializeApp({
}); });
const messaging = firebase.messaging(); const messaging = firebase.messaging();
// Handle background messages
messaging.onBackgroundMessage(async (payload) => {
const notificationTitle = payload.notification.title;
const notificationOptions = {
body: payload.notification.body,
badge: '/icons/Icon-192.svg',
icon: '/icons/notification.svg',
data: payload.data,
click_action: payload.notification.click_action,
};
self.registration.showNotification(notificationTitle, notificationOptions);
});
// Open or focus the app when a notification is clicked
self.addEventListener('notificationclick', (event) => {
event.notification.close();
const targetUrl = 'https://app.opplens.com/notification';
event.waitUntil(
self.clients.openWindow(targetUrl)
);
});
+5
View File
@@ -0,0 +1,5 @@
<svg width="20" height="20" viewBox="0 0 20 20" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M10 5.36719V8.14219" stroke="#0164FF" stroke-width="1.5" stroke-miterlimit="10" stroke-linecap="round"/>
<path d="M10.0171 1.66406C6.9504 1.66406 4.46707 4.1474 4.46707 7.21406V8.96406C4.46707 9.53073 4.23374 10.3807 3.94207 10.8641L2.88374 12.6307C2.23374 13.7224 2.68374 14.9391 3.88374 15.3391C7.86707 16.6641 12.1754 16.6641 16.1587 15.3391C17.2837 14.9641 17.7671 13.6474 17.1587 12.6307L16.1004 10.8641C15.8087 10.3807 15.5754 9.5224 15.5754 8.96406V7.21406C15.5671 4.16406 13.0671 1.66406 10.0171 1.66406Z" stroke="#0164FF" stroke-width="1.5" stroke-miterlimit="10" stroke-linecap="round"/>
<path d="M12.7766 15.6797C12.7766 17.2047 11.5266 18.4547 10.0016 18.4547C9.24323 18.4547 8.54323 18.138 8.04323 17.638C7.54323 17.138 7.22656 16.438 7.22656 15.6797" stroke="#0164FF" stroke-width="1.5" stroke-miterlimit="10"/>
</svg>

After

Width:  |  Height:  |  Size: 938 B