import 'dart:async'; import 'dart:convert'; import 'dart:io'; import 'dart:math'; import 'package:flutter/material.dart'; import 'package:flutter/widgets.dart'; class Utils { /// 是否字符串为空 static bool isEmpty(String? value) { if (value == null) { return true; } return value.isEmpty || value == 'null'; } /// 字符串是否不为空 static bool isNotEmpty(String? value) { return !isEmpty(value); } /// 判断邮箱 static isEmail(dynamic value, {String? country = "sg"}) { switch (country) { case "sg": RegExp regExp = RegExp(r"^\w{1,}(.\w+)*@[A-z0-9]+(\.[A-z]{2,6}){1,2}$"); if (regExp.hasMatch(value.toString())) { return true; } else { return false; } default: return false; } } /// 判断中国的11位手机号码 static bool isChinaPhoneNumber(dynamic value) { RegExp regExp = RegExp(r"^1\d{10}$"); // 匹配以1开头的11位数字 if (regExp.hasMatch(value.toString())) { return true; } else { return false; } } /// 全局的路由key static final navKey = GlobalKey(); /// 全局的组件key static final widgetKey = GlobalKey(); //页面缓存key static dynamic pageStorageKey(dynamic keyname) { return PageStorageKey(keyname); } /// 关闭软键盘 static void hideKeyboard(BuildContext context) { FocusScopeNode currentFocus = FocusScope.of(context); if (!currentFocus.hasPrimaryFocus && currentFocus.focusedChild != null) { FocusManager.instance.primaryFocus!.unfocus(); } } /// map 转 json 字符串 static String encodeMap(Map mapData) { return json.encode(mapData); } /// json 字符串转 map static Map decodeJson(jsonStr) { return json.decode(jsonStr.toString()); } /// 判断颜色是否是暗色还是亮色 static num getComputeLuminance(Color color) { return color.computeLuminance(); } /// 随机获取指定返回内的数值 static int getRandomRangeInt(int min, int max) { final Random random = Random(); return min + random.nextInt(max + 1 - min); } /// 无参数的防抖函数 static VoidCallback debounce(VoidCallback func, [ Duration delay = const Duration(milliseconds: 400), ]) { late Timer timer; return () { if (timer.isActive == true) { timer.cancel(); } timer = Timer(delay, () { func.call(); }); }; } /// 带参数的防抖函数 static Function debounceArg(Function func, [ Duration delay = const Duration(milliseconds: 2000), ]) { late Timer timer; return (T arg) { if (timer.isActive == true) { timer.cancel(); } timer = Timer(delay, () { func.call(arg); }); }; } /// 根据现在的小时数,返回 早上好,中午好,下午好,晚上好 这四个字符串 static String formatNowGreetingText() { final now = DateTime.now(); final hour = now.hour; String greeting; if (hour < 11) { greeting = '早上好'; } else if (hour < 13) { greeting = '中午好'; } else if (hour < 18) { greeting = '下午好'; } else if (hour < 24) { greeting = '晚上好'; } else { greeting = '早上好'; } return greeting; } /// 将时间转化为 多久之前 static String getTimeAgo(String? dateTimeStr) { if (dateTimeStr == null || dateTimeStr.isEmpty) { return 'Unknown time'; // 或者返回其他默认值 } DateTime? dateTime; try { dateTime = DateTime.parse(dateTimeStr); } catch (e) { return 'Invalid date format'; // 或者返回其他默认值 } if (dateTime == null) { return 'Unknown time'; // 或者返回其他默认值 } final now = DateTime.now(); final difference = now.difference(dateTime); if (difference.inHours < 1) { return "${difference.inMinutes} minutes ago"; } else if (difference.inHours < 24) { return "${difference.inHours} hours ago"; } else if (difference.inDays < 7) { return "${difference.inDays} days ago"; } else if (difference.inDays < 30) { return "${(difference.inDays / 7).floor()} weeks ago"; } else if (difference.inDays < 365) { return "${(difference.inDays / 30).floor()} months ago"; } else { return "${(difference.inDays / 365).floor()} years ago"; } } }