💄 Optimize cloud files

This commit is contained in:
2025-11-18 22:06:38 +08:00
parent 1e908502dc
commit c8ad791ff3

View File

@@ -6,6 +6,7 @@ import 'package:file_saver/file_saver.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter_hooks/flutter_hooks.dart'; import 'package:flutter_hooks/flutter_hooks.dart';
import 'package:gap/gap.dart'; import 'package:gap/gap.dart';
import 'package:go_router/go_router.dart';
import 'package:hooks_riverpod/hooks_riverpod.dart'; import 'package:hooks_riverpod/hooks_riverpod.dart';
import 'package:island/models/file.dart'; import 'package:island/models/file.dart';
import 'package:island/pods/config.dart'; import 'package:island/pods/config.dart';
@@ -66,34 +67,6 @@ class CloudFileWidget extends HookConsumerWidget {
); );
if (item.mimeType == 'application/pdf') { if (item.mimeType == 'application/pdf') {
Future<void> downloadFile() async {
try {
showSnackBar('Downloading file...');
final client = ref.read(apiClientProvider);
final tempDir = await getTemporaryDirectory();
var extName = extension(item.name).trim();
if (extName.isEmpty) {
extName = item.mimeType?.split('/').lastOrNull ?? 'pdf';
}
final filePath = '${tempDir.path}/${item.id}.$extName';
await client.download(
'/drive/files/${item.id}',
filePath,
queryParameters: {'original': true},
);
await FileSaver.instance.saveFile(
name: item.name.isEmpty ? '${item.id}.$extName' : item.name,
file: File(filePath),
);
showSnackBar('File saved to downloads');
} catch (e) {
showErrorAlert(e);
}
}
return Container( return Container(
height: 400, height: 400,
decoration: BoxDecoration( decoration: BoxDecoration(
@@ -166,30 +139,20 @@ class CloudFileWidget extends HookConsumerWidget {
children: [ children: [
IconButton( IconButton(
icon: const Icon( icon: const Icon(
Symbols.download, Symbols.more_horiz,
color: Colors.white,
size: 16,
),
onPressed: downloadFile,
padding: EdgeInsets.all(4),
constraints: const BoxConstraints(),
),
IconButton(
icon: const Icon(
Symbols.info,
color: Colors.white, color: Colors.white,
size: 16, size: 16,
), ),
onPressed: () { onPressed: () {
showModalBottomSheet( context.pushNamed(
useRootNavigator: true, 'fileDetail',
context: context, pathParameters: {'id': item.id},
isScrollControlled: true, extra: item,
builder: (context) => FileInfoSheet(item: item),
); );
}, },
padding: EdgeInsets.all(4), padding: EdgeInsets.all(4),
constraints: const BoxConstraints(), constraints: const BoxConstraints(),
visualDensity: VisualDensity.compact,
), ),
], ],
), ),
@@ -201,34 +164,6 @@ class CloudFileWidget extends HookConsumerWidget {
} }
if (item.mimeType?.startsWith('text/') == true) { if (item.mimeType?.startsWith('text/') == true) {
Future<void> downloadFile() async {
try {
showSnackBar('Downloading file...');
final client = ref.read(apiClientProvider);
final tempDir = await getTemporaryDirectory();
var extName = extension(item.name).trim();
if (extName.isEmpty) {
extName = item.mimeType?.split('/').lastOrNull ?? 'txt';
}
final filePath = '${tempDir.path}/${item.id}.$extName';
await client.download(
'/drive/files/${item.id}',
filePath,
queryParameters: {'original': true},
);
await FileSaver.instance.saveFile(
name: item.name.isEmpty ? '${item.id}.$extName' : item.name,
file: File(filePath),
);
showSnackBar('File saved to downloads');
} catch (e) {
showErrorAlert(e);
}
}
return Container( return Container(
height: 400, height: 400,
decoration: BoxDecoration( decoration: BoxDecoration(
@@ -304,30 +239,20 @@ class CloudFileWidget extends HookConsumerWidget {
children: [ children: [
IconButton( IconButton(
icon: const Icon( icon: const Icon(
Symbols.download, Symbols.more_horiz,
color: Colors.white,
size: 16,
),
onPressed: downloadFile,
padding: EdgeInsets.all(4),
constraints: const BoxConstraints(),
),
IconButton(
icon: const Icon(
Symbols.info,
color: Colors.white, color: Colors.white,
size: 16, size: 16,
), ),
onPressed: () { onPressed: () {
showModalBottomSheet( context.pushNamed(
useRootNavigator: true, 'fileDetail',
context: context, pathParameters: {'id': item.id},
isScrollControlled: true, extra: item,
builder: (context) => FileInfoSheet(item: item),
); );
}, },
padding: EdgeInsets.all(4), padding: EdgeInsets.all(4),
constraints: const BoxConstraints(), constraints: const BoxConstraints(),
visualDensity: VisualDensity.compact,
), ),
], ],
), ),