Flutter mask a circle into a container

后端 未结 2 502
一整个雨季
一整个雨季 2020-12-09 23:35

I want to add a circle effect over a container, but I want the circle to not extend the dimensions of the container, but instead get clipped by it. This is what I\'m trying

相关标签:
2条回答
  • 2020-12-09 23:54

    ClipRRect worked best for me.

    See reference video: https://www.youtube.com/watch?v=eI43jkQkrvs&vl=en

    ClipRRect(
      borderRadius: BorderRadius.cirular(10),
      child: myContainerWithCircleWidget,
    );
    
    0 讨论(0)
  • 2020-12-10 00:16

    The simplest way to do this is to using an overlap and cliprect.

    class OverlapSquare extends StatelessWidget {
      @override
      Widget build(BuildContext context) {
        return Container(
          height: 200,
          decoration: BoxDecoration(
            borderRadius: BorderRadius.circular(10),
            color: Colors.red,
          ),
          child: ClipRect(
            clipBehavior: Clip.hardEdge,
            child: OverflowBox(
              maxHeight: 250,
              maxWidth: 250,
              child: Center(
                child: Container(
                  decoration: BoxDecoration(
                    color: Colors.white,
                    shape: BoxShape.circle,
                  ),
                ),
              ),
            ),
          ),
        );
      }
    }
    

    The OverFlowBox allows the circle to draw outside the bounds of its parent, and then the cliprect cuts it back to the edge.

    Just an FYI - on my device I'm getting a tiny red line at the top & bottom of the white circle. I'm fairly sure that's a recently-introduced bug in flutter as I'm also seeing something similar if I put a white border around the container. I've raised an issue on github for that.

    0 讨论(0)
提交回复
热议问题