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
|
// Print
|
||||||
_buildSubTile(
|
_buildSubTile(
|
||||||
'Print',
|
'Print',
|
||||||
|
|||||||
+51
@@ -19,6 +19,7 @@
|
|||||||
*/
|
*/
|
||||||
import 'dart:ui' as ui;
|
import 'dart:ui' as ui;
|
||||||
|
|
||||||
|
import 'package:file_picker/file_picker.dart';
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:flutter/services.dart';
|
import 'package:flutter/services.dart';
|
||||||
import 'package:flutter_material_design_icons/flutter_material_design_icons.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 {
|
class OpenInAppMenuItemButton extends HookConsumerWidget {
|
||||||
const OpenInAppMenuItemButton({super.key, required this.selectedTabId});
|
const OpenInAppMenuItemButton({super.key, required this.selectedTabId});
|
||||||
|
|
||||||
|
|||||||
+1
@@ -586,6 +586,7 @@ class TabMenu extends HookConsumerWidget {
|
|||||||
},
|
},
|
||||||
),
|
),
|
||||||
SaveToPdfMenuItemButton(selectedTabId: selectedTabId),
|
SaveToPdfMenuItemButton(selectedTabId: selectedTabId),
|
||||||
|
ExportScreenshotMenuItemButton(selectedTabId: selectedTabId),
|
||||||
PrintMenuItemButton(selectedTabId: selectedTabId),
|
PrintMenuItemButton(selectedTabId: selectedTabId),
|
||||||
],
|
],
|
||||||
leadingIcon: const Icon(MdiIcons.fileExport),
|
leadingIcon: const Icon(MdiIcons.fileExport),
|
||||||
|
|||||||
Reference in New Issue
Block a user