반응형
webview_flutter를 사용하는것을 간단하게 정리하겠다.
Flutter에서 변경이 있을 때마다 일일히 업데이트해서 나가는 것이 싫어서
webView를 도입해서 필요한 부분은 앱 배포없이 업데이트 하고 싶어서 찾아보게 되었다.
1) webview_flutter 설치
flutter pub add webview_flutter
webview_flutter는 flutter 공식에서 개발하고 있는 라이브러리라서 믿고 바로 설치를 하였다.
2) 기본코드 설명 (URL 사용 )
controller = WebViewController()
..setJavaScriptMode(JavaScriptMode.unrestricted)
..setNavigationDelegate(
NavigationDelegate(
onProgress: (int progress) {
// Update loading bar.
},
onPageStarted: (String url) {},
onPageFinished: (String url) {},
onHttpError: (HttpResponseError error) {},
onWebResourceError: (WebResourceError error) {},
onNavigationRequest: (NavigationRequest request) {
if (request.url.startsWith('https://www.youtube.com/')) {
return NavigationDecision.prevent;
}
return NavigationDecision.navigate;
},
),
)
..loadRequest(Uri.parse('https://flutter.dev'));
위 페이지에 들어 가면 webview_flutter 설명에 나와있는 코드다. 코드를 간단하게 설명하자면
- WebViewController() : WebViewController 생성
- setJavaScriptMode(JavaScriptMode.unrestricted) : 웹 페이지에서 자바스크립트를 제한 없이 실행할 수 있도록 허용
- setNavigationDelegate() : 웹 페이지의 페이지 로드, 오류처리, 특정 요청 차단 등을 처리하기 위한 델리게이트 설정
- loadRequest : 메서드를 사용하여 URL을 로드
3) HTML data를 직접 받는 경우
필자는 URL을 받는 것이 아닌 html data를 서버에서 내려 받으려고 했다.
final webViewController = WebViewController();
webViewController.loadHtmlString(noticePopup.noticePopupHtml!);
if (await _noticePopupPreferences.shouldShowNoticePopup()) {
Get.dialog(
barrierDismissible: false,
NoticePopupDialog(
dismissedToday: _noticePopupPreferences.dismissForToday,
webViewController: webViewController,
),
);
}
- loadHtmlString을 이용하여 html data를 웹뷰로 보여 줄 수 있다.
- Get.dialog : dialog를 띄우기 위함
4) 앱화면에 띄우기
Widget build(BuildContext context) {
return Material(
color: Colors.transparent,
child: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
Stack(children: [
SizedBox(
width: 280,
height: 340,
child: ClipRRect(
borderRadius: BorderRadius.circular(20),
child: WebViewWidget(controller: webViewController),
),
),
Positioned(
left: 244,
top: 16,
child: GestureDetector(
child: SvgPicture.asset(
'assets/icons/x-close.svg',
),
onTap: () => Get.back()),
)
]),
Container(
margin: const EdgeInsets.only(top: 12),
child: GestureDetector(
behavior: HitTestBehavior.opaque,
onTap: () {
dismissedToday;
Get.back();
},
child: const Text(
'오늘 하루 보지 않기',
style: TextStyle(
fontSize: 13,
color: AppColors.white01,
fontWeight: FontWeight.w400,
decoration: TextDecoration.underline,
decorationColor: AppColors.white01,
),
),
),
)
],
),
),
);
}
- WebViewWidget : 이부분이 핵심이다. 3번에서 만들었던, controller를 이 부분에 넣어주기만 하면 끝
5) 결과화면
개발 중이여서 간단한 서버에서 HTML 보낸 결과물이 잘 뜨는 것을 확인 할 수 있다.
반응형
'프레임워크 > Flutter' 카테고리의 다른 글
[Flutter] 해시태그(#) 표현하기 (0) | 2024.09.07 |
---|---|
[Flutter] TextScale 고정하기, 텍스트크기 고정 (0) | 2024.06.22 |
[Flutter]flutter_screenutil 사용방법, 반응형 앱 만들기 (0) | 2024.06.08 |
[Flutter]반응형 앱, flutter_screenutil vs responsive_framework (1) | 2024.06.08 |
[Flutter] ios/Android AppStroe, PlayStore 이동하기 (1) | 2024.06.08 |
댓글