export screenshot
This commit is contained in:
+36
@@ -1650,6 +1650,42 @@ class _ExportExpansion extends ConsumerWidget {
|
||||
},
|
||||
),
|
||||
|
||||
// Export as PNG
|
||||
_buildSubTile(
|
||||
'Export as PNG',
|
||||
icon: MdiIcons.fileImage,
|
||||
onTap: () async {
|
||||
final screenshot = await ref
|
||||
.read(selectedTabSessionProvider)
|
||||
.requestScreenshot();
|
||||
|
||||
final ts = ref.read(tabStateProvider(selectedTabId))!;
|
||||
|
||||
if (screenshot != null) {
|
||||
ui.decodeImageFromList(screenshot, (result) async {
|
||||
try {
|
||||
final png = await result.toByteData(
|
||||
format: ui.ImageByteFormat.png,
|
||||
);
|
||||
|
||||
if (png != null) {
|
||||
await FilePicker.saveFile(
|
||||
fileName: '${ts.titleOrAuthority}.png',
|
||||
type: FileType.custom,
|
||||
allowedExtensions: ['png'],
|
||||
bytes: png.buffer.asUint8List(),
|
||||
);
|
||||
}
|
||||
} finally {
|
||||
result.dispose();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
if (context.mounted) Navigator.pop(context);
|
||||
},
|
||||
),
|
||||
|
||||
// Print
|
||||
_buildSubTile(
|
||||
'Print',
|
||||
|
||||
+51
@@ -19,6 +19,7 @@
|
||||
*/
|
||||
import 'dart:ui' as ui;
|
||||
|
||||
import 'package:file_picker/file_picker.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter/services.dart';
|
||||
import 'package:flutter_material_design_icons/flutter_material_design_icons.dart';
|
||||
@@ -260,6 +261,56 @@ class ShareScreenshotMenuItemButton extends HookConsumerWidget {
|
||||
}
|
||||
}
|
||||
|
||||
class ExportScreenshotMenuItemButton extends HookConsumerWidget {
|
||||
const ExportScreenshotMenuItemButton({
|
||||
super.key,
|
||||
required this.selectedTabId,
|
||||
});
|
||||
|
||||
final String? selectedTabId;
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context, WidgetRef ref) {
|
||||
return MenuItemButton(
|
||||
leadingIcon: const Icon(MdiIcons.fileImage),
|
||||
closeOnActivate: false,
|
||||
child: const Text('Export as PNG'),
|
||||
onPressed: () async {
|
||||
final screenshot = await ref
|
||||
.read(selectedTabSessionProvider)
|
||||
.requestScreenshot();
|
||||
|
||||
final tabState = ref.read(tabStateProvider(selectedTabId))!;
|
||||
|
||||
if (screenshot != null) {
|
||||
ui.decodeImageFromList(screenshot, (result) async {
|
||||
try {
|
||||
final png = await result.toByteData(
|
||||
format: ui.ImageByteFormat.png,
|
||||
);
|
||||
|
||||
if (png != null) {
|
||||
await FilePicker.saveFile(
|
||||
fileName: '${tabState.titleOrAuthority}.png',
|
||||
type: FileType.custom,
|
||||
allowedExtensions: ['png'],
|
||||
bytes: png.buffer.asUint8List(),
|
||||
);
|
||||
}
|
||||
} finally {
|
||||
result.dispose();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
if (context.mounted) {
|
||||
MenuController.maybeOf(context)?.close();
|
||||
}
|
||||
},
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
class OpenInAppMenuItemButton extends HookConsumerWidget {
|
||||
const OpenInAppMenuItemButton({super.key, required this.selectedTabId});
|
||||
|
||||
|
||||
+1
@@ -586,6 +586,7 @@ class TabMenu extends HookConsumerWidget {
|
||||
},
|
||||
),
|
||||
SaveToPdfMenuItemButton(selectedTabId: selectedTabId),
|
||||
ExportScreenshotMenuItemButton(selectedTabId: selectedTabId),
|
||||
PrintMenuItemButton(selectedTabId: selectedTabId),
|
||||
],
|
||||
leadingIcon: const Icon(MdiIcons.fileExport),
|
||||
|
||||
Reference in New Issue
Block a user