플러터 | 웹뷰에서 이전 url 체크하기

소요 시간: 5분

오늘은 Flutter에서 웹뷰를 사용하여 이전 URL을 체크하는 방법에 대해 알아보았다. 웹뷰는 웹 콘텐츠를 앱 내에서 보여주는 강력한 도구로, 다양한 애플리케이션에서 사용된다. 특히 사용자 경험을 향상시키기 위해 웹 페이지 간의 네비게이션을 관리하는 방법이 중요하다는 것을 느꼈다.

먼저, Flutter 프로젝트에 webview_flutter 패키지를 추가하는 것으로 시작했다. pubspec.yaml 파일에 다음과 같이 의존성을 추가했다:

dependencies:
  flutter:
    sdk: flutter
  webview_flutter: ^4.0.7  # 최신 버전을 확인하여 추가

이제 웹뷰를 구현할 차례였다. WebView 위젯을 사용해 기본적인 웹 페이지를 로드하고, 이전 URL을 관리하기 위한 로직을 추가했다. 다음과 같은 방식으로 코드를 작성해 보았다:

import 'package:flutter/material.dart';
import 'package:webview_flutter/webview_flutter.dart';

class WebViewExample extends StatefulWidget {
  @override
  _WebViewExampleState createState() => _WebViewExampleState();
}

class _WebViewExampleState extends State {
  late WebViewController _controller;
  String? _previousUrl; // 이전 URL 저장
  String _currentUrl = ''; // 현재 URL 저장

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text("Flutter WebView Example"),
        actions: [
          IconButton(
            icon: Icon(Icons.arrow_back),
            onPressed: () async {
              if (_previousUrl != null) {
                _controller.loadUrl(_previousUrl!);
                setState(() {
                  _currentUrl = _previousUrl!;
                  _previousUrl = null; // 이전 URL 초기화
                });
              }
            },
          ),
        ],
      ),
      body: WebView(
        initialUrl: 'https://flutter.dev',
        onWebViewCreated: (WebViewController controller) {
          _controller = controller;
        },
        onPageFinished: (String url) {
          setState(() {
            _previousUrl = _currentUrl; // 이전 URL 업데이트
            _currentUrl = url; // 현재 URL 업데이트
          });
        },
        javascriptMode: JavascriptMode.unrestricted,
      ),
    );
  }
}

void main() {
  runApp(MaterialApp(
    home: WebViewExample(),
  ));
}

이 코드는 사용자가 웹 페이지를 탐색하면서 이전 URL을 기록하고, AppBar에 있는 뒤로 가기 버튼을 클릭했을 때 이전 페이지로 돌아갈 수 있게 한다. 페이지가 로드될 때마다 현재 URL을 업데이트하고, 이전 URL을 저장하는 구조였다. 이 과정에서 웹뷰의 다양한 기능을 이해하게 되었다.

하지만 WebViewController에는 이전 URL을 관리하는 내장 기능이 없다는 점을 발견했다. 대신, 현재 URL을 가져오는 currentUrl()과 이전 페이지로 이동할 수 있는 goBack() 메서드가 제공된다. 그래서 사용자가 뒤로 가기를 클릭하면 canGoBack()을 통해 이전 페이지가 존재하는지 확인하고, 그 페이지로 이동하는 방식으로 구현했다.

IconButton(
  icon: Icon(Icons.arrow_back),
  onPressed: () async {
    if (await _controller.canGoBack()) {
      _controller.goBack(); // 이전 페이지로 이동
    }
  },
),

이처럼 이전 URL을 직접 관리하는 것이 아니라, 웹뷰의 기본 메서드를 활용해 이전 페이지로 돌아갈 수 있었다. 이 과정에서 Flutter의 웹뷰 기능이 얼마나 유용한지를 새롭게 깨닫게 되었다. 앞으로도 이런 기능들을 더 깊이 있게 탐구하여 사용자 경험을 극대화할 수 있는 방법을 계속해서 찾아보아야겠다.

플러터 리스트