웹 브라우저 버튼: 열려 있는 브라우저로 돌아가기
브라우저에서 [다운로드] → "목록 보기" 로 다운로드 목록에 간 뒤 위쪽 [웹 브라우저] 를 누르면 새 브라우저가 홈 주소로 열려 보던 페이지를 잃었다. 이미 열린 브라우저가 있으면 그 화면까지 돌아간다 (BrowserPage.open). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>main
parent
6c15f74e72
commit
39f65f414c
|
|
@ -278,8 +278,8 @@ Future<void> main(List<String> args) async {
|
|||
}
|
||||
// 시작 화면을 "웹 브라우저" 로 정했으면 브라우저를 연다 (MKV 화면은 그 아래에 있음)
|
||||
if (controller.settings.startScreen == 'browser') {
|
||||
navigatorKey.currentState?.push(MaterialPageRoute<void>(
|
||||
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<void> runAndroid(String dataDir) async {
|
|||
}
|
||||
} catch (_) {}
|
||||
if (controller.settings.startScreen == 'browser') {
|
||||
navigatorKey.currentState?.push(MaterialPageRoute<void>(
|
||||
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;
|
||||
|
|
|
|||
|
|
@ -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<void>(
|
||||
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<void>(
|
||||
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)),
|
||||
|
|
|
|||
|
|
@ -71,6 +71,30 @@ class BrowserPage extends StatefulWidget {
|
|||
|
||||
@override
|
||||
State<BrowserPage> createState() => _BrowserPageState();
|
||||
|
||||
/// 브라우저 화면의 경로 이름 (이미 열려 있으면 그 화면으로 돌아가기 위해)
|
||||
static const routeName = 'browser';
|
||||
|
||||
/// 열려 있는 브라우저 화면 수
|
||||
static int _open = 0;
|
||||
|
||||
/// 웹 브라우저로: 이미 열린 브라우저가 있으면 그 화면으로 돌아가고 (보던 페이지 그대로),
|
||||
/// 없으면 새로 연다. 다운로드 목록 · 플레이어 등에서 브라우저 버튼을 눌러도 보던 페이지를 잃지 않는다.
|
||||
static Future<void> 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<void>(
|
||||
settings: const RouteSettings(name: routeName),
|
||||
builder: (_) => BrowserPage(c: c, downloads: downloads, bookmarks: bookmarks),
|
||||
));
|
||||
}
|
||||
}
|
||||
|
||||
class _BrowserPageState extends State<BrowserPage> {
|
||||
|
|
@ -108,8 +132,15 @@ class _BrowserPageState extends State<BrowserPage> {
|
|||
|
||||
BookmarksController get bm => widget.bookmarks;
|
||||
|
||||
@override
|
||||
void initState() {
|
||||
super.initState();
|
||||
BrowserPage._open++;
|
||||
}
|
||||
|
||||
@override
|
||||
void dispose() {
|
||||
BrowserPage._open--;
|
||||
_address.dispose();
|
||||
_addressFocus.dispose();
|
||||
super.dispose();
|
||||
|
|
|
|||
Loading…
Reference in New Issue