mirror of
https://github.com/gabehf/Fladder.git
synced 2026-03-08 23:18:16 -07:00
Init repo
This commit is contained in:
commit
764b6034e3
566 changed files with 212335 additions and 0 deletions
92
lib/util/list_extensions.dart
Normal file
92
lib/util/list_extensions.dart
Normal file
|
|
@ -0,0 +1,92 @@
|
|||
import 'package:collection/collection.dart';
|
||||
|
||||
extension ListExtensions<T> on List<T> {
|
||||
List<T> replace(T entry) {
|
||||
var tempList = toList();
|
||||
final index = indexOf(entry);
|
||||
tempList.removeAt(index);
|
||||
tempList.insert(index, entry);
|
||||
return tempList;
|
||||
}
|
||||
|
||||
List<T> toggle(T entry) {
|
||||
var tempList = toList();
|
||||
if (contains(entry)) {
|
||||
return tempList..remove(entry);
|
||||
} else {
|
||||
return tempList..add(entry);
|
||||
}
|
||||
}
|
||||
|
||||
bool containsAny(Iterable<T> entries) {
|
||||
for (var value in entries) {
|
||||
if (contains(value)) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
List<T> toggleUnique(T entry) => toggle(entry).toSet().toList();
|
||||
|
||||
List<T> random() {
|
||||
List<T> tempList = this;
|
||||
tempList.shuffle();
|
||||
return tempList;
|
||||
}
|
||||
|
||||
List<T> uniqueBy(dynamic Function(T value) keySelector) {
|
||||
final Map<dynamic, T> uniqueMap = {};
|
||||
|
||||
for (var item in this) {
|
||||
final key = keySelector(item);
|
||||
if (!uniqueMap.containsKey(key)) {
|
||||
uniqueMap[key] = item;
|
||||
}
|
||||
}
|
||||
|
||||
return uniqueMap.values.toList();
|
||||
}
|
||||
|
||||
Iterable<List<T>> chunk(int size) sync* {
|
||||
if (size <= 0) {
|
||||
throw ArgumentError('Chunk size must be greater than zero.');
|
||||
}
|
||||
|
||||
final iterator = this.iterator;
|
||||
while (iterator.moveNext()) {
|
||||
final chunk = <T>[];
|
||||
for (var i = 0; i < size; i++) {
|
||||
if (!iterator.moveNext()) {
|
||||
break;
|
||||
}
|
||||
chunk.add(iterator.current);
|
||||
}
|
||||
yield chunk;
|
||||
}
|
||||
}
|
||||
|
||||
T? nextOrNull(T item) {
|
||||
int indexOf = this.indexOf(item);
|
||||
if (indexOf + 1 >= length) return null;
|
||||
return elementAtOrNull(indexOf + 1);
|
||||
}
|
||||
|
||||
T? previousOrNull(T item) {
|
||||
int indexOf = this.indexOf(item);
|
||||
if (indexOf - 1 < 0) return null;
|
||||
return elementAtOrNull(indexOf - 1);
|
||||
}
|
||||
|
||||
T? nextWhereOrNull(bool Function(T element) test) {
|
||||
final indexOf = indexWhere((element) => test(element));
|
||||
if (indexOf + 1 < length) return null;
|
||||
return elementAtOrNull(indexOf + 1);
|
||||
}
|
||||
|
||||
T? previousWhereOrNull(bool Function(T element) test) {
|
||||
final indexOf = indexWhere((element) => test(element));
|
||||
if (indexOf - 1 < length) return null;
|
||||
return elementAtOrNull(indexOf - 1);
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue