A Dart package that helps to implement a string index.



class Element {
  const Element(..., this.position);

  final int position;  // 4

With a order number based ranking system, re-ordering a element of a list may require updating all elements of the list, which is O(n).

element position
... ...
apple 3
from _ to here Oh ho!
No room between 3 and 4.
pear 4
raspberry 5

Well, let's try adding zeros.

element position
... ...
apple 300
from _ to here Now, you can add 99 elements
before changing anything.
pear 400
raspberry 500

What if we don't use numbers?

With rank

class Element {
  const Element(..., this.rank);
  final String rank; // knar

Using a string-based range, this is done with O(1). All you have to do is to update the rank field of the reordered element.

element rank
... ...
apple kra
a sweet fruit added kran
pear krb
raspberry krc

Then, to get your sorted list you could perform this query in your database:

SELECT * FROM "_" ORDER BY "rank";


First, add the plugin rank to your pubspec.yaml file:

  rank: ^0.1.1

Import rank in files that it will be used:

import 'package:rank/rank.dart';

Next, you must initialize the plugin:

Rank rank = Rank();

To get a rank use generate

sweetFruitRank = rank.generate(previous: appleRank, next: pearRank);


Please file any issues, bugs or feature request as an issue on our GitHub page.


If you would like to contribute to the plugin (e.g. by improving the documentation, solving a bug or adding a cool new feature or you'd like an easier or better way to do something), consider opening a pull request.