Use drawing controller

This commit is contained in:
2026-02-04 14:00:32 +01:00
parent 93127cada8
commit e1d72de718
2 changed files with 21 additions and 2 deletions

View File

@@ -1,6 +1,8 @@
import 'package:flutter/foundation.dart'; import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter/services.dart'; import 'package:flutter/services.dart';
import 'package:flutter_drawing_board/flutter_drawing_board.dart';
import 'package:flutter_drawing_board/paint_contents.dart';
import 'package:flutter_fullscreen/flutter_fullscreen.dart'; import 'package:flutter_fullscreen/flutter_fullscreen.dart';
import 'package:logging/logging.dart'; import 'package:logging/logging.dart';
import 'package:pdfrx/pdfrx.dart'; import 'package:pdfrx/pdfrx.dart';
@@ -41,10 +43,20 @@ class _SheetViewerPageState extends State<SheetViewerPage>
int _currentPage = 1; int _currentPage = 1;
int _totalPages = 1; int _totalPages = 1;
bool _isPaintMode = false; bool _isPaintMode = false;
late DrawingController _drawingController;
@override @override
void initState() { void initState() {
super.initState(); super.initState();
// Initialize drawing controller with default configuration
_drawingController = DrawingController(
config: DrawConfig(
contentType: SimpleLine,
strokeWidth: 4.0,
color: Colors.black,
),
maxHistorySteps: 100, // Limit undo/redo history (default: 100)
);
FullScreen.addListener(this); FullScreen.addListener(this);
FullScreen.setFullScreen(widget.config.fullscreen); FullScreen.setFullScreen(widget.config.fullscreen);
_documentLoaded = _loadPdf(); _documentLoaded = _loadPdf();
@@ -52,6 +64,7 @@ class _SheetViewerPageState extends State<SheetViewerPage>
@override @override
void dispose() { void dispose() {
_drawingController.dispose();
FullScreen.removeListener(this); FullScreen.removeListener(this);
_document?.dispose(); _document?.dispose();
super.dispose(); super.dispose();
@@ -225,7 +238,10 @@ class _SheetViewerPageState extends State<SheetViewerPage>
// Show paint mode layer when active // Show paint mode layer when active
Visibility( Visibility(
visible: _isPaintMode, visible: _isPaintMode,
child: PaintModeLayer(pageDisplay: pageDisplay), child: PaintModeLayer(
pageDisplay: pageDisplay,
drawingController: _drawingController,
),
), ),
], ],
); );

View File

@@ -6,13 +6,15 @@ import 'pdf_page_display.dart';
/// Drawing overlay for annotating PDF pages. /// Drawing overlay for annotating PDF pages.
/// ///
/// Uses flutter_drawing_board to provide a paint canvas over the PDF. /// Uses flutter_drawing_board to provide a paint canvas over the PDF.
/// Only available in single-page mode. /// Only working in single-page mode.
class PaintModeLayer extends StatelessWidget { class PaintModeLayer extends StatelessWidget {
final PdfPageDisplay pageDisplay; final PdfPageDisplay pageDisplay;
final DrawingController drawingController;
const PaintModeLayer({ const PaintModeLayer({
super.key, super.key,
required this.pageDisplay, required this.pageDisplay,
required this.drawingController,
}); });
@override @override
@@ -24,6 +26,7 @@ class PaintModeLayer extends StatelessWidget {
final (pageSize, _) = pageDisplay.calculateScaledPageSizes(maxSize); final (pageSize, _) = pageDisplay.calculateScaledPageSizes(maxSize);
return DrawingBoard( return DrawingBoard(
controller: drawingController,
background: SizedBox( background: SizedBox(
width: pageSize.width, width: pageSize.width,
height: pageSize.height, height: pageSize.height,