6946083aee
Build Android APK / build-apk (push) Failing after 4m37s
- Introduced ChapterListQuery and ChapterListPage classes for better chapter management. - Updated chapterListProvider to handle pagination and canonical ID resolution. - Improved ReaderScreen with enhanced TTS features, including auto-scroll to active paragraph and better handling of TTS state. - Added TtsPlayerWidget with compact mode and improved UI for TTS controls. - Enhanced TtsService to manage speech segments and background mode for TTS. - Implemented battery optimization checks for TTS background mode on Android. - Updated main.dart to ensure proper error handling in a zoned environment.
2.3 KiB
2.3 KiB
Project Guidelines
Code Style
- Dùng Dart/Flutter theo lint mặc định trong
analysis_options.yaml(flutter_lints). - Tổ chức theo feature-first: code mới đặt đúng module trong
lib/features/**, phần dùng chung đặt ởlib/core/**hoặclib/shared/**. - Tránh logic nghiệp vụ trong widget build; chuyển sang provider/notifier.
- Giữ naming nhất quán: file snake_case, class PascalCase, provider rõ nghĩa theo tính năng.
Architecture
lib/main.dart: bootstrap app + ProviderScope.lib/app/: app shell, router và route names.lib/core/: config, network, storage, theme, models dùng toàn app.lib/features/: từng domain (auth, home, search, novel, reader, bookshelf, comments, profile, settings...).lib/shared/: widgets dùng chung.- State management chính: Riverpod; networking: Dio; routing: go_router.
Build and Test
- Cài dependencies:
flutter pub get - Chạy app:
flutter run - Khuyến nghị local:
bash scripts/flutter_run_with_env.sh - Phân tích lint/static:
flutter analyze - Chạy test hiện có:
flutter test
Conventions
- Cấu hình API base URL lấy từ AppConfig/env; không hardcode URL trực tiếp trong feature code.
- Token/session xử lý qua tầng storage/network ở
lib/core, tránh duplicate auth flow trong từng feature. - Khi thêm màn hình mới, cập nhật router tập trung ở
lib/app/router/app_router.dart. - Ưu tiên tái sử dụng models trong
lib/core/modelsthay vì tạo kiểu dữ liệu rời rạc.
Pitfalls
- Android emulator phải dùng
10.0.2.2để gọi localhost backend; iOS simulator/web thường dùnglocalhost. - Google Sign-In Android dễ lỗi
ApiException: 10nếu cấu hình SHA/OAuth client không khớp. - Thiếu
.env.mobilehoặc thiếuGOOGLE_SERVER_CLIENT_IDcó thể làm luồng đăng nhập thất bại. - Thiết bị thật cần LAN IP đúng mạng nội bộ; không dùng VPN IP nếu điện thoại không cùng tunnel.
Key References
- Tổng quan setup + Google Sign-In:
README.md - Lint rules:
analysis_options.yaml - App config/env:
lib/core/config/app_config.dart - API client + interceptor:
lib/core/network/api_client.dart - Router trung tâm:
lib/app/router/app_router.dart - Script chạy với env:
scripts/flutter_run_with_env.sh