change password screen ui
This commit is contained in:
@@ -1,7 +1,6 @@
|
||||
import 'package:bloc/bloc.dart';
|
||||
import 'package:equatable/equatable.dart';
|
||||
import 'package:tanami_app/core/styles/app_text.dart';
|
||||
|
||||
import '../../../../core/utils/secure/secure_storage_service.dart';
|
||||
|
||||
part 'pin_event.dart';
|
||||
@@ -12,13 +11,20 @@ class PinBloc extends Bloc<PinEvent, PinState> {
|
||||
|
||||
PinBloc({required this.secureStorageService})
|
||||
: super(const PinState(
|
||||
pin: '', pinComplete: false, isVerified: false, error: '')) {
|
||||
pin: '',
|
||||
pinComplete: false,
|
||||
isVerified: false,
|
||||
error: '',
|
||||
verifiedOnce: false)) {
|
||||
on<NumberPressed>((event, emit) {
|
||||
final newPin = state.pin + event.number;
|
||||
|
||||
if (newPin.length <= 6) {
|
||||
emit(state.copyWith(
|
||||
pin: newPin, pinComplete: newPin.length == 6, error: ''));
|
||||
pin: newPin,
|
||||
pinComplete: newPin.length == 6,
|
||||
error: '',
|
||||
verifiedOnce: false));
|
||||
|
||||
if (newPin.length == 6) {
|
||||
add(VerifyPinPressed(newPin));
|
||||
@@ -30,7 +36,10 @@ class PinBloc extends Bloc<PinEvent, PinState> {
|
||||
if (state.pin.isNotEmpty) {
|
||||
final newPin = state.pin.substring(0, state.pin.length - 1);
|
||||
emit(state.copyWith(
|
||||
pin: newPin, pinComplete: newPin.length == 6, error: ''));
|
||||
pin: newPin,
|
||||
pinComplete: newPin.length == 6,
|
||||
error: '',
|
||||
verifiedOnce: false));
|
||||
}
|
||||
});
|
||||
|
||||
@@ -42,11 +51,12 @@ class PinBloc extends Bloc<PinEvent, PinState> {
|
||||
final storedPin = await secureStorageService.read('pin_code');
|
||||
|
||||
if (storedPin == event.pin) {
|
||||
emit(state.copyWith(isVerified: true, error: ''));
|
||||
emit(state.copyWith(isVerified: true, error: '', verifiedOnce: true));
|
||||
} else {
|
||||
emit(state.copyWith(
|
||||
isVerified: false,
|
||||
error: AppText.incorrectPinCode,
|
||||
verifiedOnce: true,
|
||||
));
|
||||
}
|
||||
});
|
||||
|
||||
@@ -5,12 +5,14 @@ class PinState extends Equatable {
|
||||
final bool pinComplete;
|
||||
final bool isVerified;
|
||||
final String error;
|
||||
final bool verifiedOnce; // New variable to prevent double listener calls
|
||||
|
||||
const PinState({
|
||||
required this.pin,
|
||||
required this.pinComplete,
|
||||
required this.isVerified,
|
||||
required this.error,
|
||||
required this.verifiedOnce,
|
||||
});
|
||||
|
||||
PinState copyWith({
|
||||
@@ -18,15 +20,17 @@ class PinState extends Equatable {
|
||||
bool? pinComplete,
|
||||
bool? isVerified,
|
||||
String? error,
|
||||
bool? verifiedOnce,
|
||||
}) {
|
||||
return PinState(
|
||||
pin: pin ?? this.pin,
|
||||
pinComplete: pinComplete ?? this.pinComplete,
|
||||
isVerified: isVerified ?? this.isVerified,
|
||||
error: error ?? this.error,
|
||||
verifiedOnce: verifiedOnce ?? this.verifiedOnce,
|
||||
);
|
||||
}
|
||||
|
||||
@override
|
||||
List<Object> get props => [pin, pinComplete, isVerified, error];
|
||||
List<Object> get props => [pin, pinComplete, isVerified, error, verifiedOnce];
|
||||
}
|
||||
|
||||
@@ -1,3 +1,5 @@
|
||||
import 'dart:developer';
|
||||
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter_bloc/flutter_bloc.dart';
|
||||
import 'package:gap/gap.dart';
|
||||
@@ -26,10 +28,13 @@ class PinKey extends StatelessWidget {
|
||||
const Gap(20),
|
||||
BlocConsumer<PinBloc, PinState>(
|
||||
listener: (context, state) {
|
||||
if (state.pinComplete) {
|
||||
if (state.pinComplete &&
|
||||
state.error.isEmpty &&
|
||||
!state.verifiedOnce) {
|
||||
if (fromScreen == "login") {
|
||||
goRouter.pushNamed(RouteName.mainScreen);
|
||||
} else if (fromScreen == "reset-pin") {
|
||||
log("Running this");
|
||||
successToastMessage(context, AppText.pinUpdatedSucess);
|
||||
goRouter.pop();
|
||||
} else {
|
||||
|
||||
Reference in New Issue
Block a user