Files
Tanami_App/lib/features/securePin/presentation/widgets/pin_keypad_section.dart
2024-06-03 19:10:05 +05:30

132 lines
4.4 KiB
Dart

import 'package:flutter/material.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:gap/gap.dart';
import 'package:tanami_app/core/routes/route_name.dart';
import 'package:tanami_app/core/routes/routes.dart';
import 'package:tanami_app/core/styles/app_color.dart';
import 'package:tanami_app/core/styles/app_text.dart';
import 'package:tanami_app/features/securePin/presentation/widgets/forgot_pin_dialog.dart';
import 'package:tanami_app/shared/components/text_widget.dart';
import '../bloc/pin_bloc.dart';
class PinKey extends StatelessWidget {
final String fromScreen;
const PinKey({
super.key,
required this.fromScreen,
});
@override
Widget build(BuildContext context) {
return Column(
crossAxisAlignment: CrossAxisAlignment.end,
children: [
const Gap(20),
BlocConsumer<PinBloc, PinState>(
listener: (context, state) {
if (state.pinComplete) {
if (fromScreen == "login") {
goRouter.pushNamed(RouteName.mainScreen);
} else {
context.read<PinBloc>().add(SavePinPressed());
goRouter.pushNamed(RouteName.confirmPinScreen);
}
}
},
builder: (context, state) {
return Row(
mainAxisAlignment: MainAxisAlignment.center,
children: List.generate(6, (index) {
return Container(
margin: const EdgeInsets.symmetric(horizontal: 10),
width: 32,
height: 32,
decoration: BoxDecoration(
shape: BoxShape.circle,
border: Border.all(
color: index < state.pin.length
? AppColor.pinFillBorderColor
: AppColor.pinInActiveBorderColor,
),
color: index < state.pin.length
? AppColor.pinFillColor
: Colors.transparent,
),
);
}),
);
},
),
fromScreen == "login" ? const Gap(20) : const Gap(0),
fromScreen == "login"
? InkWell(
onTap: () {
forgotPinDialog(context);
},
child: Padding(
padding: const EdgeInsets.only(
right: 50,
),
child: TextWidget().text15W500(
AppText.forgotPinCode,
clr: AppColor.hintTextColor,
textDecoration: TextDecoration.underline,
),
),
)
: const SizedBox(),
const Gap(50),
GridView.builder(
shrinkWrap: true,
gridDelegate: const SliverGridDelegateWithFixedCrossAxisCount(
crossAxisCount: 3,
childAspectRatio: 1.3,
),
itemCount: 12,
itemBuilder: (context, index) {
if (index == 9) {
return const SizedBox.shrink();
} else if (index == 11) {
return GestureDetector(
onTap: () {
context.read<PinBloc>().add(BackspacePressed());
},
child: Container(
margin: const EdgeInsets.all(10),
decoration: BoxDecoration(
shape: BoxShape.circle,
border: Border.all(color: Colors.black12),
),
child: const Icon(
Icons.arrow_back_rounded,
),
),
);
} else {
final number = index == 10 ? '0' : '${index + 1}';
return GestureDetector(
onTap: () {
context.read<PinBloc>().add(NumberPressed(number));
},
child: Container(
margin: const EdgeInsets.all(10),
decoration: BoxDecoration(
shape: BoxShape.circle,
border: Border.all(color: Colors.black12),
),
child: Center(
child: TextWidget().text20W700(
number,
clr: AppColor.plainBlack,
)),
),
);
}
},
),
],
);
}
}