搜索插件、代码仓与 APP 分类

blobs 封面
插件详情v2.0.0

blobs

创建美丽的斑点 - 固定/随机斑点生成、动画、svgs 等

AndroidiOSWebmacOSWindowsLinux
近 30 天下载
2250
喜欢数
363
Pub 分数
140

安装插件

flutter pub add blobs

插件介绍

基于插件公开信息、社区数据与项目使用情况整理的选型参考。

Blobs 是一个 Flutter 包,可帮助开发者在多个平台上创建视觉上吸引人且可自定义的有机流体形状。它支持固定和随机的 Blob 生成、平滑动画以及 SVG 导出,可用于设计。适用于背景、插图或装饰性元素,简化了将动态艺术形状集成到应用中的过程。该包轻量级,可在 Android、iOS、Web、macOS、Windows 和 Linux 上无缝运行。

适合场景

  • 应用背景设计
  • 动画UI元素
  • 装饰性插图
  • 基于 SVG 的图形
  • 交互式艺术组件
  • 移动和Web应用视觉效果

主要特点

  • 固定和随机 blob 生成
  • 流畅的动画
  • SVG 导出支持
  • 跨平台兼容性
  • 可自定义的形状参数
  • 与 Flutter 小部件的轻松集成

适合对象

  • 寻求创意元素的UI设计师
  • 开发艺术化界面的开发者
  • 需要有机形状的项目
  • 视觉内容丰富的布局的应用程序
  • 原型化交互设计
  • 跨平台应用开发

使用建议

  • 大量动画斑点带来的性能影响
  • 对精确几何形状的控制有限
  • 最适合装饰性而非功能性使用
  • 可能需要调整以在低端设备上获得最佳渲染效果
  • 不适合复杂的向量操作

原始 README

以下为关联源码仓库的 README 原文快照,最新内容请访问源码仓库。


Blobs

Create beautiful blob shapes with minimal code.

Features
  • Generate blob in any size

  • Control the randomness and complexity

  • Animate the blob

  • Set ID for a fixed blob

  • Shuffle between the fixed blobs

  • Loop animation

  • Blob clipper

  • Get SVG path

  • Debug, Child widget, controller and few more

 

 

Contents

 

Widgets

There are four widgets,

  • Blob.random() - Generate random blobs

  • Blob.animatedRandom() - Generate blobs and animate the shape change

  • Blob.fromID() - Use one or more ID's for fixed blobs

  • Blob.animatedFromID() - Animate the shape change

     

basic_blobs

 

⚙️ Blob Size

Size of the blob (mandatory).


Blob.random(size:200),

 

⚙️ Customise shape

edgesCount is the nodes count. More the value, more the complexity. Minimum is 3 and max is 300. But for cool shapes you can stick between 3-20. Default is 7

minGrowth is the minimum size of the blob. Smaller the value, more the randomness. Value should be an interger between 2-9. Default is 4.


Blob.random(
 size:200,
 edgesCount:5,
 minGrowth:4,
),

 

⚙️ Controller

You can use BlobController, if you want to change the shape programatically. As o now it has only one method called change(). When you call this, the shape will be changed and returns some useful info of the blob (BlobData).


BlobController blobCtrl =  BlobController();


Blob.random(
 size:200,
 edgesCount:5,
 minGrowth:4,
 controller: blobCtrl,
),


BlobData blobData = blobCtrl.change();

 

⚙️ Fixed shapes

In most scenarios you wanted a same blob to be rendered every time. This can be achieved using ID. It is just a plain string contains the shape data.

You can get the ID from the blobData from the controller's change() method. Or you can also generate blobs and get ID from https://blobs.app/

ID looks like 5-6-43178

id option accepts one or multiple id's. If it has only one id, then it will be a fixed blob.


Blob.fromID(
 size:200,
 id:['X-Y-ZZZZ'],
 controller: blobCtrl,
),

If you provide multiple id's, then it will show each one in order on changing.


