Progress Indicator 위젯
웹뷰(WebView)를 통해 홈페이지를 불러올때 시간이 오래 걸리는 경우가 있어요
로딩 시간이 오래 걸릴때 ProgressIndicator 위젯을 통해 시각적으로 사이트정보를
가져오는 중임을 알려주는 기능을 구현 합니다.
※ 해외 사용시 필수 기능입니다.
Flutter Progress Indicator 위젯
LinearProgressIndicator
CircularProgressIndicator
1. WebView 이벤트 처리 Dart 파일 생성
WebView 는 페이지 로드시 3개의 로드 이벤트를 제공 합니다.
- onPageStarted
- onProgress
- onPageFinished
추가로 만들 dart 소스파일을 저장할 폴더 "lib/src" 를 만들어 주고,
WebView 이벤트 처리용 dart 소스파일을 src 폴더 아래에
"lib/src/web_view_stack.dart" 파일을 생성 합니다.
Dart 파일을 만들때는 .dart 확장자를 입력하지 않아도 됩니다.
web_view_stack.dart 파일에 다음 코드를 등록 합니다.
웹 페이지 호출시 페이지 로드 비율이 100% 미만일 때 Progress Indicator 위젝을 불러와 오버레이 합니다.
import 'package:flutter/material.dart';
import 'package:webview_flutter/webview_flutter.dart';
class WebViewStack extends StatefulWidget {
const WebViewStack({Key? key}) : super(key: key);
@override
State<WebViewStack> createState() => _WebViewStackState();
}
class _WebViewStackState extends State<WebViewStack> {
var loadingPercentage = 0;
@override
Widget build(BuildContext context) {
return Stack(
children: [
WebView(
initialUrl: 'https://flutter.dev',
onPageStarted: (url) {
setState(() {
loadingPercentage = 0;
});
},
onProgress: (progress) {
setState(() {
loadingPercentage = progress;
});
},
onPageFinished: (url) {
setState(() {
loadingPercentage = 100;
});
},
),
if (loadingPercentage < 100)
// 페이지 로드 비율이 100% 미만일때 Progress Indicator 위젯 보여주기
LinearProgressIndicator(
value: loadingPercentage / 100.0,
),
],
);
}
}
2. main.dart 에서 WebViewStack 부르도록 수정
main.dart 에서 WebView 를 호출했던 부분을
위에서 만든 web_view_stack -> WebViewStack() 을 호출 하도록 변경
import 'package:flutter/material.dart';
import 'src/web_view_stack.dart'; // 추가
// import 'package:webview_flutter/webview_flutter.dart'; // 제거
void main() {
runApp(
const MaterialApp(
home: WebViewApp(),
),
);
}
class WebViewApp extends StatefulWidget {
const WebViewApp({Key? key}) : super(key: key);
@override
State<WebViewApp> createState() => _WebViewAppState();
}
class _WebViewAppState extends State<WebViewApp> {
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: const Text('Flutter WebView'),
),
body: const WebViewStack(),
// WebView 위젯을 새로만든 WebViewStack 으로 교체
);
}
}
3. Progress Indicator 실행 테스트
main.dart 파일까지 수정 후 Android AVD 를 실행
run (Shift+F10)
1) LinearProgressIndicator 위젯 예시
if (loadingPercentage < 100)
LinearProgressIndicator(
value: loadingPercentage / 100.0,
),
2) CircularProgressIndicator 위젯 예시
if (loadingPercentage < 100)
CircularProgressIndicator(
value: loadingPercentage / 100.0,
),
LinearProgressIndicator 승리로~
원 코드는 다음 사이트를 참고 했습니다.
https://codelabs.developers.google.com/
'IT' 카테고리의 다른 글
[.6] 플러터-Flutter WebView 웹페이지에 자바스크립트 사용설정 추가 (0) | 2022.11.07 |
---|---|
[.5] 플러터-Flutter WebView 안드로이드 apk 파일 생성 (net::ERR_CACHE_MISS / Physical Device) (1) | 2022.11.07 |
[.3] 플러터-Flutter WebView 를 이용한 플로터 하이브리드 앱 프로젝트 (0) | 2022.11.04 |
[.2] 플러터-(Flutter) - Android Studio AVD 가상 디바이스 설치 (0) | 2022.11.01 |
[.1] 플러터-(Flutter) 안드로이드 스튜디오 IDE - 플로터 프로젝트 생성 (0) | 2022.10.30 |