From 98f4698d5b2ff33b9738a7fc68b8d92ae182fc3c Mon Sep 17 00:00:00 2001 From: LittleSheep Date: Sun, 16 Nov 2025 17:40:37 +0800 Subject: [PATCH] :bug: Fixes of serval bugs --- lib/screens/files/file_list.dart | 6 +++++- lib/utils/format.dart | 8 +++++++- lib/widgets/account/friends_overview.dart | 21 ++++++++++++++++++--- lib/widgets/thought/thought_shared.dart | 2 +- lib/widgets/usage_overview.dart | 7 +++++-- 5 files changed, 36 insertions(+), 8 deletions(-) diff --git a/lib/screens/files/file_list.dart b/lib/screens/files/file_list.dart index a6666dde..da982f05 100644 --- a/lib/screens/files/file_list.dart +++ b/lib/screens/files/file_list.dart @@ -13,6 +13,7 @@ import 'package:island/widgets/content/sheet.dart'; import 'package:island/widgets/file_list_view.dart'; import 'package:island/widgets/usage_overview.dart'; import 'package:material_symbols_icons/symbols.dart'; +import 'package:styled_widget/styled_widget.dart'; class FileListScreen extends HookConsumerWidget { const FileListScreen({super.key}); @@ -196,7 +197,10 @@ class FileListScreen extends HookConsumerWidget { builder: (context) => SheetScaffold( titleText: 'Usage Overview', - child: UsageOverviewWidget(usage: usage, quota: quota), + child: UsageOverviewWidget( + usage: usage, + quota: quota, + ).padding(horizontal: 8, vertical: 16), ), ); } diff --git a/lib/utils/format.dart b/lib/utils/format.dart index 9e376f35..7f2ce247 100644 --- a/lib/utils/format.dart +++ b/lib/utils/format.dart @@ -5,5 +5,11 @@ String formatFileSize(int bytes) { if (bytes < 1024 * 1024 * 1024) { return '${(bytes / (1024 * 1024)).toStringAsFixed(2)} MB'; } - return '${(bytes / (1024 * 1024 * 1024)).toStringAsFixed(2)} GB'; + if (bytes < 1024 * 1024 * 1024 * 1024) { + return '${(bytes / (1024 * 1024 * 1024)).toStringAsFixed(2)} GB'; + } + if (bytes < 1024 * 1024 * 1024 * 1024 * 1024) { + return '${(bytes / (1024 * 1024 * 1024 * 1024)).toStringAsFixed(2)} TB'; + } + return '${(bytes / (1024 * 1024 * 1024 * 1024 * 1024)).toStringAsFixed(2)} PB'; } diff --git a/lib/widgets/account/friends_overview.dart b/lib/widgets/account/friends_overview.dart index 444240e2..3c61c3f7 100644 --- a/lib/widgets/account/friends_overview.dart +++ b/lib/widgets/account/friends_overview.dart @@ -1,9 +1,12 @@ +import 'dart:async'; import 'package:flutter/material.dart'; -import 'package:flutter_riverpod/flutter_riverpod.dart'; +import 'package:flutter_hooks/flutter_hooks.dart'; +import 'package:hooks_riverpod/hooks_riverpod.dart'; import 'package:cached_network_image/cached_network_image.dart'; import 'package:island/models/account.dart'; import 'package:island/pods/network.dart'; import 'package:island/pods/config.dart'; +import 'package:island/widgets/account/account_pfc.dart'; import 'package:material_symbols_icons/material_symbols_icons.dart'; import 'package:riverpod_annotation/riverpod_annotation.dart'; import 'package:styled_widget/styled_widget.dart'; @@ -20,11 +23,20 @@ Future> friendsOverview(Ref ref) async { .toList(); } -class FriendsOverviewWidget extends ConsumerWidget { +class FriendsOverviewWidget extends HookConsumerWidget { const FriendsOverviewWidget({super.key}); @override Widget build(BuildContext context, WidgetRef ref) { + // Set up periodic refresh every minute + useEffect(() { + final timer = Timer.periodic(const Duration(minutes: 1), (_) { + ref.invalidate(friendsOverviewProvider); + }); + + return () => timer.cancel(); // Cleanup when widget is disposed + }, const []); + final friendsOverviewAsync = ref.watch(friendsOverviewProvider); return friendsOverviewAsync.when( @@ -53,7 +65,10 @@ class FriendsOverviewWidget extends ConsumerWidget { itemCount: onlineFriends.length, itemBuilder: (context, index) { final friend = onlineFriends[index]; - return _FriendTile(friend: friend); + return AccountPfcGestureDetector( + uname: friend.account.name, + child: _FriendTile(friend: friend), + ); }, ), ), diff --git a/lib/widgets/thought/thought_shared.dart b/lib/widgets/thought/thought_shared.dart index 2280e50e..302725fa 100644 --- a/lib/widgets/thought/thought_shared.dart +++ b/lib/widgets/thought/thought_shared.dart @@ -444,7 +444,7 @@ class ThoughtChatInterface extends HookConsumerWidget { top: 16, bottom: MediaQuery.of(context).padding.bottom + - 56 + + 8 + inputHeight.value, // Leave space for thought input ), reverse: true, diff --git a/lib/widgets/usage_overview.dart b/lib/widgets/usage_overview.dart index ff85c756..8485aa0f 100644 --- a/lib/widgets/usage_overview.dart +++ b/lib/widgets/usage_overview.dart @@ -1,6 +1,7 @@ import 'package:fl_chart/fl_chart.dart'; import 'package:flutter/material.dart'; import 'package:gap/gap.dart'; +import 'package:island/utils/format.dart'; import 'package:styled_widget/styled_widget.dart'; class UsageOverviewWidget extends StatelessWidget { @@ -26,7 +27,7 @@ class UsageOverviewWidget extends StatelessWidget { Expanded( child: _buildStatCard( 'All Uploads', - '${((nonNullUsage['total_usage_bytes'] as num) / (1024 * 1024 * 1024)).toStringAsFixed(3)} GiB', + formatFileSize(nonNullUsage['total_usage_bytes'] as int), ), ), Expanded( @@ -42,7 +43,9 @@ class UsageOverviewWidget extends StatelessWidget { Expanded( child: _buildStatCard( 'Quota', - '${nonNullUsage['total_quota']} MiB', + formatFileSize( + (nonNullUsage['total_quota'] as int) * 1024 * 1024, + ), ), ), Expanded(