作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在 flutter 打中,我想剪辑Container
的可选部分以制作此小部件:
裁剪小部件,使其顶部和底部有两个半圆。
对于此裁剪的小部件的某些功能,我希望具有一些可选功能,例如:
剪裁顶部,该可选内容的底部和右侧的空白处。如何使用可选功能剪切Container
?
最佳答案
您可以使用自定义Clipper + arcToPoint路径方法来创建干净的弧。
像那样:
import 'package:flutter/material.dart';
import 'package:vector_math/vector_math.dart' as v_math;
void main() => runApp(MyApp());
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter Demo',
home: Scaffold(
body: SafeArea(
child: MyHomePage(),
),
),
);
}
}
class MyHomePage extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Column(
mainAxisAlignment: MainAxisAlignment.center,
crossAxisAlignment: CrossAxisAlignment.center,
children: [
ClipPath(
clipper: DolDurmaClipper(right: 40, holeRadius: 20),
child: Container(
decoration: BoxDecoration(
borderRadius: BorderRadius.all(
Radius.circular(15),
),
color: Colors.blueAccent,
),
width: 300,
height: 95,
padding: EdgeInsets.all(15),
child: Text('first example'),
),
),
SizedBox(
height: 20,
),
ClipPath(
clipper: DolDurmaClipper(right: 100, holeRadius: 40),
child: Container(
decoration: BoxDecoration(
borderRadius: BorderRadius.all(
Radius.circular(15),
),
color: Colors.amber,
),
width: 200,
height: 250,
padding: EdgeInsets.all(35),
child: Text('second example'),
),
),
]);
}
}
class DolDurmaClipper extends CustomClipper<Path> {
DolDurmaClipper({@required this.right, @required this.holeRadius});
final double right;
final double holeRadius;
@override
Path getClip(Size size) {
final path = Path()
..moveTo(0, 0)
..lineTo(size.width - right - holeRadius, 0.0)
..arcToPoint(
Offset(size.width - right, 0),
clockwise: false,
radius: Radius.circular(1),
)
..lineTo(size.width, 0.0)
..lineTo(size.width, size.height)
..lineTo(size.width - right, size.height)
..arcToPoint(
Offset(size.width - right - holeRadius, size.height),
clockwise: false,
radius: Radius.circular(1),
);
path.lineTo(0.0, size.height);
path.close();
return path;
}
@override
bool shouldReclip(DolDurmaClipper oldClipper) => true;
}
关于将Container的Flutter夹部分制成两个半圆(半圆),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57860813/
有没有一种简单的方法来设置这样的元素样式? 应该在移动设备上使用,因此 CSS3 完全可用。想不出一个简单的方法。图片是没有问题的。 它必须是这样的 block 状并且里面应该有一个文本(这是一个 b
我正在为学校制作一个简单的浏览器,我正在尝试制作 Collection 夹。此处的代码将 Collection 夹添加到文件中(这样我可以在应用程序关闭后保留它)并将其显示在 TextView 中。我
我是一名优秀的程序员,十分优秀!