A beautiful, feature-rich Flutter wallpaper application with user authentication, collections management, and seamless wallpaper application capabilities.
- Project Overview
- Features
- Architecture
- Technology Stack
- Project Structure
- Getting Started
- Installation
- Usage
- Code Organization
- Contributing
BloomWalls is a modern wallpaper discovery and management application built with Flutter. It provides users with an extensive collection of high-quality wallpapers, personalized collections (liked/saved), and the ability to set wallpapers directly on their device. The app features a beautiful Material Design 3 UI with dark mode support, smooth animations, and a seamless user experience.
- π¨ Beautiful Material Design 3 interface
- π Dark and light theme support
- π Secure user authentication (Google & Email)
- πΎ Cloud-based user data persistence
- π± Cross-platform support (iOS, Android, Web, macOS, Windows, Linux)
- β‘ Optimized image caching and loading
- π― Staggered grid layout for wallpaper display
- Google Sign-In integration
- Email/Password registration and login
- Firebase-backed secure authentication
- Session persistence across app restarts
- Browse extensive wallpaper collections
- Category-based browsing
- Curated feed/discovery screen
- Beautiful staggered grid layout
- Infinite scrolling capabilities
- Like/Heart wallpapers
- Save wallpapers to collections
- View liked and saved wallpapers in profile
- Share wallpapers with others
- Wallpaper details and metadata display
- Set wallpapers to home screen
- Set wallpapers to lock screen
- Set wallpapers to both home and lock screen
- One-click application process
- Automatic image optimization and caching
- View user information
- Browse liked wallpapers
- Browse saved wallpapers
- Sign out functionality
- Protected content (requires authentication)
- Smooth page transitions
- Floating bottom navigation bar
- Loading skeletons using shimmer effect
- Cached image loading
- Responsive design
- Material Design 3 components
BloomWalls follows a layered architecture pattern with clear separation of concerns:
βββββββββββββββββββββββββββββββββββββββββββββββ
β Presentation Layer β
β (Screens & Widgets) β
βββββββββββββββββββββββββββββββββββββββββββββββ
β
βββββββββββββββββββββββββββββββββββββββββββββββ
β State Management Layer β
β (Provider Pattern) β
βββββββββββββββββββββββββββββββββββββββββββββββ
β
βββββββββββββββββββββββββββββββββββββββββββββββ
β Service Layer β
β (API, Auth, Database Services) β
βββββββββββββββββββββββββββββββββββββββββββββββ
β
βββββββββββββββββββββββββββββββββββββββββββββββ
β Data Layer β
β (Firebase, External APIs) β
βββββββββββββββββββββββββββββββββββββββββββββββ
- Provider Pattern: Centralized state management using the Provider package
- Service Layer Pattern: Business logic encapsulated in service classes
- Model/View/Provider (MVP): Clean separation between UI and business logic
- Singleton Pattern: Services instantiated as singletons for consistency
- Factory Pattern: JSON serialization/deserialization using factory constructors
- Framework: Flutter (latest stable)
- Language: Dart 3.11.3+
- Target SDK: iOS, Android, Web, macOS, Windows, Linux
- Provider: ^6.1.5+1 - For reactive state management and dependency injection
- Firebase Core: ^4.9.0 - Firebase initialization
- Firebase Auth: ^6.5.1 - User authentication
- Google Sign-In: ^6.2.1 - Google OAuth integration
- Cloud Firestore: ^6.4.1 - Cloud database for user collections
- http: ^1.6.0 - HTTP client for REST API calls
- Wallpaper API: External API from
https://walleee.vercel.app/api
- Google Fonts: ^8.1.0 - Custom font typography
- Font Awesome Flutter: ^11.0.0 - Icon library
- Flutter Staggered Grid View: ^0.7.0 - Advanced grid layouts
- Shimmer: ^3.0.0 - Loading state animations
- Cached Network Image: ^3.4.1 - Optimized image caching and loading
- Async Wallpaper: ^3.1.0 - Set wallpapers on device
- Share Plus: ^10.0.0 - Share wallpapers with other apps
- Flutter Lints: ^6.0.0 - Code quality and style checking
lib/
βββ main.dart # Application entry point
βββ theme.dart # Custom theme configuration (Material Design 3)
β
βββ models/
β βββ wallpaper.dart # Wallpaper data model
β
βββ services/
β βββ auth_service.dart # Firebase authentication logic
β βββ api_service.dart # External wallpaper API integration
β βββ firestore_service.dart # Cloud Firestore database operations
β
βββ providers/
β βββ wallpaper_provider.dart # Provider for wallpaper state management
β
βββ screens/
β βββ auth_screen.dart # Login/Registration screen
β βββ email_auth_screen.dart # Email-based authentication
β βββ main_screen.dart # Main navigation container
β βββ home_screen.dart # Featured wallpapers home
β βββ categories_screen.dart # Wallpaper categories browsing
β βββ bloomwalls_feed_screen.dart # Discovery/Feed screen
β βββ profile_screen.dart # User profile and collections
β βββ wallpaper_preview_screen.dart # Wallpaper detail/preview view
β βββ saved_screen.dart # Saved wallpapers collection
β βββ category_wallpapers_screen.dart # Category-specific wallpapers
β
βββ widgets/
β βββ wallpaper_grid.dart # Reusable wallpaper grid component
β βββ wallpaper_interactions.dart # Like/Save/Share interactions
β βββ skeleton_loader.dart # Shimmer loading skeleton
β
test/
βββ [Test files]
android/ # Android-specific configuration
ios/ # iOS-specific configuration
web/ # Web build support
macos/ # macOS build support
windows/ # Windows build support
linux/ # Linux build support
pubspec.yaml # Project dependencies and configuration
analysis_options.yaml # Dart linting rules
- Flutter SDK (latest stable version)
- Dart 3.11.3 or higher
- Android Studio / Xcode (for mobile development)
- Firebase project setup
- Git
- Minimum iOS: 11.0
- Minimum Android: API level 21
- Sufficient storage for wallpaper caching (image cache set to 300MB max)
git clone https://github.com/Kolass2004/BloomWalls.git
cd BloomWallsflutter pub get- Create a Firebase project at Firebase Console
- Enable Authentication methods:
- Email/Password
- Google Sign-In
- Create a Firestore database
- Download and configure Firebase config files:
- For Android:
google-services.jsonβandroid/app/ - For iOS:
GoogleService-Info.plistβios/Runner/
- For Android:
# Run on connected device/emulator
flutter run
# Run on specific device
flutter run -d <device-id>
# Run with specific flavor
flutter run --flavor production
# Build APK (Android)
flutter build apk
# Build AAB (Android Play Store)
flutter build appbundle
# Build IPA (iOS)
flutter build ios
# Build for web
flutter build web- Authentication: Start by signing in with Google or creating an account with email/password
- Browse: Explore wallpapers in Home, Categories, or Feed sections
- Preview: Tap any wallpaper to see full preview and details
- Apply: Choose to set as home, lock, or both screens
- Manage: Like/Save wallpapers and access them from your Profile
- Home (House icon): Featured and trending wallpapers
- Categories (Grid icon): Browse wallpapers by category
- Feed (Flame icon): Discover curated wallpaper feed
- Profile (User icon): View liked/saved wallpapers and account settings
- Like: Heart icon to like wallpapers (stored in Firestore)
- Save: Bookmark icon to save wallpapers for later
- Share: Share button to send wallpapers to other apps
- Apply: One-tap application to device screens
Wallpaper.dart: Represents a single wallpaper with metadata- Properties: id, publicId, url, thumbnailUrl, width, height, format, tags, title
- Methods: JSON serialization/deserialization, grid thumbnail URL optimization
-
AuthService.dart: Firebase authentication management
- Methods: signInWithGoogle(), signInWithEmailAndPassword(), registerWithEmailAndPassword(), signOut()
- Extends ChangeNotifier for reactive updates
-
ApiService.dart: External wallpaper API communication
- Fetches wallpapers from
https://walleee.vercel.app/api/wallpapers - Handles JSON parsing and error handling
- Fetches wallpapers from
-
FirestoreService.dart: Cloud database operations
- Like wallpapers: likeWallpaper(), unlikeWallpaper(), getLikedWallpapers(), isLiked()
- Save wallpapers: saveWallpaper(), unsaveWallpaper(), getSavedWallpapers(), isSaved()
- User document management
- WallpaperProvider.dart: State management for wallpaper data
- Properties: wallpapers list, loading state, error messages
- Methods: fetchWallpapers() with shuffling
- All screens follow a stateful/stateless widget pattern
- Utilize Provider for state access
- Implement responsive layouts
- Support both light and dark themes
- WallpaperGrid.dart: Reusable staggered grid component
- WallpaperInteractions.dart: Like, save, share interactions
- SkeletonLoader.dart: Shimmer loading placeholders
- Custom Material Design 3 theme
- Colors: Primary (reddish-brown), Secondary (light blue), Tertiary (alice blue)
- Typography: Google Fonts (Plus Jakarta Sans for headers, Manrope for body)
- Both light and dark theme definitions
- Image cache size: 300MB (configured in main.dart)
- Maximum cached images: 500
- Uses CachedNetworkImage for efficient loading
- Grid thumbnails optimized to 400px width
- Full resolution images available on demand
- Staggered grid layout reduces rendering overhead
- IndexedStack preserves screen state during navigation
- Image cache presets prevent repeated network calls
- Shimmer loaders provide perceived performance improvement
- Firebase connection pooling for Firestore operations
- Authentication: Firebase handles secure authentication
- Data Privacy: Firestore security rules should be configured (not shown in code)
- API Keys: Firebase config files excluded from version control (.gitignore)
- Image URLs: Cloudinary-hosted images with automatic optimization
- User Data: Stored in user-specific Firestore collections
Contributions are welcome! Please follow these guidelines:
- Fork the repository
- Create a feature branch (
git checkout -b feature/AmazingFeature) - Commit changes (
git commit -m 'Add AmazingFeature') - Push to branch (
git push origin feature/AmazingFeature) - Open a Pull Request
- Follow Dart conventions
- Use meaningful variable names
- Add comments for complex logic
- Keep methods focused and single-responsibility
- Use const constructors where possible
flutter testThis project is private. All rights reserved.
For issues, questions, or suggestions, please open an issue on GitHub or contact the project maintainers.
Last Updated: May 18, 2026
Version: 1.0.0
Flutter Version: Latest Stable
Dart Version: 3.11.3+