Add painting overlay
This commit is contained in:
@@ -1,5 +1,6 @@
|
|||||||
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:logging/logging.dart';
|
import 'package:logging/logging.dart';
|
||||||
import 'package:pdfrx/pdfrx.dart';
|
import 'package:pdfrx/pdfrx.dart';
|
||||||
import 'package:sheetless/api.dart';
|
import 'package:sheetless/api.dart';
|
||||||
@@ -27,6 +28,7 @@ class _SheetViewerPageState extends State<SheetViewerPage> {
|
|||||||
late Future<bool> documentLoaded;
|
late Future<bool> documentLoaded;
|
||||||
PdfDocument? document;
|
PdfDocument? document;
|
||||||
bool twoPageMode = true;
|
bool twoPageMode = true;
|
||||||
|
bool paintMode = false;
|
||||||
|
|
||||||
@override
|
@override
|
||||||
void initState() {
|
void initState() {
|
||||||
@@ -82,19 +84,11 @@ class _SheetViewerPageState extends State<SheetViewerPage> {
|
|||||||
|
|
||||||
return Stack(
|
return Stack(
|
||||||
children: [
|
children: [
|
||||||
Container(
|
Stack(
|
||||||
alignment: Alignment.bottomLeft,
|
children: [
|
||||||
margin: EdgeInsets.all(10),
|
Visibility(
|
||||||
child: FloatingActionButton(
|
visible: !paintMode,
|
||||||
onPressed: () {
|
child: GestureDetector(
|
||||||
setState(() {
|
|
||||||
twoPageMode = !twoPageMode;
|
|
||||||
});
|
|
||||||
},
|
|
||||||
child: Icon(twoPageMode ? Icons.filter_1 : Icons.filter_2),
|
|
||||||
),
|
|
||||||
),
|
|
||||||
GestureDetector(
|
|
||||||
onTapUp: (TapUpDetails details) {
|
onTapUp: (TapUpDetails details) {
|
||||||
// Get the size of the screen
|
// Get the size of the screen
|
||||||
final screenWidth = MediaQuery.of(context).size.width;
|
final screenWidth = MediaQuery.of(context).size.width;
|
||||||
@@ -130,7 +124,7 @@ class _SheetViewerPageState extends State<SheetViewerPage> {
|
|||||||
key: ValueKey(page),
|
key: ValueKey(page),
|
||||||
document: document,
|
document: document,
|
||||||
pageNumber: page,
|
pageNumber: page,
|
||||||
alignment: Alignment.center,
|
maximumDpi: 300,
|
||||||
),
|
),
|
||||||
Positioned.fill(
|
Positioned.fill(
|
||||||
child: Container(
|
child: Container(
|
||||||
@@ -149,6 +143,7 @@ class _SheetViewerPageState extends State<SheetViewerPage> {
|
|||||||
key: ValueKey(page),
|
key: ValueKey(page),
|
||||||
document: document,
|
document: document,
|
||||||
pageNumber: page + 1,
|
pageNumber: page + 1,
|
||||||
|
maximumDpi: 300,
|
||||||
// alignment: Alignment.center,
|
// alignment: Alignment.center,
|
||||||
),
|
),
|
||||||
Positioned.fill(
|
Positioned.fill(
|
||||||
@@ -164,6 +159,77 @@ class _SheetViewerPageState extends State<SheetViewerPage> {
|
|||||||
],
|
],
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
|
),
|
||||||
|
|
||||||
|
// Positioned.fill(
|
||||||
|
Visibility(
|
||||||
|
visible: paintMode,
|
||||||
|
child: SizedBox.expand(
|
||||||
|
child: LayoutBuilder(
|
||||||
|
builder: (context, constraints) {
|
||||||
|
return DrawingBoard(
|
||||||
|
background: SizedBox(
|
||||||
|
width: calcScaledPageWidth(
|
||||||
|
constraints.maxHeight,
|
||||||
|
document!.pages.elementAt(page).size,
|
||||||
|
),
|
||||||
|
height: constraints.maxHeight,
|
||||||
|
child: PdfPageView(
|
||||||
|
document: document,
|
||||||
|
pageNumber: page,
|
||||||
|
alignment: Alignment.center,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
// showDefaultTools: true,
|
||||||
|
// showDefaultActions: true,
|
||||||
|
boardConstrained: true,
|
||||||
|
minScale: 1,
|
||||||
|
maxScale: 3,
|
||||||
|
alignment: Alignment.topRight,
|
||||||
|
boardBoundaryMargin: EdgeInsets.all(0),
|
||||||
|
);
|
||||||
|
},
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
Container(
|
||||||
|
alignment: Alignment.bottomLeft,
|
||||||
|
margin: EdgeInsets.all(10),
|
||||||
|
child: Column(
|
||||||
|
spacing: 10,
|
||||||
|
mainAxisAlignment: MainAxisAlignment.end,
|
||||||
|
children: [
|
||||||
|
FloatingActionButton(
|
||||||
|
onPressed: () {
|
||||||
|
setState(() {
|
||||||
|
if (twoPageMode) {
|
||||||
|
// TODO: notification that paint mode only in single page mode
|
||||||
|
} else {
|
||||||
|
paintMode = !paintMode;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
},
|
||||||
|
child: Icon(Icons.brush),
|
||||||
|
),
|
||||||
|
FloatingActionButton(
|
||||||
|
onPressed: () {
|
||||||
|
setState(() {
|
||||||
|
twoPageMode = !twoPageMode;
|
||||||
|
if (twoPageMode) {
|
||||||
|
paintMode = false;
|
||||||
|
// TODO: notification that paint mode was deactivated since only possible in single page mode
|
||||||
|
}
|
||||||
|
});
|
||||||
|
},
|
||||||
|
child: Icon(
|
||||||
|
twoPageMode ? Icons.filter_1 : Icons.filter_2,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
),
|
||||||
],
|
],
|
||||||
);
|
);
|
||||||
} else if (snapshot.hasError) {
|
} else if (snapshot.hasError) {
|
||||||
@@ -183,4 +249,8 @@ class _SheetViewerPageState extends State<SheetViewerPage> {
|
|||||||
),
|
),
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
double calcScaledPageWidth(double parentHeight, Size pageSize) {
|
||||||
|
return parentHeight * pageSize.width / pageSize.height;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user