🐛 Fix bugs in file list

This commit is contained in:
2026-01-17 22:04:20 +08:00
parent 6487a1ff65
commit 41df5f3907
2 changed files with 25 additions and 22 deletions

View File

@@ -43,6 +43,7 @@ class FileListScreen extends HookConsumerWidget {
constraints: const BoxConstraints(maxWidth: 400, minHeight: 32), constraints: const BoxConstraints(maxWidth: 400, minHeight: 32),
hintText: 'Search files...', hintText: 'Search files...',
hintStyle: WidgetStatePropertyAll(TextStyle(fontSize: 14)), hintStyle: WidgetStatePropertyAll(TextStyle(fontSize: 14)),
textStyle: WidgetStatePropertyAll(TextStyle(fontSize: 14)),
onChanged: (value) { onChanged: (value) {
// Update the query state that will be passed to FileListView // Update the query state that will be passed to FileListView
query.value = value.isEmpty ? null : value; query.value = value.isEmpty ? null : value;
@@ -104,25 +105,26 @@ class FileListScreen extends HookConsumerWidget {
) )
: null, : null,
body: usageAsync.when( body: usageAsync.when(
data: (usage) => quotaAsync.when( data: (usage) => quotaAsync.when(
data: (quota) => FileListView( data: (quota) => FileListView(
usage: usage, usage: usage,
quota: quota, quota: quota,
currentPath: currentPath, currentPath: currentPath,
selectedPool: selectedPool, selectedPool: selectedPool,
onPickAndUpload: () => _pickAndUploadFile( onPickAndUpload: () => _pickAndUploadFile(
ref, ref,
currentPath.value, currentPath.value,
selectedPool.value?.id, selectedPool.value?.id,
),
onShowCreateDirectory: _showCreateDirectoryDialog,
mode: mode,
viewMode: viewMode,
isSelectionMode: isSelectionMode,
query: query,
), ),
onShowCreateDirectory: _showCreateDirectoryDialog, loading: () => const Center(child: CircularProgressIndicator()),
mode: mode, error: (e, _) => Center(child: Text('Error loading quota')),
viewMode: viewMode,
isSelectionMode: isSelectionMode,
), ),
loading: () => const Center(child: CircularProgressIndicator()),
error: (e, _) => Center(child: Text('Error loading quota')),
),
loading: () => const Center(child: CircularProgressIndicator()), loading: () => const Center(child: CircularProgressIndicator()),
error: (e, _) => Center(child: Text('Error loading usage')), error: (e, _) => Center(child: Text('Error loading usage')),
), ),

View File

@@ -40,6 +40,7 @@ class FileListView extends HookConsumerWidget {
final ValueNotifier<FileListMode> mode; final ValueNotifier<FileListMode> mode;
final ValueNotifier<FileListViewMode> viewMode; final ValueNotifier<FileListViewMode> viewMode;
final ValueNotifier<bool> isSelectionMode; final ValueNotifier<bool> isSelectionMode;
final ValueNotifier<String?> query;
const FileListView({ const FileListView({
required this.usage, required this.usage,
@@ -51,6 +52,7 @@ class FileListView extends HookConsumerWidget {
required this.mode, required this.mode,
required this.viewMode, required this.viewMode,
required this.isSelectionMode, required this.isSelectionMode,
required this.query,
super.key, super.key,
}); });
@@ -75,7 +77,6 @@ class FileListView extends HookConsumerWidget {
final isSelectionMode = useState<bool>(false); final isSelectionMode = useState<bool>(false);
final selectedFileIds = useState<Set<String>>({}); final selectedFileIds = useState<Set<String>>({});
final currentVisibleItems = useState<List<FileListItem>>([]); final currentVisibleItems = useState<List<FileListItem>>([]);
final query = useState<String?>(null);
final order = useState<String?>('date'); final order = useState<String?>('date');
final orderDesc = useState<bool>(true); final orderDesc = useState<bool>(true);
final queryDebounceTimer = useRef<Timer?>(null); final queryDebounceTimer = useRef<Timer?>(null);
@@ -101,16 +102,16 @@ class FileListView extends HookConsumerWidget {
useEffect(() { useEffect(() {
// Sync query, order, and orderDesc filters // Sync query, order, and orderDesc filters
if (mode.value == FileListMode.unindexed) { if (mode.value == FileListMode.unindexed) {
unindexedNotifier.setQuery(query.value); unindexedNotifier.setQuery(this.query.value);
unindexedNotifier.setOrder(order.value); unindexedNotifier.setOrder(order.value);
unindexedNotifier.setOrderDesc(orderDesc.value); unindexedNotifier.setOrderDesc(orderDesc.value);
} else { } else {
cloudNotifier.setQuery(query.value); cloudNotifier.setQuery(this.query.value);
cloudNotifier.setOrder(order.value); cloudNotifier.setOrder(order.value);
cloudNotifier.setOrderDesc(orderDesc.value); cloudNotifier.setOrderDesc(orderDesc.value);
} }
return null; return null;
}, [query.value, order.value, orderDesc.value, mode.value]); }, [this.query.value, order.value, orderDesc.value, mode.value]);
final isRefreshing = ref.watch( final isRefreshing = ref.watch(
mode.value == FileListMode.normal mode.value == FileListMode.normal