anchor.diff:        _ctx = _canvas.context2d;
         _ctx.fillStyle = 'black';
       }
  +
  +    final size = Math.sqrt(_squares.length).toInt();
  +
  +    final minDimension = Math.min(_canvas.width, _canvas.height);
  +
  +    final scale = minDimension ~/ size;
  +
  +    final offset = (minDimension - (scale * size)) ~/ 2;
  +
   
       _ctx.clearRect(0, 0, _canvas.width, _canvas.height);
   
  
positive.code:   }
  }
  
  class _QrCalc extends core.SendPortValue<String, List<bool>> {
    _QrCalc() : super(spawnFunction(_qrIsolate));
  }
  
  void _qrIsolate() {
    final errorCorrectLevel = QrDemo.errorCorrectLevel;
    final typeNumber = QrDemo.typeNumber;
    final size = QrDemo.size;
  
    new core.SendValuePort<String, List<bool>>((String input){
      final code = new core.QrCode(typeNumber, errorCorrectLevel);
      code.addData(input);
      code.make();
  
      final List<bool> squares = new List<bool>();
  
      for(int x = 0; x < size; x++) {
        for(int y = 0; y < size; y++) {
          squares.add(code.isDark(y, x));
        }
      }
  
negative.code:   core.EventRoot get error() => _qrMapper.error;
  
    void updateValue(String value) {
      _value = value;
      _update();
    }
  
    void _update() {
      _qrMapper.input =
          new core.Tuple3<int,int,String>(_typeNumber, _errorCorrectLevel, _value);
    }
  
    void requestFrame(){
  