В трепете CustomPaint () ведет себя странно, когда используется в виджете скаффолд / контейнер - PullRequest
0 голосов
/ 26 апреля 2020

Итак, я пытаюсь нарисовать диагональную линию на экране, используя виджет CustomPaint в флаттере. из виджета CustomPaint я вызываю свой класс CustomPainter с именем BottomCurvePainter. Код, для которого это что-то вроде этого.

class BottomCurvePainter extends CustomPainter {
  @override
  void paint(Canvas canvas, Size size) {
    // TODO: implement paint
    Paint paint = Paint();
    paint.color = Colors.black;
    paint.style = PaintingStyle.stroke;
    paint.strokeWidth = 5.0;

    Path path = Path();
    path.lineTo(size.width, size.height);

    canvas.drawPath(path, paint);
  }

  @override
  bool shouldRepaint(CustomPainter oldDelegate) {
    // TODO: implement shouldRepaint
    //throw UnimplementedError();
    return true;
  }
}

То, как я звоню в моем доме, выглядит следующим образом: -

class _MyHomePageState extends State<MyHomePage> {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
          body: Container(
          color: Colors.orange,
          child: CustomPaint(
            painter: BottomCurvePainter(),
          ),
        ),
    );
  }
}

, но, похоже, это не работает. Однако я могу заставить его работать, если я удаляю виджет Scaffold и напрямую возвращаю контейнер, что-то вроде этого -

class _MyHomePageState extends State<MyHomePage> {
  @override
  Widget build(BuildContext context) {
    return Container(
          color: Colors.orange,
          child: CustomPaint(
            painter: BottomCurvePainter(),
          ),
    );
  }
}

Может кто-нибудь объяснить, почему не работает упаковка контейнера в леса? Благодаря.

1 Ответ

0 голосов
/ 26 апреля 2020

Вы должны указать ширину и высоту свойства контейнера. Он не появляется, потому что вы не указали размеры (или ограничения) контейнера, который будет иметь место в эшафот. Взгляните на контейнерный виджет из флаттера.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...