Как нарисовать или нарисовать прямоугольник полной ширины в флаттер? - PullRequest
0 голосов
/ 08 октября 2018

Я хочу нарисовать дугу, которая автоматически занимает ширину экрана.Для этого я попробовал следующий код:

class ArcPainter extends CustomPainter   {


  @override
  void paint(Canvas canvas, Size size) {
    // create a bounding square, based on the centre and radius of the arc
    Rect rect = new Rect.fromPoints(new Offset(0.0, -45.0),new Offset(372.0, 45.0));


    // a fancy rainbow gradient
    final Gradient gradient = new RadialGradient(
      colors: <Color>[
        Colors.white.withOpacity(1.0),

      ],
      stops: [
        0.0,
      ],
    );

    // create the Shader from the gradient and the bounding square
    final Paint paint = new Paint()..shader = gradient.createShader(rect);

    // and draw an arc
    canvas.drawArc(rect, 0.0 , pi, true, paint);
  }

  @override
  bool shouldRepaint(ArcPainter oldDelegate) {
    return true;
  }
}

Это делает мою работу, но я хочу, чтобы прямоугольник в Rect rect = new Rect.fromPoints (новое смещение (0.0, -45.0), новое смещение (372.0, 45.0)));занять всю ширину экрана.

Я уже пробовал Rect rect = new Rect.fromLTWH (0.0, -45.0, size.width, 45.0);но дуга исчезает в этом случае.

1 Ответ

0 голосов
/ 08 октября 2018

Итак, я разобрался с ошибкой:

Я не указал размер при вызове этого класса и, таким образом, приходили size.width и size.height 0.

Я изменил кодв основной сборке:

new Row(
children: <Widget>[
    new CustomPaint(
    painter: new ArcPainter(),
  ],
),

Кому:

new Row(
children: <Widget>[
  new Container(
  width: screen_width * 1,
  height: screen_height * 0.05,
  child: 
    new CustomPaint(
    painter: new ArcPainter(),
      )
    )
  ],
),

и, наконец, в ArcPainter:

Rect rect = new Rect.fromPoints (new Offset (0.0,- size.height), новое смещение (size.width, size.height));

Примечание: double screen_width = MediaQuery.of (context) .size.width;double screen_height = MediaQuery.of (context) .size.height;

...