Flutter没有展示思维脑图的控件?用CustomPainter自己画!

简介: 最近启动了一个计划,要使用Flutter开发一个展示所有Flutter Widgets的APP。

在Flutter里展示思维脑图


flutter pubgithub里都苦搜无果,也可能我搜的关键词错了(见过Flutter展示脑图插件的朋友可以告诉我一下)。


总之我需要这么一个功能,在Flutter中绘制思维脑图。实在找不到,就只好自己做一个。


image.png


也可以在Flutter里制作思维脑图


暂时只演示动态添加吧


image.png


学会原理自己画


Painting and Effects这个类目下有个WidgetCustmPaint


image.png


这个Widget的主要参数是painter


image.png


新建一个继承CustomPainter类的类


CustomPainter提供的API相当丰富,本文仅列举我在绘制思维脑图中使用到的几个API


class MyPainter extends CustomPainter{
  @override
  void paint(Canvas canvas, Size size) {
     //在这里编写绘制的代码
  }
  @override
  bool shouldRepaint(CustomPainter oldDelegate) {
    // 画布是否需要重绘,false的话,则第一次绘制结束后不可再改变
    return false;
  }
}


绘制设置


var paint = Paint()
  ..isAntiAlias = true //抗锯齿
  ..style = PaintingStyle.fill //fill填充,stroke线框
  ..color = Colors.yellow; //颜色


画一个矩形


//这里要注意,和我们常见的给x,y,width,height不一样,后面两个值分别是Right,Bottom
canvas.drawRect(Rect.fromLTRB(100, 100, 200, 200), paint);


这个矩形的x=100,y=100,width=100,height=100


image.png


画一个圆形


//方法1,通过圆心坐标和半径的值来绘制
canvas.drawCircle(Offset(0,0), 100, paint);
//方法2,给一个矩形区域添加50%边长的圆角,所以这个方法也能画椭圆
canvas.drawOval(Rect.fromLTRB(100, 100, 200, 200), paint);


image.png


画一个圆角矩形


canvas.drawRRect(RRect.fromLTRBR(100, 100, 200, 200, Radius.circular(10)), paint);


image.png


画线


var paint = Paint()
  ..isAntiAlias = true
  ..strokeWidth = 2 //线条宽度
  ..style = PaintingStyle.fill //填充
  ..color = Colors.black; //绘制颜色
canvas.drawLine(Offset(100,100), Offset(200,200), paint);


image.png


绘制文字


绘制文字要用TextPainter+TextSpan


TextSpan textSpan = new TextSpan(style: new TextStyle(fontSize: 20,color: Colors.red), text: "测试文字");
TextPainter tp = new TextPainter(
    text: textSpan,
    textAlign: TextAlign.center,
    textDirection: TextDirection.ltr
);
//根据设置的参数进行布局
tp.layout();
//将文字textPainter的内容放到画布的指定坐标上
tp.paint(canvas, new Offset(100, 100));


image.png


相关文章
|
Android开发 iOS开发 容器
Flutter控件封装之轮播图Banner
Flutter中实现轮播图的方式有很多种,比如使用三方flutter_swiper,card_swiper等等,使用这些三方,可以很快很方便的实现一个轮播图展示,基本上也能满足我们日常的开发需求,如果说,想要一些定制化的操作,那么就不得不去更改源码或者自己自定义一个,自己定义的话,Flutter中提供了原生组件PageView,可以使用它很方便的来实现一个轮播图。
377 0
|
4月前
|
Android开发
Flutter控件的显示与隐藏
Flutter控件的显示与隐藏
157 3
|
4月前
|
开发者 监控 开发工具
如何将JSF应用送上云端?揭秘在Google Cloud Platform上部署JSF应用的神秘步骤
【8月更文挑战第31天】本文详细介绍如何在Google Cloud Platform (GCP) 上部署JavaServer Faces (JSF) 应用。首先,确保已准备好JSF应用并通过Maven构建WAR包。接着,使用Google Cloud SDK登录并配置GCP环境。然后,创建`app.yaml`文件以配置Google App Engine,并使用`gcloud app deploy`命令完成部署。最后,通过`gcloud app browse`访问应用,并利用GCP的监控和日志服务进行管理和故障排查。整个过程简单高效,帮助开发者轻松部署和管理JSF应用。
61 0
|
5月前
|
移动开发 UED 容器
Flutter-自定义可展开文本控件
Flutter-自定义可展开文本控件
91 0
|
5月前
Flutter-自定义三角形评分控件
Flutter-自定义三角形评分控件
49 0
|
7月前
Flutter StatefulWidget传递数据,多级控件传递数据
Flutter StatefulWidget传递数据,多级控件传递数据 在Flutter中,StatefulWidget可以通过构造函数将数据传递给其子控件,这种方式适用于一些简单的场景。但是,当存在多级嵌套控件时,将数据从祖先传递到后代可能会变得困难。在这种情况下,可以使用Flutter提供的InheritedWidget类来传递数据。
116 0
Flutter的ClipRRect控件介绍
ClipRRect(Rounded Rectangle Clip)是Flutter中的一个控件,用于将其子控件剪裁为圆角矩形形状。
|
API Android开发
Flutter控件封装之视频进度条
视频控制器,三方所提供的样式,有时很难满足我们的需求,对于此情况,我们不得不在此基础上自行封装,今天所分享的文章就是一个很简单的控制器封装案例,包含了基本的播放暂停,全屏和退出全屏,以及时间和进度的展示,封装了事件回调以及各个属性的控制,基本上可以满足大部分的业务需求,即便不满足,大家也可以在此基础之上拓展。
300 0
|
Android开发 UED
Flutter控件之Tab选项卡封装
Tab选项卡,这是一个非常常见且权重很高的一个组件,随便打开一个App,比如掘金,如下图,首页顶部就是一个Tab选项卡,这个功能可以说,几乎每个App都会存在。
233 0
|
存储 Android开发
Flutter控件之图片Image封装
Flutter中偏偏原生的控件,少了很多需要又常用的属性,比如宽高,比如内外边距,又比如点击事件,如果不采取封装,视图的结构会一层嵌套一层,徒增很多的冗余代码,所以,为了简洁代码,还有为了拓展原生组件没有的属性,就不得不进行一次简单的封装,使其在调用的时候,可以很方便的实现某些功能。
143 0