在同一个小部件上使用边框和边框半径

Posted

技术标签:

【中文标题】在同一个小部件上使用边框和边框半径【英文标题】:Use border and border radius on the same widget 【发布时间】:2020-10-10 20:39:53 【问题描述】:

大家我怎么能像这个图标的边框一样颤动 我只需要为左侧、底部和顶部设置颜色 我听到有人谈论 customPainter,但我不知道如何使用请帮助我: enter image description here

这是我的代码:

Container(      
   decoration:BoxDecoration(
    shape: BoxShape.circle,
     border: new Border(
      left: BorderSide(
      color: Theme.of(context).primaryColor,
      width: 2,),
      right: BorderSide(
      color: Theme.of(context).primaryColor,
      width: 2,),
      bottom: BorderSide( color: Theme.of(context).primaryColor,
      width: 2,),
      top: BorderSide(color: Theme.of(context).primaryColor,
      width: 2,),),
       ) ,
      child:ClipOval(
      child: Image.asset('images/imageout1.png',width: 85,), 
                                                ))

【问题讨论】:

【参考方案1】:

如您所说,您可以使用CustomPainter。关键是drawArc的使用

在您的小部件构建方法中的某处返回它

CustomPaint(
    size: Size.square(100),
    painter: CirclePainter(),
)

创建CirclePainter

class CirclePainter extends CustomPainter 
  @override
  void paint(Canvas canvas, Size size) 
    Paint innerLine = Paint()
      ..color = Colors.white
      ..style = PaintingStyle.stroke
      ..strokeWidth = 8.0;

    Paint outerLine = Paint()
      ..color = Colors.orange
      ..style = PaintingStyle.stroke
      ..strokeWidth = 3.0;

    canvas.drawArc(Rect.fromCircle(center: Offset(size.width / 2, size.height / 2), radius: size.width / 2),
        0, 2 * pi, false, innerLine);

    canvas.drawArc(
        Rect.fromCircle(center: Offset(size.width / 2, size.height / 2), radius: (size.width + 12) / 2),
        1.9 * pi,
        1.2 * pi,
        false,
        outerLine);
  

  @override
  bool shouldRepaint(CustomPainter oldDelegate) => true;

结果

【讨论】:

以上是关于在同一个小部件上使用边框和边框半径的主要内容,如果未能解决你的问题,请参考以下文章

如何使小部件在颤动中相互浮动[关闭]

如何设置自定义小部件的背景颜色和边框宽度?

如何在 Flutter 中的行小部件内的容器上添加边框?

qt tab 小部件右侧和底部有白色边框

如何自定义 tkinter/ttk 小部件和框架的边框颜色?

如何移除 Canvas 小部件周围的浅灰色边框?