import 'dart:convert'; import 'dart:math'; import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; import 'package:rasadyar_core/core.dart'; import 'package:rasadyar_inspection/presentation/pages/auth/logic.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) => Image.memory(base64Decode(state?.captchaImage ?? ''), fit: BoxFit.cover), onLoading: const Center( child: CupertinoActivityIndicator(color: AppColor.blueNormal), ), onError: (error) { return Center( child: Text('خطا ', style: AppFonts.yekan13.copyWith(color: Colors.red)), ); }, ), ), ), const SizedBox(width: 8), Expanded( child: Form( key: controller.formKey, autovalidateMode: AutovalidateMode.disabled, child: RTextField( label: 'کد امنیتی', controller: controller.textController, focusedBorder: OutlineInputBorder( borderRadius: BorderRadius.circular(8), borderSide: BorderSide(color: AppColor.textColor, width: 1), ), keyboardType: TextInputType.numberWithOptions(decimal: false, signed: false), maxLines: 1, maxLength: 6, suffixIcon: (controller.textController.text .trim() .isNotEmpty ?? false) ? clearButton(() => controller.textController.clear()) : null, validator: (value) { if (value == null || value.isEmpty) { return 'کد امنیتی را وارد کنید'; } return null; }, onChanged: (pass) { if (pass.length == 6) { if (controller.formKey.currentState?.validate() ?? false) { Get .find() .isDisabled .value = false; } } }, style: AppFonts.yekan13, ), ), ), ], ); } } 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; }