Flutter列表工具插件list_utilities的使用
Flutter列表工具插件list_utilities的使用
list_utilities
list_utilities
是一个包含基本扩展方法的库,用于 [Iterable]
、[List]
和 [Set]
。它还包含一个基类,用于实现更高层次的 [List]
实现。
使用
import 'package:list_utilities/list_utilities.dart';
Iterable 方法
扩展 [Iterable]
的方法也可用在 [List]
、[Set]
或其他 [Iterable]
的实现上。
随机
random
方法从可迭代对象中返回一个随机值。
final numbers = <int>[0, 1, 2, 3, 4];
print(numbers.random()); // 3 (或其它数字)
匹配
matches
方法返回 true
,如果另一个可迭代对象与调用者具有相同的长度,并且包含所有相同的元素。
matches
有一个可选参数 [ordered]
,如果为 true
,则需要每个可迭代对象中的元素顺序相同才能满足 [matches]
。
final numbersA = <int>{1, 2, 3, 4, 5};
final numbersB = <int>{5, 4, 3, 2, 1};
print(numbersA.matches(numbersB)); // true
print(numbersA.matches(numbersB, ordered: true)); // false
List 方法
获取随机
getRandom
方法返回一个新的集合,其中包含来自集合的随机元素。
final numbers = <int>[0, 1, 2, 3, 4];
print(numbers.getRandom(3)); // [3, 1, 4] (或任何其他组合)
移除随机
removeRandom
方法从列表中随机移除并返回一个元素。
final numbers = <int>[0, 1, 2, 3, 4];
print(numbers.removeRandom()); // 3 (或任何其他数字)
print(numbers); // [0, 1, 2, 4]
注意:removeRandom
仅在 [List]
和 [Set]
中可用,但不在 [Iterable]
中,因为 [Iterable]
缺乏移除元素的方法,除非先将其转换为 [List]
或 [Set]
。
移除空值
removeNull
方法从列表中移除所有的 null
值。
final numbers = <int>[0, 1, null, 3, null];
numbers.removeNull();
print(numbers); // [0, 1, 3]
移除第一个
removeFirst
方法移除列表中的第一个项目。
final numbers = <int>[0, 1, 2, 3, 4];
print(numbers.removeFirst()); // 0
print(numbers); // [1, 2, 3, 4]
移除第一个满足条件的
removeFirstWhere
方法遍历列表并移除第一个满足测试条件的元素。
final numbers = <int>[0, 1, 2, 3, 4];
numbers.removeFirstWhere((number) => number.isOdd);
print(numbers); // [0, 2, 3, 4]
移除最后一个满足条件的
removeLastWhere
方法反向遍历列表并移除第一个满足测试条件的元素。
final numbers = <int>[0, 1, 2, 3, 4];
numbers.removeLastWhere((number) => number.isOdd);
print(numbers); // [0, 1, 2, 4]
移动位置
shift
方法移动列表中元素的顺序。
shift
可以提供一个正数来将元素向上移动列表,或提供一个负数来将元素向下移动列表。
final numbers = <int>[0, 1, 2, 3, 4];
numbers.shift(2);
print(numbers); // [3, 4, 0, 1, 2]
numbers.shift(-3);
print(numbers); // [1, 2, 3, 4, 0];
提取子集
pluck
方法从指定的开始位置到结束位置(如果 end
为 null
则到列表末尾)移除并返回一个子集的元素。
final numbers = <int>[0, 1, 2, 3, 4, 5, 6, 7, 8, 9];
print(numbers.pluck(3, 8)); // [3, 4, 5, 6, 7]
print(numbers); // [0, 1, 2, 8, 9]
调整大小并填充
resizeAndFill
方法根据提供的值添加或删除列表中的元素。
final numbers = <int>[0, 1, 2, 3, 4];
numbers.resizeAndFill(-2, 0);
print(numbers); // [0, 1, 2]
numbers.resizeAndFill(2, 0);
print(numbers); // [0, 1, 2, 0, 0]
调整大小并生成
resizeAndGenerate
方法根据提供的生成器添加或删除列表中的元素。
final numbers = <int>[0, 1, 2, 3, 4];
numbers.resizeAndGenerate(5, (index) => index);
print(numbers); // [0, 1, 2, 3, 4, 0, 1, 2, 3, 4]
numbers.resizeAndGenerate(-5, (index) => index);
print(numbers); // [0, 1, 2, 3, 4]
移除指定数量的元素
removeFrom
方法从指定的索引开始移除指定数量的元素。
final numbers = <int>[0, 1, 2, 3, 4];
numbers.removeFrom(3, 2);
print(numbers); // [0, 1, 2]
numbers.removeFrom(0, 2);
print(numbers); // [2]
从列表末尾移除指定数量的元素
removeFromEnd
方法从列表末尾移除指定数量的元素。
final numbers = <int>[0, 1, 2, 3, 4];
numbers.removeFromEnd(2);
print(numbers); // [0, 1, 2]
更新指定索引的元素
transform
方法更新指定索引处的元素为其提供的转换函数返回的值。
final numbers = <int>[0, 1, 2, 3, 4];
numbers.transform(2, (number) => number * 2);
print(numbers); // [0, 1, 4, 3, 4]
更新列表中的所有元素
transformAll
方法更新列表中的每个元素为其提供的转换函数返回的值。
final numbers = <int>[0, 1, 2, 3, 4];
numbers.transformAll((number) => number * 2);
print(numbers); // [0, 2, 4, 6, 8]
计算某个对象的实例数量
count
方法返回列表中提供的对象的实例数量。
final numbers = <int>[0, 0, 1, 2, 1, 0, 0];
print(numbers.count(0)); // 4
print(numbers.count(1)); // 2
print(numbers.count(2)); // 1
Set 方法
获取随机
getRandom
方法返回一个包含来自集合的随机元素的新集合。
final numbers = <int>{0, 1, 2, 3, 4};
print(numbers.getRandom(3)); // {3, 1, 4} (或任何其他组合)
移除随机
removeRandom
方法从集合中随机移除并返回一个元素。
final numbers = <int>{0, 1, 2, 3, 4};
print(numbers.removeRandom()); // 3 (或任何其他数字)
print(numbers); // {0, 1, 2, 4}
注意:removeRandom
仅在 [List]
和 [Set]
中可用,但不在 [Iterable]
中,因为 [Iterable]
缺乏移除元素的方法,除非先将其转换为 [List]
或 [Set]
。
移除第一个
removeFirst
方法移除集合中的第一个元素并返回被移除的元素。
final numbers = <int>{0, 1, 2, 3, 4};
print(numbers.removeFirst()); // 0
print(numbers); // {1, 2, 3, 4}
移除最后一个
removeLast
方法移除集合中的最后一个元素并返回被移除的元素。
final numbers = <int>{0, 1, 2, 3, 4};
print(numbers.removeLast()); // 4
print(numbers); // {0, 1, 2, 3}
移除范围内的元素
removeRange
方法移除集合中的范围内的元素。
注意:此方法不应在无序集合(如 [HashSet]
)上使用。
final numbers = <int>{0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
numbers.removeRange(3, 8);
print(numbers); // {0, 1, 2, 8, 9}
移动位置
shift
方法移动集合中元素的顺序。
shift
可以提供一个正数来将元素向上移动集合,或提供一个负数来将元素向下移动集合。
final numbers = <int>{0, 1, 2, 3, 4};
numbers.shift(2);
print(numbers); // {3, 4, 0, 1, 2}
numbers.shift(-3);
print(numbers); // {1, 2, 3, 4, 0};
提取子集
pluck
方法从指定的开始位置到结束位置(如果 end
为 null
则到集合末尾)移除并返回一个子集的元素。
注意:此方法不应在无序集合(如 [HashSet]
)上使用。
final numbers = <int>{0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
print(numbers.pluck(3, 8)); // {3, 4, 5, 6, 7}
print(numbers); // {0, 1, 2, 8, 9}
合并两个集合
+
运算符返回一个新的 [Set]
,通过将第二个 [Set]
的值追加到第一个 [Set]
的末尾。
final numbersA = <int>{1, 2, 3};
final numbersB = <int>{4, 5, 6};
print(numbersA + numbersB); // {1, 2, 3, 4, 5, 6}
base_list
import 'package:list_utilities/base_list.dart';
base_list
库暴露了一个抽象类 [BaseList]
,以及一组 typedef
供实现类重写方法时使用。
[BaseList]
实现了 [List<E>]
并包装了另一个 [List<E>]
,即 [BaseList]
的方法接口与之交互的 [elements]
。
[BaseList]
用于在需要实现新类型的列表但不必定制所有必要的列表方法的情况下。
与 [List]
不同,[BaseList]
需要 [growable]
参数;这不一定意味着包装的列表 [elements]
是否为固定长度列表。
注意:修改 [elements]
长度的重写方法应尊重 [growable]
,并在用户尝试修改列表长度时抛出 [UnsupportedError]
,无论 [elements]
是否为固定长度列表。
/// 一个实现了 `List<E>` 的类,该类存储了一个列表,
/// 即使这些元素后来已被删除。
class HistoryList<E> extends BaseList<E> {
const HistoryList() : super([], growable: true);
List<E> get history => List<E>.from(_history);
final _history = <E>[];
[@override](/user/override)
void add(E value) {
elements.add(value);
_history.add(value);
}
[@override](/user/override)
void addAll(Iterable<E> iterable) {
elements.addAll(iterable);
_history.addAll(iterable);
}
[@override](/user/override)
void insert(int index, E element) {
elements.insert(index, element);
_history.add(element);
}
[@override](/user/override)
void insertAll(int index, Iterable<E> iterable) {
elements.insertAll(index, iterable);
_history.addAll(iterable);
}
}
更多关于Flutter列表工具插件list_utilities的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html