tick method

  1. @override
void tick()
override

Implementation

@override
void tick() {
  final buffer = StringBuffer();

  // Randomize drop starting points
  for (var c = 0; c < cols; c++) {
    if (_drops[c] == -1 &&
        (c + DateTime.now().millisecondsSinceEpoch) % 5 == 0) {
      _drops[c] = 0;
    }
  }

  // Build line by line
  for (var r = 0; r < rows; r++) {
    final lineBuffer = StringBuffer();
    for (var c = 0; c < cols; c++) {
      if (_drops[c] == r) {
        final char = _chars[(r + c) % _chars.length];
        lineBuffer.write(char);
      } else {
        lineBuffer.write(' ');
      }
    }
    buffer.write(lineBuffer.toString());
    if (r < rows - 1) buffer.write('\n');
  }

  // Advance drops down
  for (var c = 0; c < cols; c++) {
    if (_drops[c] >= 0) {
      _drops[c]++;
      if (_drops[c] >= rows) _drops[c] = -1;
    }
  }

  write(buffer.toString());
}