搜尋套件、儲存庫與 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 項

原始碼儲存庫

使用此套件的專案

暫無相關資料。