gpt4 book ai didi

flutter 曲线条

转载 作者:IT王子 更新时间:2023-10-29 07:11:10 26 4
gpt4 key购买 nike

我想知道是否有更好的解决方案来制作如下图所示的弯曲条。

enter image description here

这是我的 flutter 代码:

import 'package:flutter_web/material.dart';

class CurvedBar extends StatelessWidget {
const CurvedBar({
Key key,
}) : super(key: key);

@override
Widget build(BuildContext context) {
return Container(height: 50,
color: Colors.orange,
child: Column(
children: <Widget>[
ClipRRect(
borderRadius: BorderRadius.only(
bottomLeft: Radius.circular(20.0),
bottomRight: Radius.circular(20.0)),
child: Container(
height: 20.0,
width: double.infinity,
color: Colors.white,
),
),
Container(
color: Colors.white,
child: Row(
children: <Widget>[
Flexible(
flex: 1,
child: ClipRRect(
borderRadius:
BorderRadius.only(topRight: Radius.circular(20.0)),
child: Container(
height: 20.0,
color: Colors.orange,
),
)),
Flexible(
flex: 1,
child: ClipRRect(
borderRadius:
BorderRadius.only(topLeft: Radius.circular(20.0)),
child: Container(
height: 20.0,
color: Colors.orange,
),
))
],
))
],
));
}
}

最佳答案

制作一个像这样的自定义 ShapeBorder 类(关键方法是 _getPath 返回形状的 Path):

class CustomShapeBorder extends ShapeBorder {
const CustomShapeBorder();

@override
Path getInnerPath(Rect rect, {TextDirection textDirection}) => _getPath(rect);

@override
Path getOuterPath(Rect rect, {TextDirection textDirection}) => _getPath(rect);

_getPath(Rect rect) {
final r = rect.height / 2;
final radius = Radius.circular(r);
final offset = Rect.fromCircle(center: Offset.zero, radius: r);
return Path()
..moveTo(rect.topLeft.dx, rect.topLeft.dy)
..relativeArcToPoint(offset.bottomRight, clockwise: false, radius: radius)
..lineTo(rect.center.dx - r, rect.center.dy)
..relativeArcToPoint(offset.bottomRight, clockwise: true, radius: radius)
..relativeArcToPoint(offset.topRight, clockwise: true, radius: radius)
..lineTo(rect.centerRight.dx - r, rect.centerRight.dy)
..relativeArcToPoint(offset.topRight, clockwise: false, radius: radius)
..addRect(rect);
}

@override
EdgeInsetsGeometry get dimensions {
return EdgeInsets.all(0);
}

@override
ShapeBorder scale(double t) {
return CustomShapeBorder();
}

@override
void paint(Canvas canvas, Rect rect, {TextDirection textDirection}) {
}
}

现在你可以像这样使用它:

    Container(
margin: EdgeInsets.only(top: 80),
height: 50,
width: double.infinity,
decoration: ShapeDecoration(
shape: CustomShapeBorder(),
//color: Colors.orange,
gradient:
LinearGradient(colors: [Colors.blue, Colors.orange]),
shadows: [
BoxShadow(
color: Colors.black, offset: Offset(3, -3), blurRadius: 3),
],
),
),

结果:

enter image description here

关于 flutter 曲线条,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56723258/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com