草庐IT

flutter 曲线条

coder 2023-07-23 原文

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

这是我的 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),
        ],
      ),
    ),

结果:

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

有关flutter 曲线条的更多相关文章

  1. Flutter 环境变量配置和flutter doctor中的错误解决 - 2

    一、环境变量右键点击我的电脑-属性:然后找到环境变量 1.Android的SDK不在C盘的话需要额外配这个到用户环境变量:ANDROID_HOMED:\AndroidSDK2.然后在系统变量:Path中添加一条这样的值        D:\Flutter\flutter\bin             这个值写flutter包解压的实际地址即可 3.在系统变量中添加两个镜像变量:        变量名:FLUTTER_STORAGE_BASE_URL      变量值:https://storage.flutter-io.cn        变量名:PUB_HOSTED_URL      变量

  2. javascript - JS 用线条制作标记效果的好方法 - 2

    有一种用线指向图像特殊元素的效果。请参阅http://snapsvg.io/处的鳄鱼示例.最初出现图像时,没有任何指向线:然后滚动后出现带有提示的行:我知道有https://github.com/julianlloyd/scrollReveal.js以及很多其他的js库来实现出现的效果。问题是如何制作这条线,将它们放在普通图像(不是SVG)顶部的确切点上,并在滚动时为线条设置动画?如果知道这种方法/效果的名称(用谷歌搜索什么)并查看关于好/坏体验或js库的评论,那就太好了。更新:希望看到图像大小调整和精确指向的已解决问题,在大多数情况下,请参阅http://www.sitmed.com

  3. javascript - d3.js 如何向条形图添加线条 - 2

    我有一个包含4个值的数据集。[ABCD]。目前它们显示在条形图中,每个值一个条。现在,由于值c和d是平均值,我想将它们显示为a和b栏后面的线。d3可以吗?如何在同一个数据数组中切换条形或线形显示?感谢您的帮助。 最佳答案 我在这里发布了一个示例,因为没有一个答案在jsbin或jsfiddle等中提供了带线的条形图的工作示例。http://jsbin.com/gisinomo/1/edit该示例是d3wiki上简单条形图的一个分支。http://bl.ocks.org/mbostock/3885304CSSbody{font:10px

  4. javascript - nvd3.js - 无法更改折线图中线条的颜色 - 2

    我正在尝试更改nvd3折线图的不同线条的颜色here但我无法理解该怎么做。我想将示例中两条线的颜色更改为绿色和青色。我试过了nv.addGraph(function(){varchart=nv.models.lineChart().useInteractiveGuideline(true).color(["rgb(0,255,0)","rgb(255,165,0)"]);}它适用于散点图here.但是折线图的颜色不会改变。任何建议。谢谢 最佳答案 你可以用这个!return[{values:data,//values-represe

  5. javascript - 如何根据轴值更改 d3js 中的线条颜色? - 2

    如果X>100,我想更改此折线图的颜色我希望它变成“红色”有没有一种方法可以根据X的值在笔触颜色样式中使用条件?http://jsfiddle.net/iamjeannie/b445svob/1/enterlinkdescriptionherevarlineData=[{"x":1,"y":5},{"x":20,"y":20},{"x":40,"y":10},{"x":60,"y":40},{"x":80,"y":5},{"x":100,"y":60},{"x":120,"y":15},{"x":140,"y":40},{"x":160,"y":25},{"x":180,"y":20}

  6. javascript - 使用 D3.js 可以绘制线条流畅的面积图吗? - 2

    我正在使用D3.js创建面积图,并使用平滑线制作它。是否可以?在我的代码中,我只是创建了svg并放置了线条和区域。我使用虚拟数据。下面是我的代码:http://jsfiddle.net/sota0805/mv48H///DatavarlineData=[{"x":0,"y":250},{"x":40,"y":170},{"x":80,"y":140},{"x":120,"y":220},{"x":160,"y":220},{"x":200,"y":190},{"x":240,"y":170},{"x":280,"y":140},{"x":320,"y":200},{"x":360,"y

  7. javascript - 拉斐尔:设置线条颜色 - 2

    我正在使用RaphaelJS矢量库,但我无法获得正在绘制的线条(路径)以更改颜色。希望这只是我做的蠢事。varblue_one=paper.path("M205205L300300");blue_one.attr("stroke-width","3");blue_one.attr("fill","#0000FF");我还尝试了“#00F”、“blue”、“0000FF”和“00F”的填充值。 最佳答案 这是你要设置的。blue_one.attr("stroke","#0000FF");有关属性的完整列表,请参阅Specificati

  8. javascript - 是否可以制作带有线条背景的 Canvas 或不是矩形的 Canvas ? - 2

    我正在尝试制作这个https://massmoca.org/event/walldrawing340/在Javascript代码中,使用p5.js,但我不知道如何用线条填充这些形状。是否有任何其他可能性,比如制作圆形或类似的Canvas,或者我只需要分别制作每个形状?目前我是一个接一个地做,但是做三Angular形和梯形比较粗糙...varsketch=function(p){with(p){leth,w,space;p.setup=function(){createCanvas(900,400);h=height/2;w=width/3;space=10;noLoop();};p.d

  9. javascript - 带线条的柱形图 - 组合图自定义 - 2

    哪个JS库最适合做以上类型的图表?我想将簇状柱形图与折线图结合起来,如上图所示。我的要求是每一列都应该有一个低值和高值集 最佳答案 为此请使用highcharts。请引用JSFiddle对于代码$(function(){varchart=newHighcharts.Chart({chart:{renderTo:"container",type:"column"},plotOptions:{series:{pointWidth:25},line:{marker:{type:'dot'}}},title:{text:null},seri

  10. javascript - EaselJS 线条模糊 - 2

    我正在使用EaselJS作为HTML5Canvas的API。我注意到下面的代码:line.graphics.setStrokeStyle(1).beginStroke("black").moveTo(100,100).lineTo(200,200);stage.addChild(line);...产生以下行:我将粗细设置为1-但线条仍然模糊。如果将快照放大,可以看到它实际上占据了3个像素。我相信我在某个地方读到Canvas在两个像素之间画了一个点,这样两个像素实际上都会被着色。您需要将绘制点的位置移动像素宽度的一半,使其落在整个像素上。我的应用程序需要清晰的图像,请指教。

随机推荐