Blob.fromID(
 size:200,
 id:['X-Y-ZZZZ','X-Y-ZZZZ','X-Y-ZZZZ'],
 controller: blobCtrl
),

 

⚙️ Styles

You can change the color, add gradient, make outlined using BlobStyles()


Blob.random(
 size:200,
 styles:  BlobStyles(
   color:  Colors.green,
   fillType:  BlobFillType.stroke,
   gradient:  LinearGradient(),
   strokeWidth:3,
 ),
),

Gradient can be Linear or Radial. LinearGradient will look like this,


LinearGradient(colors: [Colors.red, Colors.green])
.createShader(Rect.fromLTRB(0, 0, 300, 300))

style_gradient style_custom_color style_outline

 

⚙️ Child Widget

You can use child property to display a child which looks like the blob as background.


Blob.random(
 size:200,
 child:  Text('I am a child!'),
),

blobs_with_child

 

⚙️ Animating the blobs

Whenever the blobs are changing, this widget will animate the shape change.


Blob.animatedRandom(
 size:200,
 edgesCount:5,
 minGrowth:4,
 duration:  Duration(milliseconds:500),
),

duration is optional. Default is 500 milliseconds.

animated_basic

 

⚙️ Change shapes automatically

When you want to change the shapes automatically you can set loop property to true.


Blob.animatedRandom(
 size:200,
 edgesCount:5,
 minGrowth:4,
 loop:  true,
),

 

⚙️ Animate Fixed shapes

If you use loop in Blob.fromAnimatedID() widget, it will change shapes within the provided blobs.


Blob.animatedFromID(
 size:200,
 id:['X-Y-ZZZZ','X-Y-ZZZZ','X-Y-ZZZZ'],
 loop:  true,
),

animated_fixed_blobs

 

⚙️ Debug

When you set debug to true, it will show you circles and lines that connect the blob points.


Blob.random(
 size:200,
 debug:  true,
),

debug_blob

 

Clipper

Sometime you might want to clip the widget by blob shape. In such cases you can use BlobClipper(). You can either provide id or edgesCount and minGrowth options.


Container(
 child:  ClipPath(
  clipper: BlobClipper(<OPTIONS>),
  child: Image.network("https://bit.ly/2nirIxg"),
 ),
)

clipper

 

Service

Blobs shape are created by BlobGenerator(). Both widgets and clipper uses this internally to create the shape and then it is painted to canvas. This will return BlobData.


BlobData blobData =  BlobGenerator(
 edgesCount:  7,
 minGrowth:  4,
 size:  Size(30, 30),
 id:  null,
).generate();

 

ℹ️ BlobData

It is the raw data, which contains the path definitions, coordinates and other basic info about the blob.


BlobData(
 dots,
 innerRad,
 svgPath,
 coords,
 id,
 edgesCount,
 minGrowth,
 size,
 originalSize,
)

 

📐SVG

BlobData contains svgPath info. It is just a path string which will look like this,

M326.0,251.5Q282.0,303.0,226.5,315.0Q171.0,327.0,118.5,296.0Q66.0,265.0,90.0,211.5Q114.0,158.0,145.0,126.0Q176.0,94.0,228.5,96.0Q281.0,98.0,325.5,149.0Q370.0,200.0,326.0,251.5Z

from this you can easily create SVG like


<svg viewBox="0 0 400 400" xmlns="http://www.w3.org/2000/svg">
 <path fill="#474787" d="M326.0,251.5Q282.0,303.0,226.5,315.0Q171.0,327.0,118.5,296.0Q66.0,265.0,90.0,211.5Q114.0,158.0,145.0,126.0Q176.0,94.0,228.5,96.0Q281.0,98.0,325.5,149.0Q370.0,200.0,326.0,251.5Z" />
</svg>

Inspirations

We can create cool visual elements with blobs. Here's a few things that came to my mind.

ins#1 ins#2 #ins3

License

This project is licensed under MIT.

Contribution and issue

Any kind of contributions are welcome :)

For any issues and suggestions please create a issue card in Github repository

所属分类

源码仓库

使用此插件的项目

暂无相关数据。