anchor.diff:  
       if (_lines.every((line) => line.isFinished)) {
         resultEl.text = _currentResultText;
  -      _rollCompleter.complete(_currentResultText);
  +      _rollCompleter.complete(_currentResult);
         return;
       }
   
       for (int i = 0; i < slotLines; i++) {
         final line = _lines[i];
  -      _currentResults[i] = line.currentResult;
         if (_timeOfStartOfRoll != null &&
             _lastTime - _timeOfStartOfRoll > line.fullSpeedMilliseconds) {
           line.isSlowingDown = true;
         }
         line.update(dt);
  +      _currentResults[i] = line.currentResult;
       }
   
       // Draw the gradient overlay.
  
positive.code:     _gradient.addColorStop(1, 'rgba(255,255,255,1)');
    }
  
    String get _currentResultText {
      if (_currentResults.any((result) => result == null)) return "";
      final positives = _currentResults.fold(
          0, (int sum, bool result) => sum += result ? 1 : 0);
      final negatives = slotLines - positives;
      if (allowCriticalSuccess && positives == slotLines)
        return _criticalSuccessMsg;
      if (allowCriticalFailure && negatives == slotLines)
        return _criticalFailureMsg;
      if (positives > negatives) return _successMsg;
      if (positives < negatives) return _failureMsg;
      // Slots are always odd.
      throw new StateError("Cannot decide success or fail.");
    }
  
    /// Start rolling the slot machine. Returns with the text of the result.
    Future<String> roll() {
      if (_rollCompleter != null) {
        throw new StateError("Cannot roll one slot machine twice.");
      }
      _rollCompleter = new Completer<String>();
  
      Future
          .wait([_successIcon.onLoad.first, _failureIcon.onLoad.first]).then((_) {
  
negative.code: 
    List<_SlotMachineLine> _lines;
  
    Completer<Result> _rollCompleter;
  
    num _lastTime = 0;
  
  