Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/flutter/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Flutter 如何在颤振中用背景制作剪切图标?_Flutter_Widget_Clipping - Fatal编程技术网

Flutter 如何在颤振中用背景制作剪切图标?

Flutter 如何在颤振中用背景制作剪切图标?,flutter,widget,clipping,Flutter,Widget,Clipping,我希望通过内置的颤振小部件在颤振中实现以下效果,而不使用带有透明度的PNG图像 我试图尝试背景混合模式,但没有成功 我也可以考虑使用自定义画师绘制圆圈和内十字,但理想情况下,我希望使用任何图标或任何其他小部件来剪切背景 我还偶然发现了一种叫做CustomClipper的东西。这是去的路吗 假设我们有以下小部件: return Stack( children: <Widget>[ SizedBox( height: 44, wi

我希望通过内置的颤振小部件在颤振中实现以下效果,而不使用带有透明度的PNG图像

我试图尝试背景混合模式,但没有成功

我也可以考虑使用自定义画师绘制圆圈和内十字,但理想情况下,我希望使用任何图标或任何其他小部件来剪切背景

我还偶然发现了一种叫做
CustomClipper
的东西。这是去的路吗

假设我们有以下小部件:

  return Stack(
    children: <Widget>[
      SizedBox(
        height: 44,
        width: 44,
        child: Image.network(
          'https://images.pexels.com/photos/1295138/pexels-photo-1295138.jpeg?auto=compress&cs=tinysrgb&dpr=2&h=750&w=1260',
          fit: BoxFit.cover,
        ),
      ),
      Positioned(
        left: 0,
        right: 0,
        bottom: 0,
        top: 0,
        child: Icon(
          Icons.close,
          color: Colors.black,
        ),
      ),
    ],
  );
返回堆栈(
儿童:[
大小盒子(
身高:44,
宽度:44,
孩子:Image.network(
'https://images.pexels.com/photos/1295138/pexels-photo-1295138.jpeg?auto=compress&cs=tinysrgb&dpr=2&h=750&w=1260',
适合:BoxFit.cover,
),
),
定位(
左:0,,
右:0,,
底部:0,
排名:0,
子:图标(
图标。关闭,
颜色:颜色,黑色,
),
),
],
);

可以拍摄样本图像。

好的,所以我在中找到了答案

似乎正确的关键字是
剪切

因此,我的解决方案非常简单,如下所示:

ClipRRect(
边界半径:边界半径。圆形(12),
孩子:剪纸(
颜色:颜色,白色,
子:图标(
图标。关闭,
颜色:颜色,白色,
),
),
),
以及使用以下工具的裁剪器:

类裁剪扩展了无状态小部件{
常数断路器({
关键点,
@需要这个颜色,
@需要这个孩子,
}):super(key:key);
最终颜色;
最后一个孩子;
@凌驾
小部件构建(构建上下文){
返回着色器掩码(
blendMode:blendMode.srcOut,
着色器回调:(边界)=>
LinearGradient(颜色:[颜色],停止:[0.0])。createShader(边界),
孩子:孩子,
);
}
}

我怎么做才能让它在中间的切口更矩形?