v3.1.0+2hand_signature
允许绘制平滑签名的签名垫小部件。提供多种绘制和导出设置,并支持 SVG。
一个 Flutter 插件,提供用于绘制平滑签名的签名板。
{"sdk":"flutter"}{"sdk":"flutter"}以下为英文项目原文快照,最新内容请访问 GitHub。
A Flutter plugin providing a Signature Pad for drawing smooth signatures. This library is written in a pure Dart/Flutter environment to provide support for all platforms. It's easy to use, with a variety of drawing and export settings, and also supports SVG files.
Signature
The signature pad drawing is based on Cubic Bézier curves and offers a choice between performance and 'beauty' modes.
line, shape, and arc presets for different visual styles. It's also possible to implement a custom drawing experience.Here is a simple example of how to use the signature pad.
import 'package:hand_signature/signature.dart';
final control = HandSignatureControl(
initialSetup: SignaturePathSetup(
threshold: 5.0,
smoothRatio: 0.65,
velocityRange: 2.0,
pressureRatio: 0.0,
),
);
final widget = HandSignature(
control: control,
drawer: ShapeSignatureDrawer(
color: Colors.blueGrey,
width: 2.0,
maxWidth: 10.0,
),
);
HandSignatureControlThis class handles the logic behind the signature, controlling input touches and managing the control points of the signature curve. SignaturePathSetup defines how input data will be handled.
threshold: Controls the minimal distance between two points. A higher distance creates a smoother, but less precise, curve.smoothRatio: (0 - 1) Controls how smooth the curve will be. A higher ratio creates a smoother, but less precise, curve. The best results are typically between 0.5 and 0.75.velocityRange: Controls the curve size based on the drawing speed. A thin line corresponds to a fast movement, while a thick line corresponds to a slow movement.presureRatio: (0 - 1) Ratio between pressure sensitivity and velocity. 0.0 = only velocity, 1.0 = only pressure. Some platforms/devices (like mouse pointer) doesn't support sensitivity'args: Custom variables - mostly used for custom HandSignatureDrawer.HandSignatureThis widget handles touch gestures and draws the curve on the canvas.
control: The HandSignatureControl that processes input and stores the raw data.drawer: The HandSignatureDrawer that handles the painting of the signature.backgroundColor: The background color of the signature canvas.placeholder: A widget to display when the signature is empty.Drawers are responsible for rendering the signature on the canvas. You can use one of the pre-built drawers or create your own.
LineSignatureDrawer: Basic line with a single line width.ShapeSignatureDrawer: Default drawer, mimics an ink pen. It varies line width based on velocity and/or pressure. This is a good option for exporting to SVG.ArcSignatureDrawer: Also mimics an ink pen, but is less performant than ShapeSignatureDrawer. This is the default drawer when exporting to an image.DynamicSignatureDrawer: Dynamically selects the drawing type based on provided arguments.MultiSignatureDrawer: Combines multiple drawers, allowing for complex effects and layering.You can create a custom drawer by extending HandSignatureDrawer and implementing the paint method. This allows full control over how the signature is rendered.
class MyCustomDrawer extends HandSignatureDrawer {
@override
void paint(Canvas canvas, Size size, List<CubicPath> paths) {
// Custom painting logic here
}
}
Check custom_sample.dart for dynamic setup and drawing.
Custom Drawer
You can modify properties like canvas size, stroke width, and color during export. You can also provide a custom drawer when exporting to an image. The most common export formats are SVG and PNG. During export, data are re-rendered with the preferred setup and output dimensions.
State can be saved with toMap() and restored with the import() method.
final control = HandSignatureControl();
// Export to SVG
final svg = control.toSvg();
// Export to PNG
final png = await control.toImage(
width: 512,
height: 512,
drawer: ShapeSignatureDrawer(
color: Colors.black,
),
);
// Export to raw data
final data = control.toMap();
// Import from raw data
control.import(data);
shape: Generates a reasonably small file that is well-supported by most programs.arc: Generates a larger SVG file, which some programs may struggle to handle.line: A simple Bezier curve.Image or Picture object, which can then be converted to PNG bytes.
arc: Default drawer when exporting image data.drawer: Specifies HandSignatureDrawer to use during canvas export.timestamp and pressure information for each point.You can display an exported SVG file using a library like flutter_svg.