pencil_field 0.0.2
pencil_field: ^0.0.2 copied to clipboard
Pencil Input
FLUTTER PENCIL FIELD
pencil_field 0.0.2 #
Widget for pencil / stylus input on different devices and platforms. This widget is intended for any freehand input like signatures or drawings. The widget also supports full persistence of the input. It can either be accessed as JSON (to keep it editable) or as image (e.g., for archiving or immutability reasons).
How to use #
The PencilField can be embedded in any screen (in this case in a StatefulWidget):
PencilField(
controller: widget.controller,
pencilPaint: pencilPaint,
onPencilDrawingChanged: widget.onPencilDrawingChanged,
decoration: PencilDecoration(
type: PencilDecorationType.chequered,
backgroundColor: Colors.white,
patternColor: Colors.grey[300]!,
numberOfLines: 10,
lineWidth: 2,
padding: const EdgeInsets.all(10),
),
pencilOnly: true,
)
And resulting input can be displayed like so (also embedded in a StatefulWidget). As everything is stored in vector format scaling (e.g. for creating previews) is easy:
PencilDisplay(
pencilDrawing: widget.controller.drawing.scale(
scale: scale,
),
decoration: PencilDecoration(backgroundColor: Colors.white),
)
Features #
PencilField #
| Name | Type | Default | Description |
|---|---|---|---|
| key | Key? |
Assign key to PencilField widget | |
| controller | PencilController |
Always required | Controller to interact with the widget during user input |
| pencilPaint | PencilPaint |
Always required | The paint that will be used for the current interaction |
| decoration | PencilDecoration? |
Blank decoration | Style of the background (see below) |
| onPencilDrawingChanged | OnPencilDrawingChanged? |
Callback when the content of the drawing changes | |
| pencilOnly | bool |
false | If set to true only input from pen devices is used |
PencilFieldDecoration #
| Name | Type | Default | Description |
|---|---|---|---|
| type | PencilDeorationType |
blank | Type of decoration. It can either be blank, chequered, lines, dots. Examples can be found in test folder. |
| padding | EdgeInsets |
EdgeInsets.all(0) | Inner space of the decoration. The pattern will only be drawn inside |
| backgroundColor | Color |
Colors.transparent | Color of the background. |
| patternColor | Color |
Colors.black54 | Color of the pattern |
| lineWidth | double |
1.0 | Line width for the pattern. In case of dots this is used for the radius. |
| numberOfLines | int |
0 | Number of lines. In case of the chequered pattern the vertical distance is used for the horizontal distance as well. |
PencilDisplay #
| Name | Type | Default | Description |
|---|---|---|---|
| key | Key? |
Assign key to PencilField widget | |
| pencilDrawing | PencilDrawing |
Always required | The drawing that shall be displayed |
| decoration | PencilDecoration? |
Style of the background. | |
PencilDrawing #
| Name | Type | Default | Description |
|---|---|---|---|
| strokes | <PencilStrokes>[] |
Always required | Initial set of strokes. Can be an empty array. |
PencilDrawing also lets you save (toJson) and load (fromJson) a drawing. It also provides its own versioning mechanism to ensure
compatibility with future version.
Additional information #
A full example is provided in the repository.
Upcoming features #
- Additional eraser that only erases strokes within a circle
- Pan support for the input widget and the display widget
- Pinch support for the display widget
- Input widget decoration that supports images as background