From 39f65f414c875789ec24947afbac1b1d9bdf7be5 Mon Sep 17 00:00:00 2001 From: RyuJongJin <266630912+RyuJongJin@users.noreply.github.com> Date: Sat, 3 Oct 2026 04:38:29 +0900 Subject: [PATCH] =?UTF-8?q?=EC=9B=B9=20=EB=B8=8C=EB=9D=BC=EC=9A=B0?= =?UTF-8?q?=EC=A0=80=20=EB=B2=84=ED=8A=BC:=20=EC=97=B4=EB=A0=A4=20?= =?UTF-8?q?=EC=9E=88=EB=8A=94=20=EB=B8=8C=EB=9D=BC=EC=9A=B0=EC=A0=80?= =?UTF-8?q?=EB=A1=9C=20=EB=8F=8C=EC=95=84=EA=B0=80=EA=B8=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 브라우저에서 [다운로드] → "목록 보기" 로 다운로드 목록에 간 뒤 위쪽 [웹 브라우저] 를 누르면 새 브라우저가 홈 주소로 열려 보던 페이지를 잃었다. 이미 열린 브라우저가 있으면 그 화면까지 돌아간다 (BrowserPage.open). Co-Authored-By: Claude Opus 5.5 --- lib/main.dart | 8 ++++---- lib/ui/app_actions.dart | 10 +++------- lib/ui/browser_page.dart | 31 +++++++++++++++++++++++++++++++ 3 files changed, 38 insertions(+), 11 deletions(-) diff --git a/lib/main.dart b/lib/main.dart index ddf17fb..d9d1907 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -278,8 +278,8 @@ Future main(List args) async { } // 시작 화면을 "웹 브라우저" 로 정했으면 브라우저를 연다 (MKV 화면은 그 아래에 있음) if (controller.settings.startScreen == 'browser') { - navigatorKey.currentState?.push(MaterialPageRoute( - builder: (_) => BrowserPage(c: controller, downloads: downloads, bookmarks: bookmarks))); + final nav = navigatorKey.currentState; + if (nav != null) unawaited(BrowserPage.open(nav, c: controller, downloads: downloads, bookmarks: bookmarks)); } await checkRequiredTools(ctx, services.shell); final ctx2 = navigatorKey.currentContext; @@ -414,8 +414,8 @@ Future runAndroid(String dataDir) async { } } catch (_) {} if (controller.settings.startScreen == 'browser') { - navigatorKey.currentState?.push(MaterialPageRoute( - builder: (_) => BrowserPage(c: controller, downloads: downloads, bookmarks: bookmarks))); + final nav = navigatorKey.currentState; + if (nav != null) unawaited(BrowserPage.open(nav, c: controller, downloads: downloads, bookmarks: bookmarks)); } // 새 버전 확인 (하루 한 번, 환경 설정에서 끌 수 있음) final ctx = navigatorKey.currentContext; diff --git a/lib/ui/app_actions.dart b/lib/ui/app_actions.dart index be02ea2..ec17672 100644 --- a/lib/ui/app_actions.dart +++ b/lib/ui/app_actions.dart @@ -57,8 +57,7 @@ class AppNavButtons extends StatelessWidget { final nav = Navigator.of(context); nav.popUntil((r) => r.isFirst); if (scope != null && scope.controller.settings.startScreen == 'browser' && scope.bookmarks != null) { - nav.push(MaterialPageRoute( - builder: (_) => BrowserPage(c: scope.controller, downloads: scope.downloads, bookmarks: scope.bookmarks!))); + BrowserPage.open(nav, c: scope.controller, downloads: scope.downloads, bookmarks: scope.bookmarks!); } } @@ -100,11 +99,8 @@ class AppNavButtons extends StatelessWidget { onBrowserPage ? '웹 브라우저 (지금 여기)' : '웹 브라우저', scope?.bookmarks == null || onBrowserPage ? null - : () => Navigator.push( - context, - MaterialPageRoute( - builder: (_) => - BrowserPage(c: scope!.controller, downloads: scope.downloads, bookmarks: scope.bookmarks!))), + : () => BrowserPage.open(Navigator.of(context), + c: scope!.controller, downloads: scope.downloads, bookmarks: scope.bookmarks!), here: onBrowserPage, ), btn(const Icon(Icons.arrow_back), '뒤로', atRoot ? null : () => Navigator.maybePop(context)), diff --git a/lib/ui/browser_page.dart b/lib/ui/browser_page.dart index 3fcf74f..222dfe6 100644 --- a/lib/ui/browser_page.dart +++ b/lib/ui/browser_page.dart @@ -71,6 +71,30 @@ class BrowserPage extends StatefulWidget { @override State createState() => _BrowserPageState(); + + /// 브라우저 화면의 경로 이름 (이미 열려 있으면 그 화면으로 돌아가기 위해) + static const routeName = 'browser'; + + /// 열려 있는 브라우저 화면 수 + static int _open = 0; + + /// 웹 브라우저로: 이미 열린 브라우저가 있으면 그 화면으로 돌아가고 (보던 페이지 그대로), + /// 없으면 새로 연다. 다운로드 목록 · 플레이어 등에서 브라우저 버튼을 눌러도 보던 페이지를 잃지 않는다. + static Future open(NavigatorState nav, + {required AppController c, DownloadManager? downloads, required BookmarksController bookmarks}) async { + if (_open > 0) { + var found = false; + nav.popUntil((r) { + if (r.settings.name == routeName) found = true; + return found || r.isFirst; + }); + if (found) return; + } + await nav.push(MaterialPageRoute( + settings: const RouteSettings(name: routeName), + builder: (_) => BrowserPage(c: c, downloads: downloads, bookmarks: bookmarks), + )); + } } class _BrowserPageState extends State { @@ -108,8 +132,15 @@ class _BrowserPageState extends State { BookmarksController get bm => widget.bookmarks; + @override + void initState() { + super.initState(); + BrowserPage._open++; + } + @override void dispose() { + BrowserPage._open--; _address.dispose(); _addressFocus.dispose(); super.dispose();