mirror of
https://github.com/venera-app/venera.git
synced 2025-09-27 15:57:25 +00:00
implement saving image, sharing image, reading settings and chapters view
This commit is contained in:
@@ -6,14 +6,15 @@ import 'package:flutter/services.dart';
|
||||
import 'package:venera/foundation/app.dart';
|
||||
import 'package:venera/utils/ext.dart';
|
||||
import 'package:path/path.dart' as p;
|
||||
import 'package:share_plus/share_plus.dart' as s;
|
||||
|
||||
export 'dart:io';
|
||||
|
||||
|
||||
class FilePath {
|
||||
const FilePath._();
|
||||
|
||||
static String join(String path1, String path2, [String? path3, String? path4, String? path5]) {
|
||||
static String join(String path1, String path2,
|
||||
[String? path3, String? path4, String? path5]) {
|
||||
return p.join(path1, path2, path3, path4, path5);
|
||||
}
|
||||
}
|
||||
@@ -121,7 +122,7 @@ class DirectoryPicker {
|
||||
final _methodChannel = const MethodChannel("venera/method_channel");
|
||||
|
||||
Future<Directory?> pickDirectory() async {
|
||||
if(App.isWindows || App.isLinux) {
|
||||
if (App.isWindows || App.isLinux) {
|
||||
var d = await FilePicker.platform.getDirectoryPath();
|
||||
_directory = d;
|
||||
return d == null ? null : Directory(d);
|
||||
@@ -138,15 +139,50 @@ class DirectoryPicker {
|
||||
}
|
||||
|
||||
Future<void> dispose() async {
|
||||
if(_directory == null) {
|
||||
if (_directory == null) {
|
||||
return;
|
||||
}
|
||||
if(App.isAndroid && _directory != null) {
|
||||
if (App.isAndroid && _directory != null) {
|
||||
return Directory(_directory!).deleteIgnoreError(recursive: true);
|
||||
}
|
||||
if(App.isIOS || App.isMacOS) {
|
||||
if (App.isIOS || App.isMacOS) {
|
||||
await _methodChannel.invokeMethod("stopAccessingSecurityScopedResource");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Future<void> saveFile(
|
||||
{required Uint8List data, required String filename}) async {
|
||||
var res = await FilePicker.platform.saveFile(
|
||||
bytes: data,
|
||||
fileName: filename,
|
||||
lockParentWindow: true,
|
||||
);
|
||||
if (App.isDesktop && res != null) {
|
||||
await File(res).writeAsBytes(data);
|
||||
}
|
||||
}
|
||||
|
||||
class Share {
|
||||
static void shareFile({
|
||||
required Uint8List data,
|
||||
required String filename,
|
||||
required String mime,
|
||||
}) {
|
||||
if (!App.isWindows) {
|
||||
s.Share.shareXFiles(
|
||||
[s.XFile.fromData(data, mimeType: mime)],
|
||||
fileNameOverrides: [filename],
|
||||
);
|
||||
} else {
|
||||
// write to cache
|
||||
var file = File(FilePath.join(Directory.systemTemp.path, filename));
|
||||
file.writeAsBytesSync(data);
|
||||
s.Share.shareXFiles([s.XFile(file.path)]);
|
||||
}
|
||||
}
|
||||
|
||||
static void shareText(String text) {
|
||||
s.Share.share(text);
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user