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/material.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:logging/logging.dart';
import 'package:pdfrx/pdfrx.dart';
@@ -41,10 +43,20 @@ class _SheetViewerPageState extends State<SheetViewerPage>
int _currentPage = 1;
int _totalPages = 1;
bool _isPaintMode = false;
late DrawingController _drawingController;
@override
void 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.setFullScreen(widget.config.fullscreen);
_documentLoaded = _loadPdf();
@@ -52,6 +64,7 @@ class _SheetViewerPageState extends State<SheetViewerPage>
@override
void dispose() {
_drawingController.dispose();
FullScreen.removeListener(this);
_document?.dispose();
super.dispose();
@@ -225,7 +238,10 @@ class _SheetViewerPageState extends State<SheetViewerPage>
// Show paint mode layer when active
Visibility(
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.
///
/// 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 {
final PdfPageDisplay pageDisplay;
final DrawingController drawingController;
const PaintModeLayer({
super.key,
required this.pageDisplay,
required this.drawingController,
});
@override
@@ -24,6 +26,7 @@ class PaintModeLayer extends StatelessWidget {
final (pageSize, _) = pageDisplay.calculateScaledPageSizes(maxSize);
return DrawingBoard(
controller: drawingController,
background: SizedBox(
width: pageSize.width,
height: pageSize.height,