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

插件详情v0.2.2

whiteboardkit

一个出色的 Flutter 白板实现,带有绘图工具箱。

近 30 天下载
29
喜欢数
50
Pub 分数
35

安装插件

flutter pub add whiteboardkit

插件介绍

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

WhiteboardKit 是一个 Flutter 包,提供了一个功能完整的白板实现,配备直观的绘图工具箱。它使用户能够使用可自定义的工具(如笔、记号笔和橡皮擦)在画布上进行绘制、擦除和注释。设计简洁且性能出色,支持触摸输入,并能无缝集成到需要实时草图或协作注释的应用程序中。适用于教育、设计或笔记类应用,可在各种设备上提供流畅且响应迅速的绘图体验。

适合场景

  • 数字素描
  • 协作白板
  • 教育工具
  • 交互式笔记
  • 设计原型

主要特点

  • 带有多个工具的绘图工具箱
  • 实时触摸输入支持
  • 可自定义的描边样式
  • 与 Flutter 的简单集成
  • 响应式画布渲染

适合对象

  • Educators
  • Designers
  • 应用开发者
  • Students
  • 远程协作工具

使用建议

  • 有限的平台特定优化
  • 无内置云同步
  • 需要手动管理状态
  • 未针对大画布进行优化
  • 默认情况下无撤销/重做历史

原始 README

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

whiteboardkit

A Flutter whiteboard widget with so much extendability and flexibility to be used with no need to rewrite your own whiteboard. Enjoy !

Package demo

live demo: https://abdulaziz-mohammed.github.io/whiteboardkit

Usage

import whiteboardkit.dart

import 'package:whiteboardkit/whiteboardkit.dart';

     

Drawing:

Define DrawingController and listen to change event:

  DrawingController controller;

  @override
  void initState() {
    controller = new DrawingController();
    controller.onChange().listen((draw){
      //do something with it
    });
    super.initState();
  }

Place your Whiteboard inside a constrained widget ie. Container,Expanded etc

@override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text(widget.title),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            Expanded(
              child: Whiteboard(
                controller: controller,
              ),
            ),
          ],
        ),
      ),
    );
  }

     

Playback:

Define PlaybackController and supply it with a WhiteboardDraw object:

  PlaybackController controller;

  @override
  void initState() {
    var draw = WhiteboardDraw.fromWhiteboardSVG("<svg...");
    controller = new PlaybackController(draw);
    super.initState();
  }

Place your Whiteboard inside a constrained widget ie. Container,Expanded etc

@override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text(widget.title),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            Expanded(
              child: Whiteboard(
                controller: controller,
              ),
            ),
          ],
        ),
      ),
    );
  }

     

Stream (e.g. online whiteboard):

Define SketchStreamController:

  PlayerController controller;

  @override
  void initState() {
    controller = new SketchStreamController();
    super.initState();
  }

Place your Whiteboard inside a constrained widget ie. Container,Expanded etc

@override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text(widget.title),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            Expanded(
              child: Whiteboard(
                controller: controller,
              ),
            ),
          ],
        ),
      ),
    );
  }

Later, supply it with DrawChunk when recived from DrawingController:

  controller.addChunk(chunk);

You'l need to enable chunks producing in DrawingController then start listening to new chunks:

    controller = new DrawingController(enableChunk: true);
    _chunkSubscription = controller.onChunk().listen((chunk) {
    }

DrawChunk supports:

  • chunk.toJson()
  • DrawChunk.fromJson("...")
    which together can help in transfering chunks through network or any other medium

     

WhiteboardDraw class:

  • Map<String, dynamic> toJson()
  • WhiteboardDraw.fromJson(Map<String, dynamic> json)
  • string getSVG():
    Export to SVG Image format string

所属分类

依赖

依赖清单 5 项

源码仓库

使用此插件的项目

暂无相关数据。