在许多类中使用相同的变量/跨类共享变量

时间:2012-07-23 17:06:48

标签: dart

像我在一个类中得到CanvasRenderingContext2D和CanvasElement,但是如何在其他类中使用我的CanvasRenderingContext2D?

class Unnamed {
    CanvasElement c;
    CanvasRenderingContext ctx;

    Unnamed() {
        this.c = query('#canvas');
        this.ctx = this.c.getContext('2d');
    }
}

如何在其他类中使用来自Unnamed类的ctx?类似的东西:

class Box {
    num x,
        y;

    Box() {
        this.x = x;
        this.y = y;
    }

    void draw() {
        myCtxFromUnnamedClass.fillRect(this.x, this.y, 64, 64);
    }
}

抱歉我的英语不好。

2 个答案:

答案 0 :(得分:1)

最好的方法是将CanvasRenderingContext2D作为方法绘制的参数传递。

class Box {
    num x, y;

    Box() {
        this.x = x;
        this.y = y;
    }

    void draw(CanvasRenderingContext ctx) {
        ctx.fillRect(this.x, this.y, 64, 64);
    }
}

答案 1 :(得分:0)

首先,你的Box()不会编译,因为没有xy被提供给Box()构造函数。

 void draw(CanvasRenderingContext ctx) {
        ctx.fillRect(this.x, this.y, 64, 64);
    }
如果您将ctx作为Box'构造函数参数传递,则

没有任何意义。但要回答你的问题:

void main() { 
  Unnamed unnamed = new Unnamed();
  Box box = new Box(unnamed.ctx, 0, 0);
  box.draw();
}

class Unnamed {
  CanvasElement c;
  CanvasRenderingContext ctx;

  Unnamed() : c = query('#canvas') { // variable initialization should be done this way
    this.ctx = c.getContext('2d');
  }
}

class Box {
  num x, y;
  CanvasRenderingContext myCtxFromUnnamedClass;

  Box(this.myCtxFromUnnamedClass, this.x, this.y); // this is an idiomatic Dart constructor

  void draw() {
    myCtxFromUnnamedClass.fillRect(this.x, this.y, 64, 64);
  }
}