flutter_utils_plus 1.1.0
flutter_utils_plus: ^1.1.0 copied to clipboard
Flutter/Dart utility kit: string, date, validation, number, debounce & more. Reduces boilerplate, speeds up dev.
使用说明 #
Dart常用工具类库。UtilsPlus包含字符串、数字、验证、列表等工具类、另外提供Moment日期时间类用于处理日期时间。
UtilsPlus 基础工具类 #
String
snakeToCamel: 蛇形转驼峰,String (String str)
cameToSnake: 驼峰转蛇形,String (String str)
uppercaseFirst: 首字母转大写,String (String str)
lowercaseFirst: 首字母转小写,String (String str)
insertByLength: 每隔固定长度插入分隔符,String (String str, [len = 4, separator = ' '])
formatAmount: 金额千分位逗号分隔,String (Object value)
maskPhoneNumber: 隐藏部分电话号码,String (String str)
getStringSuffix: 获取字符串后缀,String (String str, [separator = '.'])
Number
toNum: 转为数字类型,num? (Object? value)
toInt: 转为整数类型(四舍五入),int? (Object? value)
toFixed: 数字精度转换(四舍五入),num (num value, [digit = 2])
calcAdd: 精准计算(加法),num (num num1, num num2)
calcSubtract: 精准计算(减法),num (num num1, num num2)
calcMultiply: 精准计算(乘法),num (num num1, num num2)
calcDivide: 精准计算(除法),num (num num1, num num2)
meterToFt: 米(m)转英尺(ft),num (num value, [int? digit])
ftToMeter: 英尺(ft)转米(m),num (num value, [int? digit])
meter2ToFt2: 平方米(m²)转平方英尺(ft²),num (num value, [int? digit])
ft2ToMeter2: 平方英尺(ft²)转平方米(m²),num (num value, [int? digit])
celsiusToFahrenheit: 摄氏度(°C)转华氏度(°F),num (num value, [int? digit])
fahrenheitToCelsius: 华氏度(°F)转摄氏度(°C),num (num value, [int? digit])
Validate
isChinese: 验证是否包含中文,bool (String value)
isMobile: 验证电话号码,bool (String value)
isEmail: 验证邮箱,bool (String value)
isBank: 验证银行卡号,bool (String value)
isVersion: 验证版本号,bool (String value)
isIDCard: 验证身份证号码,bool (String value)
isURL: 验证 URL,bool (String value)
isIP: 验证 IP 地址,bool (String value)
isDate: 验证日期格式(YYYY-MM-DD),bool (String value)
isDateTime: 验证日时间格式(YYYY-MM-DD HH:mm:ss),bool (String value)
isEqual: 验证是否相等(null/String/Map/List),bool (Object? a, Object? b)
isAccount: 验证账号(只包含数字/字母/下划线/减号),bool (String value, [min = 5, max = 16])
isPwd: 验证密码(包含字母、数字、特殊符,任意 2 种),bool (String value, [min = 5, max = 16])
Map
pick: 创建对象中选中属性的新对象,Map<String, dynamic> pick(Map<String, dynamic> source, List<String> props)
omit: 创建对象中忽略属性的新对象,Map<String, dynamic> omit(Map<String, dynamic> source, List<String> props)
mapKeys: 创建格式化对象键的新对象,Map<String, T> mapKeys<T>(Map<String, dynamic> source, String Function(String key) transform)
mapValues: 创建格式化对象值的新对象,Map<String, T> mapValues<T>(Map<String, dynamic> source, T Function(dynamic value) transform)
List
groupBy: 列表分组,List<List<T>> groupBy<T, K>(List<T> items, K Function(T) keySelector)
treeToList: 树转列表,List<Map<String, dynamic>> treeToList(List<Map<String, dynamic>> tree, {String childrenKey = 'children'})
listToTree: 列表转树,List<Map<String, dynamic>> listToTree(List<Map<String, dynamic>> list, String idKey, { String parentKey = 'parentId', String childrenKey = 'children' })
Function
debounce: 防抖函数(停止触发后执行一次,如搜索防抖),Function (Function func, [int delay = 500])
throttle: 节流函数(固定时间内只触发一次,如点击防抖),Function (Function func, [delay = 1500, leading = true])
示例:
UtilsPlus.calcAdd(0.1, 0.2)
UtilsPlus.formatAmount(1280)
UtilsPlus.maskPhoneNumber('18612345678')
UtilsPlus.isEmail('7644689865@qq.com')
UtilsPlus.isDate('2026-01-01')
UtilsPlus.isDateTime('2026-01-01 23:59:59')
Moment 日期时间工具类 #
- 解析
Moment([Object? dateTime]) // 支持格式 DateTime/String/int/Moment
Moment.utc([Object? dateTime]) // 支持格式 DateTime/String/int/Moment
Moment().unix() // 获取时间戳
Moment().toUtc() // 转换为 Utc 时间
Moment().toLocal() // 转换为本地时间
Moment().toDate() // 获取 DateTime 对象
- 操作
// 加法,支持格式 (Duration)/(int, unit['days'|'hours'|'minutes'|'seconds'|'milliseconds'])
Moment Moment().add(Object? value, [String? unit]);
// 减法,支持格式 (Duration)/(int, unit['days'|'hours'|'minutes'|'seconds'|'milliseconds'])
Moment Moment().subtract(Object? value, [String? unit]);
// 获取时差,支持格式 (DateTime/String/int/Moment)
Duration Moment().difference(Object? dateTime);
// 是否之前,支持格式 (DateTime/String/int/Moment)
bool Moment().isBefore(Object? dateTime);
// 是否之后,支持格式 (DateTime/String/int/Moment)
bool Moment().isAfter(Object? dateTime);
// 是否之间,支持格式 (DateTime/String/int/Moment)
bool Moment().isBetween(Object? startTime, Object? endTime);
// 是否相同,支持格式 (DateTime/String/int/Moment, unit['year'|'month'|'day'|'hour'|'minute'|'second'|'millisecond'])
bool Moment().isSame(Object? dateTime, String unit)
- 显示
// 日期格式化
// 格式符: 年(YYYY/YY) / 月(MM/M) / 日(DD/D) / 时(HH/H/hh/h) / 分(mm/m) / 秒(ss/s) / 上下午(A/a)
String Moment().format([String? format])
// 时长格式化(静态方法)
// 格式符: 日(DD/D) / 时(HH/H/hh/h) / 分(mm/m) / 秒(ss/s)
String Moment.duration(Duration duration, String format)
- 相对时间
// 从指定时间到当前时间的相对描述(如"3小时前"),默认当前时间
String Moment().from([Object? dateTime])
// 从当前时间到指定时间的相对描述(如"3小时后"),默认当前时间
String Moment().to([Object? dateTime])
- 国际化
// 切换全局语言,影响 format(A/a)、from()、to() 等方法的输出
Moment.locale = MomentLocale.zhCN; // 简体中文(默认)
Moment.locale = MomentLocale.enUS; // 英文
Moment.locale = MomentLocale.zhTW; // 繁体中文
// 自定义语言包
Moment.locale = const MomentLocale(
second: '秒',
minute: '分钟',
hour: '小时',
day: '天',
month: '个月',
year: '年',
am: '上午',
pm: '下午',
ago: '前',
after: '后',
);
- 时区
Moment([Object? dateTime]).tz(TimezoneId) // 全球时区ID请参考国际标准组织(IANA)文档
备注:
- 如需使用
时区,还需在main函数中执行时区数据库初始化函数(具体详见timezone库), 如下:
import 'package:flutter_utils_plus/flutter_utils_plus.dart';
void main() {
Moment.initializeTimeZones(); // 时区数据库初始化
}
示例:
Moment() // 默认为此刻 等同于 Moment(DateTime.now())
Moment(DateTime.parse('1969-07-20 20:18:04')) // DateTime 格式
Moment('2025-12-01 12:00:00') // 字符串格式
Moment.utc(1318781876406) // 时间戳(毫秒)
Moment.utc('2025-12-01 12:00:00')
Moment().add(1, 'd') // 明天
Moment().add(12, 'hours') // 12小时之后
Moment().add(Duration(days: 7)) // 7天之后
Moment().subtract(1, 'd') // 昨天
Moment().subtract(12, 'hours') // 12小时之前
Moment().subtract(Duration(minutes: 10)) // 10分钟之前
Moment().isBefore('2025-12-01 12:00:00') // 今天是否在该日期之前
Moment().isAfter(DateTime.parse('1969-07-20 20:18:04')) // 今天是否在该日期之后
Moment().isBetween('2025-12-01 12:00:00', '2026-12-01 12:00:00') // 今天是否在该日期之间
Moment().isSame('2025-12-01 12:00:00', 'day') // 该日期是否和今天是用一天
Moment().format() // 2025-01-01 20:12:12.000+0800
Moment().format('YYYY-MM-DD') // 2025-01-01
Moment().format('YYYY-MM-DD HH:mm:ss') // 2025-01-01 20:12:12
Moment().format('A hh:mm') // 上午 09:30(中文)/ AM 09:30(英文)
Moment.duration(Duration(hours: 3, minutes: 30), 'HH:mm') // 03:30
Moment.duration(Duration(days: 1, hours: 2, minutes: 30, seconds: 45), 'D天 HH:mm:ss') // 1天 02:30:45
Moment.duration(Duration(minutes: 90), 'H小时m分钟') // 1小时30分钟
Moment().from('2026-06-02 12:00:00') // 1天前(相对于昨天)
Moment().to('2026-06-04 12:00:00') // 1天后(相对于明天)
Moment.locale = MomentLocale.enUS; // 切换英文
Moment().from('2026-06-02 12:00:00') // 1 day ago
Moment().format('A hh:mm') // AM 09:30
Moment.locale = MomentLocale.zhCN; // 切回中文
Moment.utc('2024-09-01 00:00:00').tz('America/New_York').format('YYYY-MM-DD HH:mm:ss')
Moment('2025-10-01 00:00:00').tz('Asia/Shanghai', true).toUtc().format()