范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文

Flutter开发之斜角标签

  由于公司的项目需要用到一个斜角的标签,效果如下:
  我在GitHub和pub.dev上找了很多都没找到,于是结合了一下网上别人的思路和自己的想法决定自己写一个来实现,至于圆角我是打算用Flutter绘制进阶——贝塞尔曲线 - 掘金来画圆角。class SlantedTagView extends StatefulWidget {   final Size size;   final String labelText;   final TextStyle? textStyle;   final Color labelColor;   final Color backgroundColor;   final bool useAngle;   final int labelAlignment;    const SlantedTagView(this.size,       {super.key,       this.labelColor = Colors.black,       this.labelText = "movie",       this.useAngle = true,       this.backgroundColor = Colors.transparent,       this.labelAlignment = LabelAlignment.leftTop,       this.textStyle});    @override   State createState() {     return SlantedTagViewState();   } }   class SlantedTagViewState extends State {   static const double pi = 3.1415926;   late double textAngle;   late Alignment textAlignment;   late Offset offset;    @override   Widget build(BuildContext context) {     var offsetX = widget.size.width > widget.size.height         ? widget.size.height / 3         : widget.size.width / 3;     switch (widget.labelAlignment) {       case LabelAlignment.leftTop:         offset = Offset(offsetX, 0);         textAlignment = Alignment.topLeft;         textAngle = -pi / 4;         break;       case LabelAlignment.rightTop:         offset = Offset(-offsetX, 0);         textAlignment = Alignment.topRight;         textAngle = pi / 4;         break;       case LabelAlignment.leftBottom:         offset = Offset(offsetX, 0);         textAlignment = Alignment.bottomLeft;         textAngle = pi / 4;         break;       case LabelAlignment.rightBottom:         offset = Offset(-offsetX, 0);         textAlignment = Alignment.bottomRight;         textAngle = -pi / 4;         break;     }      return Container(       color: widget.backgroundColor,       width: widget.size.width,       height: widget.size.height,       child: CustomPaint(         size: widget.size,         painter: LabelViewPainter(             widget.labelColor, widget.labelAlignment, widget.useAngle),         child: Align(             alignment: textAlignment,             child: Transform.rotate(               angle: textAngle,               origin: offset,               child: Text(                 widget.labelText,                 style: widget.textStyle ?? const TextStyle(color: Colors.white),                 textAlign: TextAlign.center,               ),             )),       ),     );   } }  class LabelAlignment {   int labelAlignment;    LabelAlignment(this.labelAlignment);    static const leftTop = 0;   static const leftBottom = 1;   static const rightTop = 2;   static const rightBottom = 3; }
  使用自定义paint来绘画: class LabelViewPainter extends CustomPainter {   Color labelColor;   int labelAlignment;   bool useAngle;   late Paint _paint;    LabelViewPainter(this.labelColor, this.labelAlignment, this.useAngle) {     _paint = Paint()       ..color = labelColor       ..strokeCap = StrokeCap.square       ..isAntiAlias = true       ..style = PaintingStyle.fill       ..strokeWidth = 10.0;   }    @override   void paint(Canvas canvas, Size size) {     var drawSize = size.height > size.width ? size.width / 2 : size.height / 2;     Path path = Path();      switch (labelAlignment) {       case LabelAlignment.leftTop:         if (!useAngle) {           path.moveTo(0, drawSize / 2.2);           path.quadraticBezierTo(0, 0, drawSize / 2.2, 0);         }         path.lineTo(drawSize, 0);         path.lineTo(0, drawSize);          break;                // 下面的左下角、右上角、右下角和上面的类似的,使用moveTo移动画笔       // 使用lineTo画线就可以了       case LabelAlignment.leftBottom:         break;       case LabelAlignment.rightTop:         break;       case LabelAlignment.rightBottom:         break;     }      path.close();     canvas.drawPath(path, _paint);   }    @override   bool shouldRepaint(CustomPainter oldDelegate) {     return true;   } }
  然后就是使用:class Test extends StatelessWidget {   const Test({super.key});    @override   Widget build(BuildContext context) {     return Scaffold(       appBar: AppBar(         title: const Text("SlantedEdge"),       ),       body: Container(         width: 200.w,         height: 200.w,         decoration: BoxDecoration(             color: Colors.white, borderRadius: BorderRadius.circular(40.w)),         child: SlantedTagView(           Size(100.w, 100.w),           useAngle: false,           labelText: "Available",           textStyle: TextStyle(color: Colors.white, fontSize: 12.sp),         ),       ),     );   } }
  这个就是最终的效果图:

裁员关店,一年利润打七折!HampampampM接下来怎么办?本文来源时代周报作者霍东阳近日,HM集团(OTCMKTSHNNMY)公布了完整的第四财季和2022财年的业绩。据财报,在第四财季里,HM集团销售额为624。33亿克朗(约合407。中航基金副总经理火了!称年轻人工资低可能是能力不够冲上热搜,被网友质疑是在PUA年轻人每经记者李沛沛每经编辑叶峰每日经济新闻记者获悉,近日一位公募高管的公开言论引起了轩然大波。中航基金副总经理兼首席投资官邓海清在谈到一些年轻人抱怨收入太低不敢消费时表示,现在很多年轻今天A股下跌明显,要担忧吗?如何应对?上午两市低迷,整体低开后震荡下跌,并未有效组织反攻,整体收跌超1,显示多头做多意愿不足,空头卖压较大。近期市场反弹到3300附近,是会有压力。中短期资金对于后市的反弹高度存疑,买盘平安人寿广西韦小燕向着目标不言放弃来源经理人传媒旗下中国保险家杂志韦小燕娇小柔弱的外表下有一份不达目标不罢休的执着,干练果敢的工作态度后面亦隐藏着一颗感性善良的心。20年前,韦小燕为生活所迫,四处打工,经常身无分文一则传言引发盘中暴拉,歌尔股份暴涨暴跌皆因苹果2月3日午后,消费电子概念股快速反弹,捷荣技术恒铭达卓翼科技涨停,歌尔股份直线拉升涨超5,瀛通通讯佳禾智能传音控股国光电器等跟涨。截至收盘,歌尔股份触及涨停,市值约760亿。消息面何为支柱产业最近,互联网上有一种说法很是流行我们国家不能让房地产成为支柱产业,应该大力发展高新技术产业。这种观点得到很多网民的点赞和支持!作者本人并不认同,理由如下经济领域各行各业做大做强或衰投奔华为生态,小鹏旧将李鹏程出任阿维塔副总裁(文潘昱辰编辑周远方)2月2日,长安汽车旗下高端新能源汽车品牌阿维塔科技宣布,李鹏程正式出任公司副总裁首席营销官(CMO),兼任用户发展中心副总经理,全面负责公司品牌营销相关工作,Apt一个月暴涨6倍,只是一场扎空游戏撰文BenGioveAptos生态并无出色的DappTVL也跟不上市值,为何APT能在一个月内上涨600?APT经历了一次很好的老式卖空挤压。并非每个Pumb都有规律或原因。话虽如没钱的银行卡不注销,会带来什么后果?目前流行的都是移动支付,在一般的消费中都是直接用手机扫一扫就可以直接付款了,但是其实还有些支付app是需要绑定银行卡的,在办理银行卡的时候,可能有些银行卡不需要了被闲置,但是又没有茂名5岁幼儿被绞断3指,茂医专家提醒春节期间,化州某地一名年仅5岁的幼儿小明在独自玩耍时,右手不慎被正在运行的绞料机绞了进去,右手示中环三指当场完全离断,伤口鲜血直流,离断指体也掉入了运转的机器中,听到儿子的哭嚎匆忙北京墓地高价难求,殡葬龙头股股价创近一年新高,85毛利率远超房企位于昌平的某处墓园,该墓园目前已经无墓地可卖。李凯旋摄华夏时报(www。chinatimes。net。cn)记者李凯旋李贝贝北京报道从12月初至今,记者了解到,近期,北京墓地出现明
上海迪士尼2天游玩攻略,拍好烟花秀发朋友圈秀上海迪士尼和香港迪士尼有以下几个区别规模上海迪士尼乐园是全球最大的迪士尼主题乐园之一,而香港迪士尼乐园则相对较小。地理位置上海迪士尼乐园位于上海市郊区,距离市中心较远,而香港迪士尼老照片120年前的上海,外滩苏州河南京路,和现在完全不一样人们经常说,一座城市因为有了历史,才显得厚重。历史,是一座城市的记忆,文化是一座城市的命脉。被誉为东方巴黎的上海,钟灵毓秀历史悠久,一百多年前就令世界瞩目。清朝末年,英国摄影师查尔河小青来助力!珠海香湾街道大力宣传河长制为进一步增进群众对河长制的了解,提升爱河护河责任意识,近日,珠海市香湾街道在海天公园开展河长制宣传活动。活动通过发放河长制宣传品宣传册等方式,大力宣传河长制的目标任务河小青志愿者申三大运营商的三阴灌肠昨日的移动电信联通纷纷杀出惊天大阴线,中国移动跌9。03,中国电信9。93,中国联通9。59,电信盘中一度封死跌停,移动破百的时候,一度认为已经到头了,后面又反复了几天,甚至冲到了姚安花红柳绿春意浓桃花盛开产业丰惊蛰节令后,随着天气逐渐回暖,楚雄彝族自治州姚安县太平镇老街村的500多亩桃花进入了盛花期。充足的光照,适宜的气候,加上精心管理,这里的桃林树形婀娜多姿,花开锦簇艳丽。姚安县太平镇情侣穷游庆祝婚礼,当事人准备在99个地方搭建囍字场景合影近日,甘肃一对新婚夫妻旅游结婚的视频火了。视频中,这对新婚夫妻正在西部城市流浪旅行,每到一地便搭建囍字场景并合影留念。不少网友纷纷留言,表示羡慕,在山河日月见证下的爱情真浪漫。当事身家千万旅游公司老板被骗缅甸,几经转卖瘦40斤斗智斗勇死里逃生幸卫林是贵州人,离异单身,有自己的旅游公司,并在全国拥有142家门店,身价上千万。能拥有这么多门店这么多财富的人,靠的一定不是运气而是实力,可就是这么一个有勇有谋的人竟然也被骗到了大唐第一名将李靖,晚年受到李世民的猜忌,战战兢兢唐朝名将如云,能征善战者有很多,比如李靖苏定方薛仁贵王忠嗣郭子仪李光弼等等,在这么多的名将当中,论军事才能和功绩谁可以排在第一位呢?那必然是李靖。李靖的名气不如卫青和霍去病,但是他导游提醒游客理性购物,如何让这股清流淌得更远正观评论员王航如果不能建立合理的导游薪资制度,无法依法铲除不合理低价团的生存空间,劝游客理性购物的行业基本操作就依然会是稀缺品旅游,以游为主,尽量多走一些地方,少买一点东西。记住,延庆白河堡水库迎来数十只苍鹭筑巢孵卵新京报讯(记者曹晶瑞)早春三月,候鸟北归,3月21日,新京报记者从延庆区了解到,连日来,延庆区白河堡水库内的悬崖峭壁上,迎来了数十只苍鹭筑巢孵卵栖息觅食,为初春的白河增添了无限生机记录2迪拜,有钱人的天堂(1)2006年2008年5。12地震前,我在阿联酋迪拜工作和生活了两年,给我的感觉就是,自己的荷包太小,现金太少。2007年的帆船酒店2007年的帆船酒店内景迪拜,一个有钱人的天堂!当