【问题标题】:How do I draw a vector shape in Flutter?如何在 Flutter 中绘制矢量形状?
【发布时间】:2018-04-17 14:56:35
【问题描述】:

我们正在尝试在 Flutter 中构建一个可以在运行时更改的自定义形状矢量。

例如,我们需要一个披萨形状矢量小部件,我们可以根据变量值更改切片颜色。

我们尝试在 Flutter 中使用 canvas 和painter,但他们没有清晰和好的文档。

我们也尝试过 SVG,但不幸的是 Flutter 也不支持 SVG 标签和 SVG 视图。

【问题讨论】:

    标签: android vector flutter


    【解决方案1】:

    您可以创建一个扩展 CustomPainter 的小部件

    class Sky extends CustomPainter {
      @override
      void paint(Canvas canvas, Size size) {
        var rect = Offset.zero & size;
        var gradient = new RadialGradient(
          center: const Alignment(0.7, -0.6),
          radius: 0.2,
          colors: [const Color(0xFFFFFF00), const Color(0xFF0099FF)],
          stops: [0.4, 1.0],
        );
        canvas.drawRect(
          rect,
          new Paint()..shader = gradient.createShader(rect),
        );
      }
    
      @override
      SemanticsBuilderCallback get semanticsBuilder {
        return (Size size) {
          // Annotate a rectangle containing the picture of the sun
          // with the label "Sun". When text to speech feature is enabled on the
          // device, a user will be able to locate the sun on this picture by
          // touch.
          var rect = Offset.zero & size;
          var width = size.shortestSide * 0.4;
          rect = const Alignment(0.8, -0.9).inscribe(new Size(width, width), rect);
          return [
            new CustomPainterSemantics(
              rect: rect,
              properties: new SemanticsProperties(
                label: 'Sun',
                textDirection: TextDirection.ltr,
              ),
            ),
          ];
        };
      }
    
      // Since this Sky painter has no fields, it always paints
      // the same thing and semantics information is the same.
      // Therefore we return false here. If we had fields (set
      // from the constructor) then we would return true if any
      // of them differed from the same fields on the oldDelegate.
      @override
      bool shouldRepaint(Sky oldDelegate) => false;
      @override
      bool shouldRebuildSemantics(Sky oldDelegate) => false;
    }
    

    另见

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-09-27
      • 2016-11-15
      • 2010-12-04
      • 1970-01-01
      • 2020-12-24
      相关资源
      最近更新 更多