From e9fc57ec7fd1b2826f9c3a97130e925f7ab766c9 Mon Sep 17 00:00:00 2001 From: TomH1004 Date: Wed, 15 Oct 2025 14:31:07 +0200 Subject: [PATCH] open file path --- lib/screens/home_screen.dart | 33 +++++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) diff --git a/lib/screens/home_screen.dart b/lib/screens/home_screen.dart index 4f6264f..3918067 100644 --- a/lib/screens/home_screen.dart +++ b/lib/screens/home_screen.dart @@ -1,5 +1,7 @@ +import 'dart:io'; import 'package:flutter/foundation.dart' show kIsWeb; import 'package:flutter/material.dart'; +import 'package:path/path.dart' as path; import '../models/project.dart'; import '../services/storage_service.dart'; import 'project_screen.dart'; @@ -90,6 +92,29 @@ class _HomeScreenState extends State { ); } + Future _openFolder(String filePath) async { + try { + final directory = path.dirname(filePath); + + if (Platform.isLinux) { + await Process.run('xdg-open', [directory]); + } else if (Platform.isWindows) { + await Process.run('explorer', [directory]); + } else if (Platform.isMacOS) { + await Process.run('open', [directory]); + } + } catch (e) { + if (!mounted) return; + ScaffoldMessenger.of(context).showSnackBar( + SnackBar( + content: Text('Failed to open folder: $e'), + backgroundColor: Colors.red, + behavior: SnackBarBehavior.floating, + ), + ); + } + } + Future _showStorageInfo() async { final filePath = await _storageService.getProjectsFilePath(); if (!mounted) return; @@ -132,6 +157,14 @@ class _HomeScreenState extends State { onPressed: () => Navigator.pop(context), child: const Text('Close'), ), + FilledButton.icon( + onPressed: () { + _openFolder(filePath); + Navigator.pop(context); + }, + icon: const Icon(Icons.folder_open), + label: const Text('Open Folder'), + ), ], ), );