generated from ttipo/project-base
feat(flutter): 메일 읽기 화면을 만든다 (App1Reader)
머리는 앱 화면, 본문은 스크립트를 끈 WebView 에 앱이 감싼 CSP 문서로 보인다. 받은 HTML 은 서버 정화 뒤 앱이 한 번 더 허용 목록으로 다시 쓰고, 외부 이미지는 [이미지 보기] 뒤 앱이 Dio 로 받아 data: 로 넣는다(토큰이 WebView 에 가지 않는다). - 읽음 · 중요 · 이동 · 스팸 · 삭제 · 영구 삭제, 붙잡힌 메일의 보내기 취소 · 예약 취소는 목록과 같은 규칙. 응답은 그 요청이 바꾼 칸만 지금 값에 덮는다 - 첨부는 앱 임시 폴더(cacheDir/downloads)에 받아 FileProvider + ACTION_VIEW 로 연다(파일 여는 플러그인 없이). 열 형식은 확장자 먼저, 웹 문서 · svg · 설치 파일 · 인증서는 받지 않는다 - 응답 인터셉터가 바이트 · 스트림 실패 본문(64KB 까지)에서 코드를 읽고, 뜻밖의 실패에도 handler.next 로 끝낸다 - 리뷰 H1: 같은 그림을 수백 번 쓴 메일이 문서를 GB 단위로 키우던 것 — 문서에 싣는 그림 글을 나온 횟수까지 세어 10M 자에서 멈춘다 - 리뷰 M1: 짧고 깊은 본문을 화면 isolate 에서 정화하던 것 — 길이와 중첩 비용으로 고르고(6,144자 · 비용 5,000), 그 밖은 Isolate.run - 새 의존성: webview_flutter 4.14.1 · webview_flutter_android 4.12.0 · html 0.15.7(+ csslib 1.0.2) — 배포 2주 넘음. path_provider · mime 은 lock 에 있던 판을 직접 의존으로 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
@@ -29,20 +29,36 @@ dependencies:
|
||||
flutter_secure_storage: ^10.0.0
|
||||
# 화면 이동 — redirect 하나가 세션 상태로 화면을 고른다 (core/router/)
|
||||
go_router: ^17.5.0
|
||||
# 받은 메일 본문의 두 번째 정화 — HTML5 파서로 읽어 허용 목록만 남긴다 (features/mail/domain/mail_html.dart).
|
||||
# 0.15.7 은 2026-08-28 배포(Dart 팀 tools.dart.dev). 따라오는 csslib 1.0.2 도 같은 곳
|
||||
html: ^0.15.7
|
||||
# 날짜 · 숫자 형식 — flutter_localizations 가 이 판으로 고정한다
|
||||
intl: 0.20.2
|
||||
# 받은 첨부를 열 형식 — 확장자 → MIME 표(core/files/file_types.dart). 이미 lock 에 따라 들어와 있던 2.0.0(2024-09-30 배포, Dart 팀) 그대로
|
||||
mime: ^2.0.0
|
||||
# 앱 판 — User-Agent 만들기
|
||||
package_info_plus: ^10.2.2
|
||||
# 받은 첨부를 둘 앱 임시 폴더(Android cacheDir) — 이미 shared_preferences 를 따라 들어와 있던 판이다 (core/files/)
|
||||
path_provider: ^2.1.5
|
||||
# 첫 실행 표시 하나만 둔다 — 토큰은 여기에 두지 않는다 (core/storage/first_run_marker.dart)
|
||||
shared_preferences: ^2.5.6
|
||||
# 다른 앱 열기 — 로그인 2단계 켜기의 [인증 앱에 추가](otpauth 주소 — features/auth/data/authenticator_launcher.dart).
|
||||
# 6.3.3 은 2026-10-02 배포(Flutter 팀). canLaunchUrl 은 쓰지 않는다 — debug 판 안드로이드가 주소째 로그에 남긴다
|
||||
url_launcher: ^6.3.3
|
||||
# 받은 메일 본문 — 스크립트를 끈 WebView 한 겹(features/mail/presentation/widgets/mail_body_view.dart).
|
||||
# 4.14.1 은 2026-07-07 배포(Flutter 팀). Dart 3.11 · Flutter 3.41 에 맞는 하위 판은
|
||||
# webview_flutter_android 4.12.0(2026-04-29) · _wkwebview 3.25.1(2026-04-29) · _platform_interface 2.15.1(2026-03-25) 이다
|
||||
# (그 위 판은 Dart 3.12 · Flutter 3.44 가 든다)
|
||||
webview_flutter: ^4.14.1
|
||||
# 안드로이드 WebView 의 파일 · content 접근 끄기 · 글자 크기 — 위 webview_flutter 가 고른 판 그대로
|
||||
webview_flutter_android: ^4.12.0
|
||||
|
||||
dev_dependencies:
|
||||
flutter_test:
|
||||
sdk: flutter
|
||||
flutter_lints: ^6.0.0
|
||||
# 시험의 가짜 WebView(test/support/fake_webview.dart) — webview_flutter 가 고른 판 그대로(새로 받는 것 없음)
|
||||
webview_flutter_platform_interface: ^2.15.1
|
||||
|
||||
flutter:
|
||||
uses-material-design: true
|
||||
|
||||
Reference in New Issue
Block a user