string_list_map_date_dart
{% note info no-icon %}
今日心情很低落 T.T,所以参考官方文档,略微整理了一下 Dart String、List、Map、Date的常用方法。
String
substring
// 裁剪字符串,尾部开区间 [start, end)。
var string = 'Dart ' + 'is ' + 'fun!'; // 'Dart is fun!'
string.substring(0, 5); // 'Dart '
string.substring(5); // 'is fun!'
string.substring(string.length - 4); // 'fun!'
print('$string 的长度是:${string.length}');
string[0]; // 'D'
codeUnitAt/codeUnits
string = 'Dart';
string.codeUnitAt(0); // 68
string.codeUnits; // [68, 97, 114, 116]
isEmpty/isNotEmpty
字符串是否为空,return bool。
contains
'doubleam'.contains('am'); // true
'doubleam'.contains('o', 2); // false
indexOf/lastIndexOf
'doubleam'.indexOf('d'); // 0
'doubleam'.lastIndexOf('x'); // -1
padLeft/padRight
'hxb'.padLeft(6, 'x'); // 'xxxhxb'
'hxb'.padRight(6, 'x'); // 'hxbxxx'
startsWith/endsWith
'hxb love oqm'.startsWith('hxb'); // true
'hxb love oqm'.startsWith('love', 4); // true
'hxb love oqm'.endsWith('oqm'); // true
replaceAll
// replaceAll(Pattern from, String replace)
"Hello World".replaceAll('World', 'Dart'); // 'Hello Dart'
RegExp testReg = new RegExp(r"^\w{5}$");
"Hello World".replaceAll(testReg, '*******'); // '******* World'
compareTo
// 比较字符串,等于返回 0,小于返回 -1,大于返回 1。
"C".compareTo('C'); // 0
"C".compareTo('CC'); // -1
"C".compareTo('BBB'); // 1
"C".compareTo('B'); // 1
toLowerCase/toUpperCase
'aBc'.toLowerCase(); // 'abc'
'aBc'.toUpperCase(); // 'ABC'
trim
' abc '.trim(); // 'a'
trimLeft/trimRight
' abc '.trimLeft(); // 'abc '
' abc '.trimRight(); // ' abc'
split
'a,b,c,d,e'.split(','); // [a, b, c, d, e]
List
isEmpty/isNotEmpty
List 是否为空,return bool。
first/last
[1, 2, 3, 4].first; // 1
[1, 2, 3, 4].last; // 4
[1, 2, 3].reversed.toList(); // [3, 2, 1]
add
List testList = [1, 2, 3];
testList.add(4);
print(testList); // [1, 2, 3, 4]
addAll
List testList = [1, 2, 3];
testList.addAll([1, 2, 3]);
print(testList); // [1, 2, 3, 1, 2, 3]
any
List testList = [1, 2, 3];
testList.any((item) => item > 1); // 任意一项 > 1 则返回 true。
every
[1, 2, 1].every((item) => item == 1); // false
[1, 1, 1].every((item) => item == 1); // true
where
[1, 2, 3].where((item) => item > 1).toList(); // [2, 3]
asMap
List testList = [1, 2, 3];
testList.asMap(); // {0: 1, 1: 2, 2: 3}
clear
List testList = [1, 2, 3];
testList.clear();
print(testList); // []
contains
[1, 2, 3].contains(1); // true
firstWhere
[1, '2020', 1].firstWhere((item) => item == '2020'); // '2020'
indexWhere/lastIndexWhere
[1, 2, 3].indexWhere((item) => item == 3, 2); // = 2 // 从 List 索引为 2 开始向后查找等于 3 的索引位置。
[1, 2, 1].lastIndexWhere((item) => item == 1); // = 2
indexOf/lastIndexOf
[1, 2, 3].indexOf(9); // -1
[1, 2, 1].lastIndexOf(1); // 2
insert
List testList = [1, 3, 4];
testList.insert(1, 2);
print(testList); // [1, 2, 3, 4]
insertAll
List testList = [1, 4, 5];
testList.insertAll(1, [2, 3]);
print(testList); // [1, 2, 3, 4, 5]
elementAt
List testList = [1, 2, 3];
testList.elementAt(0) == testList[0]; // true
expand
List testList1 = [[1, 2], [3], [4, 5]];
List flatList= testList1.expand((item) => item).toList();
print(flatList); // [[1, 2, 3, 4, 5]
List testList2 = [1, 2, 3];
List computed = testList2.expand((item) => [item * 10]).toList();
print(computed); // [10, 20, 30]
fillRange
List testList = [1, 2, 3];
testList.fillRange(0, 3, 10); // 修改 List 元素,尾部开区间。
print(testList); // [10, 10, 10]
from
List testList = [1, 2, 3];
var clonedList = List.from(testList);
print(clonedList); // [1, 2, 3]
forEach
[1, 2, 3].forEach((item) => print(item)); // 1, 2, 3
map
List testList = [1, 2, 3];
print(testList.map((item) => item * 100).toList(); // [100, 200, 300]
reduce/fold
// 二者都是累加器,fold 可以设置初始值。
[1, 2, 3].reduce((item, nextItem) => item + nextItem); // 6
[1, 2, 3].fold(10, (item, nextItem) => item + nextItem); // 16
toSet
// 转换为 Set,常用于去重。
[1, 1, 2, 2, 3].toSet().toList(); // [1, 2, 3]
remove
// 删除元素,如果 List 中有多个符合条件的值,只会会删除List 中第一个符合条件的元素,改变原 List。
List testList = [1, 2, 3, 1];
testList.remove(1);
print(testList); // [2, 3, 1]
removeAt
// 删除 List 中指定索引位置的元素,返回被删除的内容,改变原 List。
List testList = [1, 2, 3, 1];
print(testList.removeAt(0)); // 1
print(testList); // [2, 3, 1]
removeLast
// 字面意思
List testList = [1, 2, 3, 1];
print(testList.removeLast()); // 1
print(testList); // [1, 2, 3]
removeWhere
List testList = [1, 2, 3, 1];
testList.removeWhere((item) => item == 1);
print(testList); // [2, 3]
removeRange
List testList = [1, 2, 3, 1];
testList.removeRange(0, 3); // 尾部开区间
print(testList); // [1]
getRange
List testList = [1, 2, 3, 1];
print(testList.getRange(0, 3).toList()); // [1, 2, 3] // 尾部开区间
join
[1, 2, 3].join(','); // 1,2,3
replaceRange
List testList = [1, 2, 3, 4, 5, 6];
testList.replaceRange(0, 3, [10, 11, 12, 13]);
print(testList); // [10, 11, 12, 13, 4, 5, 6]
shuffle
List testList = [1, 2, 3, 4, 5, 6];
testList.shuffle();
print(testList); // 打乱 List
setAll
List testList = [1, 2, 3, 4, 5, 6];
testList.setAll(1, [0, 0, 0]);
print(testList); // [1, 0, 0, 0, 5, 6]
setRange
List testList = [1, 2, 3, 4, 5, 6];
testList.setRange(0, 3, [0, 0, 0]);
print(testList); // [0, 0, 0, 4, 5, 6]
take/skip
// take 从 List 里取 n 个元素,skip 跳过 List 中的 n 个元素。
List testList = [1, 2, 3, 4, 5, 6];
print(testList.take(3).toList()); // [1, 2, 3]
print(testList.skip(4).toList()); // [5, 6]
print(testList.take(3).skip(2).take(1).toList()); // [3]
sort
List testStringList = ['a', 'aaa', 'A', 'BBB', 'C', 'z'];
List testStringList.sort((item, nextItem) => item.compareTo(nextItem));
testList.sort((item, nextItem) => item.compareTo(nextItem));
print(testList); // 1, 2, 3, 4, 5, 6]
print(testStringList); // [A, BBB, C, a, aaa, z]
sublist
List testList = [1, 2, 3, 4, 5, 6];
print(testList.sublist(0, 3)); // [1, 2, 3]
print(testList); // 1, 2, 3, 4, 5, 6]
Map
entries
Map testMap = {'a':1, 'b':2, 'c':3};
print(testMap.entries.toList());
// [MapEntry(a: 1), MapEntry(b: 2), MapEntry(c: 3)]
keys
Map testMap = {'a':1, 'b':2, 'c':3};
print(testMap.keys.toList());
// [a, b, c]
values
Map testMap = {'a':1, 'b':2, 'c':3};
print(testMap.values.toList());
// [1, 2, 3]
isEmpty/isNotEmpty
Map 是否为空,return bool。
addAll
Map testMap = {'a':1, 'b':2, 'c':3};
testMap.addAll({'a':100, 'd':99});
print(testMap); // {a: 100, b: 2, c: 3, d: 99}
testMap = {
...testMap,
'a': 'hello',
'x': 'world'
};
print(testMap); // {a: 'hello', b: 2, c: 3, d: 99, x: 'world'}
addEntries
Map testMap = {'a':1, 'b':2, 'c':3};
testMap.addEntries({'a':100, 'd':99}.entries);
print(testMap); // {a: 100, b: 2, c: 3, d: 99}
clear
Map testMap = {'a':1, 'b':2, 'c':3};
testMap.clear();
print(testMap); // {}
containsKey
Map testMap = {'a':1, 'b':2, 'c':3};
testMap.containsKey('a'); // true
testMap.containsKey('d'); // false
containsValue
Map testMap = {'a':1, 'b':2, 'c':3};
testMap.containsValue(1); // true
testMap.containsValue('1'); // false
forEach
Map testMap = {'a':1, 'b':2, 'c':3};
testMap.forEach((key, value) {
print('$key => $value'); // 1 => a , 2 => b , 3 => c
});
map
Map testMap = {'a':1, 'b':2, 'c':3};
Map newMap = testMap.map((key, value){
return MapEntry(value, key);
});
print(newMap); // {1: a, 2: b, 3: c}
putIfAbsent
// 向一个 Map 中添加不存在的键值对,如果 key 已经存在,则原 Map 不变。
Map testMap = {'a':1, 'b':2, 'c':3};
testMap.putIfAbsent('a', () => 'hello');
testMap.putIfAbsent('d', () => 'world');
print(testMap); // {a: 1, b: 2, c: 3, d: world}
remove
// 接收一个 key 作为参数,从 Map 中删除对应的键值对。
Map testMap = {'a':1, 'b':2, 'c':3};
testMap.remove('a');
print(testMap); // {b: 2, c: 3}
removeWhere
// 接收一个 function 作为参数,从 Map 中删除符合条件的键值对。
Map testMap = {'a':1, 'b':2, 'c':3};
testMap.removeWhere((key, value) => value > 1);
print(testMap); // {a: 1}
update
Map testMap = {'a':1, 'b':2, 'c':3};
testMap.update('a', (value) => value + 100);
print(testMap); // {a: 101, b: 2, c: 3}
updateAll
Map testMap = {'a':1, 'b':2, 'c':3};
testMap.updateAll((key, value) => value * 100);
print(testMap); // {a: 100, b: 200, c: 300}
from
Map testMap = {'a':1, 'b':2, 'c':3};
Map newMap = Map.from(testMap);
print(testMap); // // {a: 1, b: 2, c: 3}
print(newMap); // {a: 1, b: 2, c: 3}
Date
基础
new DateTime.now(); // 获取当前时间 2020-08-13 16:10:13.098
DateTime(2020, 8, 12, 12, 12, 30); // 设置时间 2020-08-12 12:12:30.000
DateTime.parse('2020-01-01 09:30:36'); // 解析时间 2020-01-01 09:30:36.000
DateTime.tryParse('2020-1-01 09:30:36'); // 解析时间 null,格式不对返回 null,parse 会报错。
DateTime time = DateTime.parse('2020-01-11 09:30:36');
print(time.hashCode); // 305754722
print(time.year); // 2020
print(time.month); // 1
print(time.day); // 11
print(time.hour); // 9
print(time.minute); // 30
print(time.second); // 36
print(time.millisecond); // 0
print(time.microsecond); // 0
print(time.weekday); // 6
print(time.isUtc); // false
print(time.millisecondsSinceEpoch); // 毫秒 13 位时间戳
print(time.microsecondsSinceEpoch); // 微秒 16 位时间戳
/// 人性化时间
String timeSince(DateTime date, {bool longago = false, formater = "yyyy-mm-dd hh:ii:ss"}) {
DateTime now = new DateTime.now();
if(now.isBefore(date)) {
return dateFormat(date, format: formater);
}
var interval = now.difference(date);
if (longago) {
int months = interval.inDays ~/ 30; // 向下取整,Dart 独有运算符。
if (months >= 4) {
return dateFormat(date, format: formater);
}
if (months >= 1) {
return "$months 月前";
}
int weeks = interval.inDays ~/ 7;
if (weeks >= 1) {
return "$weeks 周前";
}
}
if (interval.inDays >= 8) {
return dateFormat(date, format: formater);
}
if (interval.inDays >= 1) {
return "${interval.inDays} 天前";
}
if (interval.inHours >= 1) {
return "${interval.inHours} 小时前";
}
if (interval.inMinutes >= 1) {
return "${interval.inMinutes} 分钟前";
}
return "刚刚";
}
以上代码中,使用正则进行时间转换的方法 dateFormat,可以通过链接前往参考哦...
add
// 加 10 分钟
DateTime.now().add(Duration(minutes: 10));
// 减 1 小时
DateTime.now().add(Duration(hours: -1));
subtract
// 加 10 分钟
DateTime.now().subtract(Duration(minutes: -10));
// 减 1 小时
DateTime.now().subtract(Duration(hours: 1));
compareTo
DateTime now = DateTime.now();
now.compareTo(now.add(Duration(hours: -1))); // 1
now.compareTo(now); // 0
now.compareTo(now.add(Duration(minutes: 10))); // -1
difference
// 计算时间差
DateTime now = DateTime.now();
now.difference(now.add(Duration(hours: -1))); // 1:00:00.000000
var differenceObj1 = now.add(Duration(minutes: 10)).difference(now); // 0:10:00.000000
var differenceObj2 = now.difference(now.add(Duration(minutes: 10))); // -0:10:00.000000
print([differenceObj1.inDays, differenceObj1.inHours, differenceObj1.inMinutes]); // [0, 0, 10]
print([differenceObj2.inDays, differenceObj2.inHours, differenceObj2.inMinutes]); // [0, 0, -10]
isAfter
DateTime now = DateTime.now();
now.isAfter(now.add(Duration(hours: -1))); // true
isBefore
DateTime now = DateTime.now();
now.isBefore(now.add(Duration(hours: -1))); // false
toIso8601String
DateTime.now().toIso8601String(); // 2020-08-13T16:10:13.098
toLocal/toString/toUtc
print(DateTime.now().toLocal()); // 转为本地时间
print(DateTime.now().toString()); // 转字符串
print(DateTime.now().toUtc()); // 转 UTC
is-print-log
// is 操作符能够判断类型,比如 A is B,能够返回 bool 类型,判断 A 是否属于 B 类型。
var test = 123;
if(test is String) {
print('${test} is string');
} else if (value is int) {
print('${test} is int');
} else if (value is double) {
print('${test} is double');
} else {
print('${test} is other type');
}
// print 可以打印我们调试的信息,但是数据很长时会打印不全,并且会影响渲染速度。
print('hello world!');
// log 只能打印字符串,在数据很长时可以全部打印出来,并且控制台会高亮,也会影响渲染速度。
log('hello world!');
// 建议设置一个全局变量定义开发环境,只在开发环境打印 log 或者 print。