简体   繁体   English

flutter 是否尊重父母的边界半径?

[英]does flutter respect border radius of parent?

I have a stateless widget with this builder function:我有这个构建器 function 的无状态小部件:

Widget build(BuildContext context) {
    return Container(
      decoration: BoxDecoration(
        borderRadius: BorderRadius.circular(20),
        color: Colors.red,
      ),
      margin: EdgeInsets.only(
          top: widget.position.dy, left: 5, right: 5, bottom: 200),
      child: ListView(
        padding: EdgeInsets.only(bottom: 70),
        shrinkWrap: true,
        children: <Widget>[
          Container(height: 60, color: Color(0x8500ffff)),
        ],
      ),
    );
}

basically one ListView inside a Container widget.基本上是Container小部件内的一个ListView the Container has BorderRadius.circular(20) .容器有BorderRadius.circular(20) The list vie item is a simple Container . list vie 项是一个简单的Container

Now - when I scroll the list view, the border radius of the parent container is not respected.现在 - 当我滚动列表视图时,不尊重父容器的边框半径。

在此处输入图像描述

Is that correct behaviour or do I make a mistake?这是正确的行为还是我犯了错误?

Thanks谢谢

You have to define borderRadius for your listview children widgets, I faced the same issue before and I managed to solve it by doing that. 您必须为listview子窗口小部件定义borderRadius ,我之前遇到过同样的问题,因此设法解决了这个问题。 So you should modify your ListView widget: 因此,您应该修改ListView小部件:

 child: ListView(
 padding: EdgeInsets.only(bottom: 70),
 shrinkWrap: true,
 children: <Widget>[
   Container(
 height: 60,
 decoration: BoxDecoration(
 borderRadius: BorderRadius.circular(20),
 color: Color(0x8500ffff)),
 ), 
 ],
),

For anyone coming across this now, you need to wrap your ListView in a ClipRRect with the same border radius as your parent container对于现在遇到此问题的任何人,您需要将ListView包装在具有与父容器相同边框半径的ClipRRect

So something like this should work:所以这样的事情应该有效:

Widget build(BuildContext context) {
    return Container(
      decoration: BoxDecoration(
        borderRadius: BorderRadius.circular(20),
        color: Colors.red,
      ),
      margin: EdgeInsets.only(
          top: widget.position.dy, left: 5, right: 5, bottom: 200),
      child: ClipRRect(
        borderRadius: BorderRadius.circular(20),
        child: ListView(
            padding: EdgeInsets.only(bottom: 70),
            shrinkWrap: true,
            children: <Widget>[
              Container(height: 60, color: Color(0x8500ffff)),
            ],
          ),
        ),
    );
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM