From 53d51b8a0e8f796cfc27efb2f1bbc2d7a41951d9 Mon Sep 17 00:00:00 2001 From: LittleSheep Date: Thu, 2 Oct 2025 02:15:48 +0800 Subject: [PATCH] :sparkles: Plain text rendering --- lib/widgets/content/cloud_files.dart | 31 ++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) diff --git a/lib/widgets/content/cloud_files.dart b/lib/widgets/content/cloud_files.dart index b5ced433..874ceee5 100644 --- a/lib/widgets/content/cloud_files.dart +++ b/lib/widgets/content/cloud_files.dart @@ -8,6 +8,7 @@ import 'package:gap/gap.dart'; import 'package:hooks_riverpod/hooks_riverpod.dart'; import 'package:island/models/file.dart'; import 'package:island/pods/config.dart'; +import 'package:island/pods/network.dart'; import 'package:island/services/time.dart'; import 'package:island/utils/format.dart'; import 'package:island/widgets/content/audio.dart'; @@ -91,6 +92,36 @@ class CloudFileWidget extends HookConsumerWidget { ); } + if (item.mimeType?.startsWith('text/') == true) { + return SizedBox( + height: 400, + child: FutureBuilder( + future: ref + .read(apiClientProvider) + .get(uri) + .then((response) => response.data as String), + builder: (context, snapshot) { + if (snapshot.connectionState == ConnectionState.waiting) { + return const Center(child: CircularProgressIndicator()); + } else if (snapshot.hasError) { + return Center( + child: Text('Error loading text: ${snapshot.error}'), + ); + } else if (snapshot.hasData) { + return SingleChildScrollView( + padding: const EdgeInsets.all(16), + child: SelectableText( + snapshot.data!, + style: const TextStyle(fontFamily: 'monospace', fontSize: 14), + ), + ); + } + return const Center(child: Text('No content')); + }, + ), + ); + } + var content = switch (item.mimeType?.split('/').firstOrNull) { 'image' => AspectRatio( aspectRatio: ratio,