import 'package:flutter/material.dart'; import '../app/app_controller.dart'; import '../core/file_ops.dart' show samePath; import '../core/vfs.dart' show vBasename, vDirname; import '../l10n/tr.dart'; import 'path_label.dart'; import 'theme.dart'; /// X-plore 숨기기 (관리자 결정 10/18): 환경 설정 > 파일 탐색기 [목록에서 숨긴 항목] - 숨긴 것을 보고 하나씩 · 모두 풀기. /// 파일은 건드리지 않는다 (목록에서만 다시 보이게) Future showHiddenItems(BuildContext context, AppController c) => showDialog( context: context, builder: (ctx) => StatefulBuilder(builder: (ctx, set) { final list = c.settings.explorerHiddenItems; Future unhide(List which) async { await c.updateSettings((s) => s.explorerHiddenItems = [ for (final x in s.explorerHiddenItems) if (!which.any((w) => samePath(w, x))) x, ]); set(() {}); } return AlertDialog( scrollable: true, title: Text(trf('목록에서 숨긴 항목 ({0}개)', [list.length])), content: SizedBox( width: 520, child: Column(mainAxisSize: MainAxisSize.min, crossAxisAlignment: CrossAxisAlignment.start, children: [ Text(tr('풀면 파일 탐색기 목록에 다시 보입니다. 파일 자체는 바꾸지 않습니다.'), style: const TextStyle(fontSize: 12, color: JjColors.textDim)), const SizedBox(height: 8), if (list.isEmpty) Text(tr('숨긴 항목이 없습니다')), for (final x in list) ListTile( contentPadding: EdgeInsets.zero, dense: true, title: Text(vBasename(x), maxLines: 1, overflow: TextOverflow.ellipsis), subtitle: Text(friendlyPath(vDirname(x)), maxLines: 2, overflow: TextOverflow.ellipsis), trailing: IconButton( tooltip: tr('숨기기 풀기'), icon: const Icon(Icons.visibility_outlined), onPressed: () => unhide([x]), ), ), ]), ), actions: [ if (list.length > 1) TextButton(onPressed: () => unhide([...list]), child: Text(tr('모두 풀기'))), FilledButton(onPressed: () => Navigator.pop(ctx), child: Text(tr('닫기'))), ], ); }), );