2017-05-13 6 views
0

Hallo, ich bin ziemlich neu in Dart. Was ich gerne erreichen würde, ist, dass ich regelmäßig auf Leinwand zeichne und das vorherige Material dort belasse.Draw zu Canvas regelmäßig in Dart

import 'dart:developer'; 
import 'dart:typed_data'; 
import 'dart:ui' as ui; 


Duration timeBase; 
double x = 0.0; 
double y = 0.0; 
int i = 0; 

ui.Image image; 

void beginFrame(Duration timeStamp){ 
    Timeline.timeSync('beginFrame',(){ 
    if(timeBase == null)timeBase = timeStamp; 
    final double devicePixelRatio = ui.window.devicePixelRatio; 
    // paint 
    ui.Rect paintBounds = ui.Offset.zero & ui.window.physicalSize; 
    ui.PictureRecorder recorder = new ui.PictureRecorder(); 
    ui.Canvas canvas = new ui.Canvas(recorder,paintBounds); 
    if(image != null){ 
     canvas.drawImage(image,ui.Offset.zero,new ui.Paint()); 
    } 

    var paint = new ui.Paint(); 
    paint.color = const ui.Color.fromARGB(255,0,255,0); 
    paint.strokeCap = ui.StrokeCap.round; 
    paint.strokeWidth = 17.0; 
    canvas.drawLine(new ui.Offset(x,y),new ui.Offset(x + 25,y + 25),paint); 
    x = x + 1; 
    if(x > ui.window.physicalSize.width/devicePixelRatio){ 
     x = x - ui.window.physicalSize.width/devicePixelRatio; 
    } 
    y = y + 1; 
    if(y > ui.window.physicalSize.height/devicePixelRatio){ 
     y = y - ui.window.physicalSize.height/devicePixelRatio; 
    } 


    ui.Picture picture = recorder.endRecording(); 
    image = picture.toImage(ui.window.physicalSize.width.toInt(),ui.window.physicalSize.height.toInt()); 


    // composite 
    Float64List deviceTransform = new Float64List(16) 
     ..[0] = devicePixelRatio 
     ..[5] = devicePixelRatio 
     ..[10] = 1.0 
     ..[15] = 1.0; 
    ui.SceneBuilder sceneBuilder = new ui.SceneBuilder() 
     ..pushTransform(deviceTransform) 
     ..addPicture(ui.Offset.zero,picture) 
     ..pop(); 
    ui.window.render(sceneBuilder.build()); 
    }); 
    ui.window.scheduleFrame(); 
} 
void main() { 
    ui.window.onBeginFrame = beginFrame; 
    ui.window.scheduleFrame(); 
} 

Das Problem ist, dass das vorherige Bild, zeichnen mit der Methode DrawImage nicht auf der Leinwand angezeigt wurde. Vielen Dank für Ihre Hilfe im Voraus.

Antwort

1

Dies ist ein Fehler, der fixed ist. Wenn Sie im Master-Zweig sind, führen Sie flutter upgrade und Sie sollten gut gehen.

So sieht es aus: screenshot