135 lines
3.6 KiB
Dart
135 lines
3.6 KiB
Dart
import 'package:flutter/material.dart';
|
||
import 'package:flutter_screenutil/flutter_screenutil.dart';
|
||
import 'package:get/get.dart';
|
||
import 'dart:math';
|
||
|
||
class Utils {
|
||
static Utils? _instance;
|
||
|
||
Utils._internal();
|
||
|
||
static Utils getInstance() {
|
||
_instance ??= Utils._internal();
|
||
|
||
return _instance!;
|
||
}
|
||
|
||
/// 关闭键盘
|
||
static void hideKeyboard() {
|
||
FocusScopeNode? currentFocus = Get.focusScope?.nearestScope;
|
||
if (currentFocus == null) {
|
||
return;
|
||
}
|
||
if (!currentFocus.hasPrimaryFocus && currentFocus.focusedChild != null) {
|
||
FocusManager.instance.primaryFocus?.unfocus();
|
||
}
|
||
}
|
||
|
||
void setTimeOut(int seconds, call) => Future.delayed(Duration(seconds: seconds), call);
|
||
Future<dynamic> setTimeOutMilliseconds(int milliseconds, call) => Future.delayed(Duration(milliseconds: milliseconds), call);
|
||
|
||
// 是否是平板
|
||
static bool isPad([double mobilePhoneScale = 1.2]) {
|
||
return ScreenUtil().scaleWidth > mobilePhoneScale;
|
||
}
|
||
|
||
static String getDoubleRemoveZero(double? val, [String? defaultVal]) {
|
||
try {
|
||
if (val == null) throw Exception('数据为空');
|
||
List<String> _valArr = val.toString().split('.');
|
||
if (_valArr.length >= 2) {
|
||
if (int.parse(_valArr[1]) == 0) {
|
||
return val.toInt().toString();
|
||
}
|
||
return val.toString();
|
||
}
|
||
return val.toInt().toString();
|
||
} catch (e) {
|
||
return defaultVal ?? '';
|
||
}
|
||
}
|
||
|
||
/// 去除小数点
|
||
static String doubleToStringAsFixed(double val, {int fractionDigits = 2}) {
|
||
return val.toStringAsFixed(fractionDigits).replaceAll(RegExp(r'\.0*$'), '');
|
||
}
|
||
|
||
static calcRate(int divisor, int dividend) {
|
||
if (dividend != 0) {
|
||
return ((100 * divisor) / dividend);
|
||
// return ((100 * divisor) / dividend).toStringAsFixed(0);
|
||
} else {
|
||
return 0.0;
|
||
}
|
||
}
|
||
|
||
/// 秒转时分秒
|
||
static String second2HMS(int sec, {bool isEasy = false}) {
|
||
String hms = "0";
|
||
if (!isEasy) hms = "0秒";
|
||
if (sec > 0) {
|
||
int h = sec ~/ 3600;
|
||
int m = (sec % 3600) ~/ 60;
|
||
int s = sec % 60;
|
||
if (h > 0) {
|
||
hms = "$h时$m分$s秒";
|
||
} else {
|
||
if (m > 0) {
|
||
hms = "$m分$s秒";
|
||
} else {
|
||
hms = "$s秒";
|
||
}
|
||
}
|
||
}
|
||
return hms;
|
||
}
|
||
|
||
static DateTime getWeekStartDate() {
|
||
DateTime now = DateTime.now();
|
||
int dayOfWeek = now.weekday; // 获取今天是周几(1代表周一,7代表周日)
|
||
int diff = dayOfWeek - 1; // 计算今天距离周一的天数差
|
||
if (diff < 0) {
|
||
diff += 7; // 如果是周日,则需要加上一周的天数
|
||
}
|
||
return now.subtract(Duration(days: diff)); // 减去天数差,得到本周一的时间
|
||
}
|
||
|
||
static DateTime getWeekEndDate() {
|
||
DateTime now = DateTime.now();
|
||
int dayOfWeek = now.weekday; // 获取今天是周几
|
||
int diff = 7 - dayOfWeek; // 计算今天距离周日的天数差
|
||
if (diff == 0) {
|
||
diff = 7; // 如果是周日,则加上一周的天数
|
||
}
|
||
return now.add(Duration(days: diff)); // 加上天数差减一,得到本周日的时间
|
||
}
|
||
|
||
static String getQuestionSource(int type) {
|
||
var str = '';
|
||
switch (type) {
|
||
case 1:
|
||
str = '预习';
|
||
break;
|
||
case 3:
|
||
str = '复习';
|
||
break;
|
||
case 4:
|
||
str = '作业';
|
||
break;
|
||
case 5:
|
||
str = '考试';
|
||
break;
|
||
}
|
||
return str;
|
||
}
|
||
}
|
||
|
||
// 是否是平板
|
||
bool isPad([double mobilePhoneScale = 1.2]) {
|
||
return ScreenUtil().scaleWidth > mobilePhoneScale;
|
||
}
|
||
|
||
void toUpState(Function(void Function()) setState, VoidCallback fn, bool mounted) {
|
||
if (mounted) setState(fn);
|
||
}
|