// ignore_for_file: non_constant_identifier_names import 'dart:async'; import 'package:flutter_smartscan_plugin/id_card_recognition.dart'; ///公共帮助类 class CommonUtil { static const deFaultDurationTime = 1000; static Timer? timer; static IDCardRecognition idCardRecognition = IDCardRecognition(); // 邮箱判断 static const String REGEX_EMAIL = "^([a-z0-9A-Z]+[-|\\.]?)+[a-z0-9A-Z]@([a-z0-9A-Z]+(-[a-z0-9A-Z]+)?\\.)+[a-zA-Z]{2,}\$"; // 纯数字 static const String DIGIT_REGEX = "[0-9]+"; // 含有数字 static const String CONTAIN_DIGIT_REGEX = ".*[0-9].*"; // 纯字母 static const String LETTER_REGEX = "[a-zA-Z]+"; // 包含字母 static const String SMALL_CONTAIN_LETTER_REGEX = ".*[a-z].*"; // 包含字母 static const String BIG_CONTAIN_LETTER_REGEX = ".*[A-Z].*"; // 包含字母 static const String CONTAIN_LETTER_REGEX = ".*[a-zA-Z].*"; // 纯中文 static const String CHINESE_REGEX = "[\u4e00-\u9fa5]"; // 空格 static const String BLANK_SPACE = "[ ]"; // 仅仅包含字母和数字 static const String LETTER_DIGIT_REGEX = "^[a-z0-9A-Z]+\$"; static const String CHINESE_LETTER_REGEX = "([\u4e00-\u9fa5]+|[a-zA-Z]+)"; static const String CHINESE_LETTER_DIGIT_REGEX = "^[a-z0-9A-Z\u4e00-\u9fa5]+\$"; /// 节流函数 处理规定在一个单位时间内,只能触发一次函数。如果这个单位时间内触发多次函数,只有一次生效 static const String deFaultThrottleId = 'DeFaultThrottleId'; static Map startTimeMap = {deFaultThrottleId: 0}; /// 防抖函数 在函数需要频繁触发的情况时,只有足够空闲时间,才执行一次 /// /// [doSomething] 处理方法 /// /// [durationTime] 禁止点击的时间 static debounce(Function doSomething, {durationTime = deFaultDurationTime}) { timer?.cancel(); timer = Timer(Duration(milliseconds: durationTime), () { doSomething.call(); timer = null; }); } // 含有数字 static bool hasDigit(String input) { if (input.isEmpty) return false; return RegExp(CONTAIN_DIGIT_REGEX).hasMatch(input); } // 是否包含中文 static bool isChinese(String input) { if (input.isEmpty) return false; return RegExp(CHINESE_REGEX).hasMatch(input); } // 纯数字 static bool isOnly(String input) { if (input.isEmpty) return false; return RegExp(DIGIT_REGEX).hasMatch(input); } static throttle(Function doSomething, {String throttleId = deFaultThrottleId, int durationTime = deFaultDurationTime, Function? continueClick}) { int currentTime = DateTime.now().millisecondsSinceEpoch; if (currentTime - (startTimeMap[throttleId] ?? 0) > durationTime) { doSomething.call(); startTimeMap[throttleId] = DateTime.now().millisecondsSinceEpoch; } else { continueClick?.call(); } } }