A library to supply sequential or random objects within the given range and repeats


  • The base class DataWalker supplies sequential or random indices between 0 and length, and reiterates the process for a given number of repeats
  • Derived classes supply sequential or random objects (date/times, ints, nums, random Unicode strings, iterables) mapped to the indices generated by the base class
  • Sequential or random pre-defined strings can be generated using a list of strings.
  • Random strings are implemented via StringWalker with the help of the random_unicode package.


The working example which can also be found in the repository in example/data_walker_example.dart

import 'dart:math';

import 'package:data_walker/data_walker.dart';

/// Custom Color class for the example
enum Color {

  String toString() => name;

/// Custom IconColor class for the example
class IconColors {
  final Color fg;
  final Color bg;
  IconColors(this.fg, this.bg);
  String toString() => '$fg on $bg';

/// Custom IconSizePrice class for the example
class IconSizePrice {
  final int size;
  final num price;
  IconSizePrice(this.size, this.price);
  String toString() => '$size x $size, Price: \$${price.toStringAsFixed(2)}';

/// Main entry point for the example
void main() {
  print('\n*** Sequential Aggregated ListWalkers ***\n');

  final walkers = <String, DataWalker>{
    'Icon': ListWalker<String>([
    'Colors': ListWalker<IconColors>([
      IconColors(Color.black, Color.white),
      IconColors(Color.white, Color.black),
      IconColors(Color.yellow, Color.blue),
      IconColors(Color.blue, Color.yellow),
    'Size': ListWalker<IconSizePrice>([
      IconSizePrice(16, 0.10),
      IconSizePrice(24, 0.15),
      IconSizePrice(32, 0.20),
      IconSizePrice(48, 0.25),
      IconSizePrice(64, 0.30),
      IconSizePrice(80, 0.35),
      IconSizePrice(96, 0.40),

      repeats: 1,
      valueProc: (values) {
        print(walkers.valuesToString(values, useKeys: false));

  print('\n*** Sequential Plain NumWalker ***\n');

  var walker = NumWalker(0.1, 1.0, step: 0.05, repeats: 2);

  while (true) {
    final n = walker.next().toStringAsFixed(2);

    if (walker.isFinished) {

    print('r:${walker.repeatNo + 1}, #${walker.currentNo + 1}: $n');

  print('\n*** Random Plain NumWalker ***\n');

  walker = walker.copyWith(repeats: 10, random: Random.secure());

  while (true) {
    final n = walker.next().toStringAsFixed(2);

    if (walker.isFinished) {

    print('r:${walker.repeatNo + 1}, #${walker.currentNo + 1}: $n');


data_walker exports