flutter painting on canvas and erase drawing

742 Views Asked by At

i am working on a canvas drawing module in to it i need to erase user drawing

basic funda is

  1. adding image in canvas
  2. user can draw on image using pencil (i.e black color) now user can erase this black color on erase function (i.e clear user drawing )

my try is :

case PaintMode.eraser:
              print('eraser**** _image Painter!!!*'); // print(_painter.color)
              //  canvas.saveLayer(Offset.zero & size, Paint());1
              var _painterTemp = _painter!
                // ..color = Colors.transparent.withOpacity(0.8)//also tried it
                ..strokeCap = StrokeCap.round
                ..blendMode = BlendMode.clear;
    
              for (var i = 0; i < _offset!.length - 1; i++) {
                if (_offset[i] != null && _offset[i + 1] != null) {
                  final _path = Path()
                    ..moveTo(_offset[i]!.dx, _offset[i]!.dy)
                    ..lineTo(_offset[i + 1]!.dx, _offset[i + 1]!.dy);
                
                } else if (_offset[i] != null && _offset[i + 1] == null) {
                 
                  canvas.drawPoints(PointMode.points, [_offset[i]!], _painterTemp);
                }
              }
              //   canvas.restore();//1
    
              break

but i am getting black lines only

took reference from https://github.com/yellowQ-software/yellowQ-Flutter-Image-Painter

edit----- i've edited like

case PaintMode.eraser:
          print('eraser**** _image Painter!!!*');

       
          var _painterTemp = _painter!
            ..color = Colors.transparent
            ..blendMode = BlendMode.clear; //srcOver

          for (var i = 0; i < _offset!.length - 1; i++) {
            if (_offset[i] != null && _offset[i + 1] != null) {
              final _path = Path()
                ..moveTo(_offset[i]!.dx, _offset[i]!.dy)
                ..lineTo(_offset[i + 1]!.dx, _offset[i + 1]!.dy);

              canvas.drawPath(_path, _painter);

              canvas.drawPath(_path, _painterTemp);
              canvas.saveLayer(Offset.zero & size, Paint());
            } else if (_offset[i] != null && _offset[i + 1] == null) {
              canvas.drawPoints(PointMode.points, [_offset[i]!], _painter);
              canvas.drawPoints(PointMode.points, [_offset[i]!], _painterTemp);
            }
            //  canvas.saveLayer(Offset.zero & size, Paint()); //1
          }
          //   canvas.restore();//1

          break;

but not working but getting custom painter called canvas.save() or canvas.saveLayer() at least 773 more times than it called canvas.restore().

any help?

0

There are 0 best solutions below