关于
一个字符串生成器,可帮助实现有序序列的实时编辑。
它使重排、排序、交错事务更快、更简单。
用法
-
在字典序(词典序或字母序)中获取两个字符串之间的字符串。
final mid = between(prev: 'B', next: 'D'); assert( areEqual( [mid, 'D', 'B']..sort(), ['B', mid, 'D'], ), );
-
生成顺序键.
final keyCount = 100; final orderKeys = generateOrderKeys(keyCount);
这在以下情况很有用
-
表(集合)为空时,无法使用
between。Future<void> addTodo(CreateTodo command) async { final String orderKey = todos.isEmpty ? generateOrderKeys(1).first // <== : between(prev: todos.last.orderKey); final todo = await todoRepository.create(command, orderKey); todos.add(todo); }
-
迁移到高效的有序系统时。
Future<void> migrateToLexicalOrderSystem(Table table) async { final itemCount = table.count(); final orderKeys = generateOrderKeys(itemCount); /* omitted */ }
-
注意
between函数仅接受允许的字符作为参数
更具体地说,between内部使用了以下代码。
LexOrderValidator().checkBetweenArgs(prev: prev, next: next);
LexOrderValidator检查以下约束
-
prev和next都必须由字母组成。 -
prev.isNotEmpty && next.isNotEmpty -
prev != null && next != null -
next != 'A' -
prev != next -
prev[prev.length-1] != 'A' && next[next.length-1] != 'A' -
prev.compareTo(next) == -1,例如between(prev: 'C', next: 'B');
在调试模式下,如果违反上述约束,您会收到错误。但在发布模式下不会。您可以使用LexOrderValidator手动检查约束。
我建议您仅使用between和generateOrderKey来生成键。因为该软件包仅为此场景而设计。如果您为between函数使用来自其他来源的参数,您的数据的有序状态可能会被破坏。