Problem:
- Gray screens on movie details and downloads
- No error messages shown to debug issues
- API response structure not fully validated
Solution:
1. Enhanced Movie.fromJson() parsing:
- Added detailed logging for each parsing step
- Safe genre parsing: handles [{id: 18, name: Drama}]
- Safe date parsing with null checks
- Safe runtime parsing for both movies and TV shows
- Better media type detection (movie vs tv)
- Comprehensive error logging with stack traces
2. Added detailed API logging:
- getMovieById(): Log request URL, response status, body preview
- getTvShowById(): Log request URL, response status, body preview
- Log API response structure (keys, types, unwrapped data)
- Makes debugging much easier
3. Based on backend API structure:
Backend returns: {"success": true, "data": {...}}
Movie fields from TMDB:
- id (number)
- title or name (string)
- genres: [{"id": int, "name": string}]
- release_date or first_air_date (string)
- vote_average (number)
- runtime or episode_run_time (number/array)
- number_of_seasons, number_of_episodes (int, optional)
Logging examples:
- 'Parsing Movie from JSON: [id, title, genres, ...]'
- 'Parsed genres: [Drama, Thriller, Mystery]'
- 'Successfully parsed movie: Fight Club'
- 'Response status: 200'
- 'Movie data keys: [id, title, overview, ...]'
Changes:
- lib/data/models/movie.dart: Complete rewrite with safe parsing
- lib/data/api/neomovies_api_client.dart: Add detailed logging
Result:
✅ Safer JSON parsing with null checks
✅ Detailed error logging for debugging
✅ Handles all edge cases from API
✅ Easy to debug gray screen issues via logs
Next steps:
Test the app and check Flutter debug console for:
- API request URLs
- Response bodies
- Parsing errors (if any)
- Successful movie loading messages
1. Fix Downloads screen gray screen issue:
- Add DownloadsProvider to main.dart providers list
- Remove @RoutePage() decorator from DownloadsScreen
- Downloads screen now displays torrent list correctly
2. Fix movie detail screen gray screen issue:
- Improve Movie.fromJson() with better error handling
- Safe parsing of genres field (handles both Map and String formats)
- Add fallback 'Untitled' for movies without title
- Add detailed logging in MovieDetailProvider
- Better error messages with stack traces
3. Add automatic version update from CI/CD tags:
- GitLab CI: Update pubspec.yaml version from CI_COMMIT_TAG before build
- GitHub Actions: Update pubspec.yaml version from GITHUB_REF before build
- Version format: tag v0.0.18 becomes version 0.0.18+18
- Applies to all build jobs (arm64, arm32, x64)
How versioning works:
- When you create tag v0.0.18, CI automatically updates pubspec.yaml
- Build uses version 0.0.18+18 (version+buildNumber)
- APK shows correct version in About screen and Google Play
- No manual pubspec.yaml updates needed
Example:
- Create tag: git tag v0.0.18 && git push origin v0.0.18
- CI reads tag, extracts '0.0.18'
- Updates: version: 0.0.18+18 in pubspec.yaml
- Builds APK with this version
- Release created with proper version number
Changes:
- lib/main.dart: Add DownloadsProvider
- lib/presentation/screens/downloads/downloads_screen.dart: Remove @RoutePage
- lib/data/models/movie.dart: Safe JSON parsing with error handling
- lib/presentation/providers/movie_detail_provider.dart: Add detailed logging
- .gitlab-ci.yml: Add version update script in all build jobs
- .github/workflows/release.yml: Add version update step in all build jobs
Result:
✅ Downloads screen displays properly
✅ Movie details screen loads correctly
✅ Automatic versioning from tags (0.0.18, 0.0.19, etc.)
✅ No more gray screens!
- Fix authorization issues by improving error handling for unverified accounts
- Enable auto-login after successful email verification
- Fix poster fetching to use NeoMovies API instead of TMDB directly
- Add missing video player models (VideoQuality, AudioTrack, Subtitle, PlayerSettings)
- Add video_player and chewie dependencies for native video playback
- Update Movie model to use API images endpoint for better CDN control
Resolves authentication and image loading issues.