import 'dart:math'; import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; import 'package:rasadyar_auth/presentation/pages/auth/logic.dart'; import 'package:rasadyar_auth/presentation/widget/clear_button.dart'; import 'package:rasadyar_core/core.dart'; import 'logic.dart'; class CaptchaWidget extends GetView { const CaptchaWidget({super.key}); @override Widget build(BuildContext context) { return Row( crossAxisAlignment: CrossAxisAlignment.start, children: [ GestureDetector( onTap: controller.getCaptcha, child: Container( width: 135, height: 50, clipBehavior: Clip.antiAliasWithSaveLayer, decoration: BoxDecoration( color: AppColor.whiteNormalHover, border: Border.all(color: Colors.grey.shade300), borderRadius: BorderRadius.circular(8), ), child: controller.obx( (state) => Center( child: Stack( alignment: Alignment.center, children: [ CustomPaint(size: const Size(135, 50), painter: _CaptchaLinePainter()), Text(controller.captchaKey.value ?? 'دوباره سعی کنید', style: AppFonts.yekan24Bold), ], ), ), onLoading: const Center(child: CupertinoActivityIndicator(color: AppColor.blueNormal)), onError: (error) { return const Center(child: Text('خطا در بارگذاری کد امنیتی', style: AppFonts.yekan13)); }, ), ), ), const SizedBox(width: 8), Expanded( child: Form( key: controller.formKey, autovalidateMode: AutovalidateMode.disabled, child: ObxValue((data) { return RTextField( label: 'کد امنیتی', controller: data.value, keyboardType: TextInputType.numberWithOptions(decimal: false, signed: false), maxLines: 1, maxLength: 6, suffixIcon: (data.value.text.trim().isNotEmpty ?? false) ? clearButton(() => controller.textController.value.clear()) : null, onSubmitted: (data) {}, validator: (value) { if (value == null || value.isEmpty) { return 'کد امنیتی را وارد کنید'; } else if (controller.captchaKey.value != null && controller.captchaKey.value != value) { return 'کد امنیتی اشتباه است'; } return null; }, onChanged: (pass) { if(pass.length== 6) { if(controller.formKey.currentState?.validate()??false) { Get.find().isDisabled.value = false; } } }, style: AppFonts.yekan13, ); }, controller.textController), ), ), ], ); } } class _CaptchaLinePainter extends CustomPainter { @override void paint(Canvas canvas, Size size) { final random = Random(); final paint1 = Paint() ..color = Colors.deepOrange ..strokeWidth = 2; final paint2 = Paint() ..color =Colors.blue ..strokeWidth = 2; // First line: top-left to bottom-right canvas.drawLine( Offset(0, 0), Offset(size.width, size.height), paint1, ); // Second line: bottom-left to top-right canvas.drawLine( Offset(0, size.height), Offset(size.width, 0), paint2, ); } @override bool shouldRepaint(covariant CustomPainter oldDelegate) => false; }