import 'dart:io'; import 'volumes.dart'; /// 약속: 파일 탐색기가 기기에서 받는 것 - 저장 장치 목록 · 드라이브를 열 수 있는지 (화면을 멈추지 않는 비동기) · /// Android 에서만 하는 것 (경로 입력의 SMB 안내 · SMB 서버 메뉴, 앱 휴지통, .nomedia 메뉴). /// 앱은 [RealExplorerDevice] (이 기기 그대로) 를 쓰고, 시험은 시험 폴더를 저장 장치로 주는 구현을 넘긴다 abstract interface class ExplorerDevice { Future> listVolumes(); Future probeDrive(String path); bool get androidPaths; bool get androidTrash; bool get nomedia; } /// 이 기기 그대로 class RealExplorerDevice implements ExplorerDevice { const RealExplorerDevice(); @override Future> listVolumes() => localVolumes(); @override Future probeDrive(String path) => Directory(path).exists(); @override bool get androidPaths => Platform.isAndroid; @override bool get androidTrash => Platform.isAndroid; @override bool get nomedia => Platform.isAndroid; }