extension ListExt on List{ /// Remove all blank value and return the list. List getNoBlankList(){ List newList = []; for(var value in this){ if(value.toString() != ""){ newList.add(value); } } return newList; } T? firstWhereOrNull(bool Function(T element) test){ for(var element in this){ if(test(element)){ return element; } } return null; } void addIfNotNull(T? value){ if(value != null){ add(value); } } /// Compare every element of this list with another list. /// Return true if all elements are equal. bool isEqualTo(List list){ if(length != list.length){ return false; } for(int i=0; i replaceAll("\n", "").replaceAll(" ", "").replaceAll("\t", ""); /// convert this to a one-element list. List toList() => [this]; String _nums(){ String res = ""; for(int i=0; i _nums(); String setValueAt(String value, int index){ return replaceRange(index, index+1, value); } String? subStringOrNull(int start, [int? end]){ if(start < 0 || (end != null && end > length)){ return null; } return substring(start, end); } String replaceLast(String from, String to) { if (isEmpty || from.isEmpty) { return this; } final lastIndex = lastIndexOf(from); if (lastIndex == -1) { return this; } final before = substring(0, lastIndex); final after = substring(lastIndex + from.length); return '$before$to$after'; } bool _isURL(){ final regex = RegExp( r'^((http|https|ftp)://)[\w-]+(\.[\w-]+)+([\w.,@?^=%&:/~+#-|]*[\w@?^=%&/~+#-])?$', caseSensitive: false); return regex.hasMatch(this); } bool get isURL => _isURL(); bool get isNum => double.tryParse(this) != null; bool get isInt => int.tryParse(this) != null; } abstract class ListOrNull{ static List? from(Iterable? i){ return i == null ? null : List.from(i); } } abstract class MapOrNull{ static Map? from(Map? i){ return i == null ? null : Map.from(i); } }