iOS 에서는 잘 되는데 안드로이드에서는 인앱웹뷰를 통해 만든 웹뷰 화면에서 다운로드 링크를 눌렀을 경우,
아무 일도 일어나지 않는다.
그래서 찾은 가장 쉬운 해결방법!
1. 패키지를 다운받는다.
그런데 InAppWebView를 사용하려면 받아두었을지도?
https://pub.dev/packages/url_launcher
url_launcher | Flutter package
Flutter plugin for launching a URL. Supports web, phone, SMS, and email schemes.
pub.dev
2. AndroidManifest.xml에 다음 코드 추가
<uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
3. 다운로드 요청을 잡아서 수동으로 처리
child: InAppWebView(
key: webViewKey,
initialUrlRequest: URLRequest(url: WebUri(initUrl)),
onWebViewCreated: (controller) {
webController = controller;
},
...
// 하기 코드 추가
onDownloadStartRequest: (controller, downloadRequest) async {
String downloadUrl = downloadRequest.url.toString();
if (Platform.isAndroid) {
if (await canLaunchUrl(WebUri(downloadUrl))) {
await launchUrl(WebUri(downloadUrl));
} else {
throw 'Could not launch $downloadUrl';
}
}
},
...
이렇게 처리하면 번거롭게 다른 패키지들을 설치하지 않아도 다운로드가 된다.
'Flutter' 카테고리의 다른 글
[Flutter] android/AOS Terminated/killed Heads-up notification 배너 알림 띄우기 (0) | 2024.10.08 |
---|---|
[Flutter] InAppWebView mailto: open 메일 앱으로 연동 / 열기 (0) | 2024.09.11 |
[Flutter] AndroidID 확인방법 / android SSAID 확인 방법 (2) | 2024.09.10 |
[Flutter] iOS app badge count handle / iOS 배지 숫자 제어 (4) | 2024.08.30 |
[Flutter] SafeArea 배경색 칠하기 / safeArea background color (0) | 2024.08.05 |