【问题标题】:Flutter: Remove space between widgetsFlutter:删除小部件之间的空间
【发布时间】:2020-05-29 16:07:30
【问题描述】:

通过使用 CustomPainter,我创建了一个半圆。现在我有了这个小部件树:

return Scaffold(
  body: Center(
    child: SingleChildScrollView(
      child: Column(
        mainAxisSize: MainAxisSize.min,
        children: <Widget>[
          Container(
            // card view
            height: 100,
            alignment: Alignment.center,
            margin: EdgeInsets.only(
                top: 20.0, bottom: 0.0, left: 50.0, right: 50.0),
            decoration: BoxDecoration(
              boxShadow: ([
                BoxShadow(
                  color: color_transparent_black,
                  spreadRadius: 5,
                  blurRadius: 3.0,
                  offset: Offset(2, 3),
                ),
              ]),
              borderRadius: BorderRadius.circular(14.0),
            ),),
            MyArc(diameter: 200),

这是 MyArc:

class MyArc extends StatelessWidget {
  final double diameter;

  const MyArc({Key key, this.diameter = 200}) : super(key: key);

  @override
  Widget build(BuildContext context) {
    return CustomPaint(
      painter: MyPainter(),
      size: Size(diameter, diameter),
    );
  }
}

// This is the Painter class
class MyPainter extends CustomPainter {
  @override
  void paint(Canvas canvas, Size size) {
    Paint paint = Paint()..color = Colors.blue;
    canvas.drawArc(
      Rect.fromCenter(
        center: Offset(size.height / 2, 0),
        height: size.height,
        width: size.width,
      ),
      6.4,
      2.9,
      false,
      paint,
    );
  }

  @override
  bool shouldRepaint(CustomPainter oldDelegate) => false;
}

但我遇到了这个问题:

我不想要灰色和蓝色形状之间的任何空间!!!

【问题讨论】:

  • 你试过在你的容器上添加翻译吗?...Container(transform: Matrix4.identity()..translate(0.0, 10.0, 0.0) //card view...)
  • 我知道问题是因为MyArc!但我无法修复它@AshwynHorton
  • 我明白了……其实我还以为是因为有阴影才这么做的……所以如果你去掉阴影,那间隙还会存在吗?
  • 我删除了一个阴影并打开了开发工具,结果如下:pasteall.org/media/0/e/0e626757a5ea4dfcb915f3dd32ccb07b.png@AshwynHorton
  • MyArc 导致此问题@AshwynHorton

标签: flutter flutter-layout


【解决方案1】:

我终于明白了……

import 'dart:math' as math;

//...

class MyPainter extends CustomPainter {
  @override
  void paint(Canvas canvas, Size size) {
    Paint blue = Paint()..color = Colors.blue;

    canvas.translate(0, -size.height / 2);
    canvas.drawArc(
      Offset.zero & size,
      -math.pi,
      -math.pi,
      false,
      blue,
    );
  }

  @override
  bool shouldRepaint(CustomPainter oldDelegate) => false;
}

如果你想让你的画布很好地适合你,你也可以把它做成这样的矩形......

CustomPaint(
  painter: MyPainter(),
  size: Size(diamieter, diameter / 2),
)

然后让你自定义画家为...

class MyPainter extends CustomPainter {
  @override
  void paint(Canvas canvas, Size size) {
    Paint blue = Paint()..color = Colors.blue;
    Paint red = Paint()..color = Colors.red;

    canvas.drawRect(Offset.zero & size, red);

    canvas.translate(0, -size.height);
    canvas.drawArc(
      Offset.zero & Size(size.width, size.height * 2),
      -math.pi,
      -math.pi,
      false,
      blue,
    );
  }

  @override
  bool shouldRepaint(CustomPainter oldDelegate) => false;
}

这样会很舒服...

【讨论】:

【解决方案2】:

尝试将 spreadRadius 更改为 3.0 它可能创建的边界大于容器的模糊半径边界。

BoxShadow( color: color_transparent_black, spreadRadius: 5, blurRadius: 3.0, offset: Offset(2, 3), ),

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-05-05
  • 2019-10-10
  • 1970-01-01
  • 2021-04-05
  • 2019-03-26
  • 2018-03-30
  • 2021-08-09
相关资源
最近更新 更多