如何使这弧形颤动

时间:2020-07-09 18:28:30

标签: flutter dart

我想完全像这张图片一样工作,里面有圆圈,该怎么办? enter image description here

2 个答案:

答案 0 :(得分:2)

sample


main() => runApp(MyApp());

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: SO(),
      debugShowCheckedModeBanner: false,
    );
  }
}

class SO extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: Center(
        child: ClipRRect(
          borderRadius: BorderRadius.only(bottomLeft: Radius.circular(24)),
          child: CustomPaint(
            size: Size(250, 200),
            painter: SOP(
              fillColor: Colors.indigo,
              spreadColor: Colors.indigoAccent,
              spread: 25,
              radius: 100,
            ),
          ),
        ),
      ),
    );
  }
}

class SOP extends CustomPainter {
  final double spread; //the thickness of inner circles
  final Color spreadColor; //the color of inner circles
  final Color fillColor; //the background color
  final double radius; //the radius of inner circles
  final Paint p;

  SOP({
    @required this.spread,
    @required this.spreadColor,
    @required this.fillColor,
    @required this.radius,
  }) : p = Paint()
          ..strokeWidth = spread
          ..style = PaintingStyle.stroke
          ..color = spreadColor;

  @override
  void paint(Canvas canvas, Size size) {
    canvas.drawColor(fillColor, BlendMode.src);
    canvas.drawCircle(Offset(0, 0), radius, p);
    canvas.drawCircle(Offset(size.width, size.height), radius, p);
  }

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

答案 1 :(得分:1)

这是您的小部件

       Center(
        child: Container(
          width: 200,
          height: 100,
          decoration: BoxDecoration(
            borderRadius: BorderRadius.only(bottomLeft: Radius.circular(20.0)),
            gradient: LinearGradient(begin: Alignment.topLeft, end: Alignment.bottomRight, colors: [Color(0xFF9B6EEF), Color(0xFF715ED7)]),
          ),
          child: ClipRect(child: CustomPaint(painter: CirclePainter())),
        ),
      ),

CustomPainter 类用于内部环

class CirclePainter extends CustomPainter {
  @override
  void paint(Canvas canvas, Size size) {
    var paint = Paint()
      ..color = Colors.white10
      ..style = PaintingStyle.stroke
      ..strokeWidth = 25;

    canvas.drawCircle(Offset.zero, 60, paint);
    canvas.drawCircle(Offset(size.width, size.height), 60, paint);
  }

  @override
  bool shouldRepaint(CustomPainter oldDelegate) {
    return false;
  }
}

结果

enter image description here