diff --git a/FLUTTER_MIGRATION.md b/FLUTTER_MIGRATION.md deleted file mode 100644 index c753cf9..0000000 --- a/FLUTTER_MIGRATION.md +++ /dev/null @@ -1,129 +0,0 @@ -# Flutter Migration Guide - -## Migration from Electron to Flutter - -The rmtPocketWatcher application has been successfully migrated from Electron + React to Flutter for true cross-platform support. - -### What Changed - -**Before (Electron):** -- Electron + React + TypeScript -- Windows desktop only -- ~100MB bundle size -- WebView-based rendering - -**After (Flutter):** -- Flutter + Dart -- Windows, macOS, Linux, Android, iOS support -- ~15-20MB bundle size -- Native rendering - -### Project Structure - -``` -flutter_app/ -├── lib/ -│ ├── main.dart # App entry point -│ ├── models/ -│ │ └── price_data.dart # Data models (PriceData, LatestPrice, PriceAlert) -│ ├── providers/ -│ │ └── price_provider.dart # State management with Provider -│ ├── screens/ -│ │ └── home_screen.dart # Main dashboard screen -│ ├── services/ -│ │ ├── api_service.dart # REST API communication -│ │ ├── websocket_service.dart # WebSocket connection -│ │ └── storage_service.dart # Local storage (SharedPreferences) -│ └── widgets/ -│ ├── alerts_panel.dart # Price alerts UI -│ ├── price_chart.dart # Historical price chart -│ ├── price_stats_card.dart # Stats display cards -│ └── vendor_table.dart # Vendor comparison table -├── assets/ # Images, fonts, etc. -├── .env # Environment configuration -└── pubspec.yaml # Dependencies -``` - -### Key Features Preserved - -✅ **Real-time price tracking** - WebSocket connection to backend -✅ **Bloomberg-style dashboard** - Stats cards, charts, vendor table -✅ **Price alerts** - Client-side evaluation with notifications -✅ **Historical charts** - Interactive price history with fl_chart -✅ **Vendor comparison** - Sortable table of all sellers -✅ **Auto-reconnect** - WebSocket reconnection logic -✅ **Local storage** - Alerts and settings persistence - -### New Capabilities - -🆕 **Mobile support** - Same app runs on Android/iOS -🆕 **Better performance** - Native rendering, smaller memory footprint -🆕 **Cross-platform** - Windows, macOS, Linux from same codebase -🆕 **Material Design 3** - Modern, consistent UI across platforms -🆕 **Responsive layout** - Adapts to different screen sizes - -### Backend Compatibility - -The Flutter app is **100% compatible** with the existing TypeScript backend: -- Same REST API endpoints (`/prices/latest`, `/index/history`) -- Same WebSocket protocol (`/ws/index`) -- Same data formats (JSON) -- No backend changes required - -### Development Commands - -```bash -# Install dependencies -flutter pub get - -# Run on different platforms -flutter run -d windows # Windows desktop -flutter run -d android # Android device/emulator -flutter run -d ios # iOS device/simulator - -# Build releases -flutter build windows # Windows executable -flutter build apk # Android APK -flutter build ipa # iOS app bundle - -# Development tools -flutter doctor # Check setup -flutter devices # List available devices -flutter logs # View app logs -``` - -### Environment Configuration - -The app uses `.env` file for configuration: - -```env -API_URL=http://localhost:3000 -WS_URL=ws://localhost:3000/ws/index -``` - -### Mobile Adaptations - -The UI automatically adapts for mobile: -- **Desktop**: Multi-column layout with side-by-side panels -- **Mobile**: Single-column layout with scrollable sections -- **Responsive**: Charts and tables adjust to screen size -- **Touch-friendly**: Larger tap targets on mobile - -### Migration Benefits - -1. **Cross-platform**: One codebase for all platforms -2. **Performance**: 50-80% smaller memory usage -3. **Native feel**: Platform-specific UI elements -4. **Future-proof**: Mobile support for user growth -5. **Maintenance**: Single codebase to maintain -6. **Distribution**: App stores + direct downloads - -### Next Steps - -1. **Test the Flutter app**: `flutter run -d windows` -2. **Verify backend connection**: Ensure backend is running -3. **Test on mobile**: Run on Android/iOS devices -4. **Build releases**: Create platform-specific builds -5. **Update deployment**: Replace Electron builds with Flutter - -The migration preserves all functionality while adding mobile support and improving performance. The backend remains unchanged, ensuring a smooth transition. \ No newline at end of file diff --git a/FLUTTER_MIGRATION_COMPLETE.md b/FLUTTER_MIGRATION_COMPLETE.md deleted file mode 100644 index 5fd4d56..0000000 --- a/FLUTTER_MIGRATION_COMPLETE.md +++ /dev/null @@ -1,178 +0,0 @@ -# Flutter Migration Complete ✅ - -## Migration Summary - -Successfully migrated rmtPocketWatcher from Electron + React to Flutter for true cross-platform support. - -### ✅ What's Been Completed - -**Core Application Structure:** -- ✅ Flutter project created with proper dependencies -- ✅ Material Design 3 theme with Bloomberg-style dark colors -- ✅ Provider state management setup -- ✅ Cross-platform compatibility (Windows, macOS, Linux, Android, iOS) - -**Data Layer:** -- ✅ `PriceData`, `LatestPrice`, `HistoryData`, `PriceAlert` models -- ✅ WebSocket service with auto-reconnect logic -- ✅ REST API service for initial data fetching -- ✅ Local storage service using SharedPreferences - -**UI Components:** -- ✅ `HomeScreen` - Main dashboard layout -- ✅ `PriceStatsCard` - Connection status, lowest price, seller info -- ✅ `AlertsPanel` - Add/manage price alerts with enable/disable -- ✅ `PriceChart` - Interactive historical price chart with fl_chart -- ✅ `VendorTable` - Sortable vendor comparison table - -**Features Preserved:** -- ✅ Real-time WebSocket price updates -- ✅ Historical price charts with time range selection -- ✅ Client-side price alerts with local storage -- ✅ Vendor comparison table with sorting -- ✅ Bloomberg-style terminal interface -- ✅ Auto-reconnect WebSocket logic - -**Platform Support:** -- ✅ Windows desktop (requires Visual Studio C++ components) -- ✅ Web browser (for testing without C++ setup) -- ✅ Ready for macOS, Linux, Android, iOS - -### 🔧 Setup Requirements - -**For Windows Desktop Development:** -1. Install Visual Studio 2022 Community -2. Add "Desktop development with C++" workload -3. Include these components: - - MSVC v143 - VS 2022 C++ x64/x86 build tools (Latest) - - Windows 11 SDK (10.0.22621.0) - - CMake tools for Visual Studio - -**Quick Commands:** -```bash -cd flutter_app - -# Install dependencies -flutter pub get - -# Check setup -flutter doctor - -# Run on Windows (after VS setup) -flutter run -d windows - -# Run on web (works without C++ components) -flutter run -d chrome - -# Build for Windows -flutter build windows -``` - -### 🎯 Next Steps - -**Immediate (Ready to Use):** -1. **Fix Visual Studio Components** - Install C++ workload for Windows builds -2. **Test Backend Connection** - Ensure TypeScript backend is running on port 3000 -3. **Run Flutter App** - `flutter run -d windows` or `flutter run -d chrome` -4. **Verify Features** - Test WebSocket, alerts, charts, vendor table - -**Short Term:** -1. **Mobile Testing** - Test responsive layout on Android/iOS -2. **Performance Optimization** - Test with 50k+ chart datapoints -3. **Notifications** - Implement native notifications for alerts -4. **Window Controls** - Add minimize/close functionality for desktop - -**Long Term:** -1. **App Store Distribution** - Prepare for Google Play, App Store -2. **Auto-Updates** - Implement update mechanism -3. **Advanced Charts** - Add more chart types and interactions -4. **Settings Panel** - Theme, notification preferences - -### 📱 Mobile Support - -The Flutter app automatically supports mobile with responsive design: - -**Desktop Layout:** -- Multi-column stats cards -- Side-by-side panels -- Full-width charts and tables - -**Mobile Layout:** -- Single-column scrollable layout -- Stacked stats cards -- Touch-friendly controls -- Responsive charts - -### 🔄 Backend Compatibility - -**100% Compatible** with existing TypeScript backend: -- Same REST endpoints: `/prices/latest`, `/index/history` -- Same WebSocket protocol: `/ws/index` -- Same JSON data formats -- No backend changes required - -### 📊 Performance Benefits - -**Flutter vs Electron:** -- **Bundle Size**: ~15MB vs ~100MB (85% smaller) -- **Memory Usage**: ~50MB vs ~150MB (67% less) -- **Startup Time**: ~2s vs ~5s (60% faster) -- **Native Performance**: 60fps rendering vs WebView overhead - -### 🚀 Deployment Options - -**Desktop:** -- Windows: `.exe` installer -- macOS: `.dmg` or `.pkg` -- Linux: `.deb`, `.rpm`, or AppImage - -**Mobile:** -- Android: `.apk` or Google Play Store -- iOS: App Store (requires Apple Developer account) - -**Web:** -- Progressive Web App (PWA) -- Direct hosting on any web server - -### 🛠️ Development Workflow - -```bash -# Development -flutter run -d windows # Hot reload development -flutter run -d android # Test mobile layout -flutter run -d chrome # Web testing - -# Building -flutter build windows --release # Production Windows build -flutter build apk --release # Production Android build -flutter build web --release # Production web build - -# Testing -flutter test # Unit tests -flutter drive --target=test_driver/app.dart # Integration tests -``` - -### 📋 Migration Checklist - -- [x] Flutter project structure created -- [x] All Electron features migrated -- [x] Cross-platform compatibility added -- [x] Backend integration preserved -- [x] UI/UX maintained (Bloomberg style) -- [x] State management implemented -- [x] Local storage working -- [x] WebSocket auto-reconnect -- [x] Responsive design for mobile -- [x] Documentation completed - -### 🎉 Success Metrics - -The Flutter migration delivers: -- **5 platforms** from 1 codebase (vs 1 platform) -- **85% smaller** bundle size -- **67% less** memory usage -- **Mobile support** for future growth -- **Native performance** across all platforms -- **Maintained feature parity** with Electron version - -The rmtPocketWatcher Flutter app is ready for production use and provides a solid foundation for cross-platform expansion! \ No newline at end of file diff --git a/SETUP.md b/SETUP.md deleted file mode 100644 index 74fc646..0000000 --- a/SETUP.md +++ /dev/null @@ -1,171 +0,0 @@ -# rmtPocketWatcher Setup Guide - -## What's Been Created - -✅ **Backend Scraper Service** -- Playwright-based scrapers for Eldorado and PlayerAuctions -- Automatic retry logic and error handling -- Scheduled scraping every 5 minutes -- Tracks all seller listings with platform, price, and delivery time - -✅ **Database Layer** -- PostgreSQL with Prisma ORM -- Three tables: VendorPrice, PriceIndex, ScrapeLog -- Stores all historical listings for trend analysis -- Indexed for fast queries - -✅ **API Layer** -- Fastify REST API with 6 endpoints -- WebSocket for real-time updates -- Filter by seller, platform, date range -- Historical price data - -✅ **Docker Setup** -- Docker Compose orchestration -- PostgreSQL container with health checks -- Backend container with auto-migration -- Volume persistence for database - -## Current Status - -The Docker Compose stack is building. This will: -1. Pull PostgreSQL 16 Alpine image -2. Build the backend Node.js container -3. Install Playwright and dependencies -4. Generate Prisma client -5. Start both services - -## Once Build Completes - -### Check Status -```bash -# View logs -docker-compose logs -f backend - -# Check if services are running -docker ps -``` - -### Test the API -```bash -# Health check -curl http://localhost:3000/health - -# Get latest prices (after first scrape) -curl http://localhost:3000/api/prices/latest - -# Get lowest price -curl http://localhost:3000/api/prices/lowest - -# Get price history -curl "http://localhost:3000/api/index/history?range=7d" -``` - -### Monitor Scraping -The backend will automatically: -- Scrape Eldorado and PlayerAuctions every 5 minutes -- Save all listings to the database -- Calculate and store the lowest price -- Log all scrape attempts - -Check logs to see scraping activity: -```bash -docker-compose logs -f backend | grep "scraping" -``` - -## Database Access - -### Using Prisma Studio -```bash -cd backend -npm run db:studio -``` - -### Using psql -```bash -docker exec -it rmtpw-postgres psql -U rmtpw -d rmtpocketwatcher -``` - -## Stopping and Restarting - -```bash -# Stop services -docker-compose down - -# Start services -docker-compose up -d - -# Rebuild after code changes -docker-compose up --build -d - -# View logs -docker-compose logs -f - -# Remove everything including data -docker-compose down -v -``` - -## Environment Variables - -Edit `.env` or `docker-compose.yml` to configure: - -- `SCRAPE_INTERVAL_MINUTES` - How often to scrape (default: 5) -- `SCRAPER_HEADLESS` - Run browser in headless mode (default: true) -- `PORT` - API server port (default: 3000) -- `DATABASE_URL` - PostgreSQL connection string - -## Next Steps - -1. **Wait for build to complete** (~2-5 minutes) -2. **Verify services are running**: `docker ps` -3. **Check first scrape**: `docker-compose logs -f backend` -4. **Test API endpoints**: See examples above -5. **Build Electron frontend** (coming next) - -## Troubleshooting - -### Backend won't start -```bash -# Check logs -docker-compose logs backend - -# Restart backend -docker-compose restart backend -``` - -### Database connection issues -```bash -# Check postgres is healthy -docker-compose ps - -# Restart postgres -docker-compose restart postgres -``` - -### Scraper errors -```bash -# View detailed logs -docker-compose logs -f backend | grep -A 5 "error" - -# Check scrape log in database -docker exec -it rmtpw-postgres psql -U rmtpw -d rmtpocketwatcher -c "SELECT * FROM scrape_log ORDER BY timestamp DESC LIMIT 10;" -``` - -## File Structure - -``` -rmtPocketWatcher/ -├── docker-compose.yml # Docker orchestration -├── .env # Environment variables -├── backend/ -│ ├── Dockerfile # Backend container definition -│ ├── prisma/ -│ │ └── schema.prisma # Database schema -│ ├── src/ -│ │ ├── scrapers/ # Scraping logic -│ │ ├── api/ # REST + WebSocket API -│ │ ├── database/ # Prisma client & repository -│ │ └── index.ts # Main server -│ └── package.json -└── README.md -``` diff --git a/flutter_app/android/app/src/main/res/drawable-hdpi/ic_launcher_foreground.png b/flutter_app/android/app/src/main/res/drawable-hdpi/ic_launcher_foreground.png new file mode 100644 index 0000000..c9dc7b9 Binary files /dev/null and b/flutter_app/android/app/src/main/res/drawable-hdpi/ic_launcher_foreground.png differ diff --git a/flutter_app/android/app/src/main/res/drawable-mdpi/ic_launcher_foreground.png b/flutter_app/android/app/src/main/res/drawable-mdpi/ic_launcher_foreground.png new file mode 100644 index 0000000..4f4787b Binary files /dev/null and b/flutter_app/android/app/src/main/res/drawable-mdpi/ic_launcher_foreground.png differ diff --git a/flutter_app/android/app/src/main/res/drawable-xhdpi/ic_launcher_foreground.png b/flutter_app/android/app/src/main/res/drawable-xhdpi/ic_launcher_foreground.png new file mode 100644 index 0000000..443fc90 Binary files /dev/null and b/flutter_app/android/app/src/main/res/drawable-xhdpi/ic_launcher_foreground.png differ diff --git a/flutter_app/android/app/src/main/res/drawable-xxhdpi/ic_launcher_foreground.png b/flutter_app/android/app/src/main/res/drawable-xxhdpi/ic_launcher_foreground.png new file mode 100644 index 0000000..b3a3256 Binary files /dev/null and b/flutter_app/android/app/src/main/res/drawable-xxhdpi/ic_launcher_foreground.png differ diff --git a/flutter_app/android/app/src/main/res/drawable-xxxhdpi/ic_launcher_foreground.png b/flutter_app/android/app/src/main/res/drawable-xxxhdpi/ic_launcher_foreground.png new file mode 100644 index 0000000..22aeb10 Binary files /dev/null and b/flutter_app/android/app/src/main/res/drawable-xxxhdpi/ic_launcher_foreground.png differ diff --git a/flutter_app/android/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml b/flutter_app/android/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml new file mode 100644 index 0000000..c79c58a --- /dev/null +++ b/flutter_app/android/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml @@ -0,0 +1,9 @@ + + + + + + + diff --git a/flutter_app/android/app/src/main/res/mipmap-hdpi/ic_launcher.png b/flutter_app/android/app/src/main/res/mipmap-hdpi/ic_launcher.png index db77bb4..084954c 100644 Binary files a/flutter_app/android/app/src/main/res/mipmap-hdpi/ic_launcher.png and b/flutter_app/android/app/src/main/res/mipmap-hdpi/ic_launcher.png differ diff --git a/flutter_app/android/app/src/main/res/mipmap-mdpi/ic_launcher.png b/flutter_app/android/app/src/main/res/mipmap-mdpi/ic_launcher.png index 17987b7..b0da8d4 100644 Binary files a/flutter_app/android/app/src/main/res/mipmap-mdpi/ic_launcher.png and b/flutter_app/android/app/src/main/res/mipmap-mdpi/ic_launcher.png differ diff --git a/flutter_app/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png b/flutter_app/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png index 09d4391..d45ef6a 100644 Binary files a/flutter_app/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png and b/flutter_app/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png differ diff --git a/flutter_app/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png b/flutter_app/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png index d5f1c8d..3df2ba2 100644 Binary files a/flutter_app/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png and b/flutter_app/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png differ diff --git a/flutter_app/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png b/flutter_app/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png index 4d6372e..6300fe3 100644 Binary files a/flutter_app/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png and b/flutter_app/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png differ diff --git a/flutter_app/android/app/src/main/res/values/colors.xml b/flutter_app/android/app/src/main/res/values/colors.xml new file mode 100644 index 0000000..19d9c82 --- /dev/null +++ b/flutter_app/android/app/src/main/res/values/colors.xml @@ -0,0 +1,4 @@ + + + #1a1a2e + \ No newline at end of file diff --git a/flutter_app/ios/Runner.xcodeproj/project.pbxproj b/flutter_app/ios/Runner.xcodeproj/project.pbxproj index 51ee13f..ec3b2a0 100644 --- a/flutter_app/ios/Runner.xcodeproj/project.pbxproj +++ b/flutter_app/ios/Runner.xcodeproj/project.pbxproj @@ -427,7 +427,7 @@ isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; - ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; + ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = AppIcon; CLANG_ANALYZER_NONNULL = YES; CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; CLANG_CXX_LIBRARY = "libc++"; @@ -484,7 +484,7 @@ isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; - ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; + ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = AppIcon; CLANG_ANALYZER_NONNULL = YES; CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; CLANG_CXX_LIBRARY = "libc++"; diff --git a/flutter_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json b/flutter_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json index d36b1fa..d0d98aa 100644 --- a/flutter_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json +++ b/flutter_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json @@ -1,122 +1 @@ -{ - "images" : [ - { - "size" : "20x20", - "idiom" : "iphone", - "filename" : "Icon-App-20x20@2x.png", - "scale" : "2x" - }, - { - "size" : "20x20", - "idiom" : "iphone", - "filename" : "Icon-App-20x20@3x.png", - "scale" : "3x" - }, - { - "size" : "29x29", - "idiom" : "iphone", - "filename" : "Icon-App-29x29@1x.png", - "scale" : "1x" - }, - { - "size" : "29x29", - "idiom" : "iphone", - "filename" : "Icon-App-29x29@2x.png", - "scale" : "2x" - }, - { - "size" : "29x29", - "idiom" : "iphone", - "filename" : "Icon-App-29x29@3x.png", - "scale" : "3x" - }, - { - "size" : "40x40", - "idiom" : "iphone", - "filename" : "Icon-App-40x40@2x.png", - "scale" : "2x" - }, - { - "size" : "40x40", - "idiom" : "iphone", - "filename" : "Icon-App-40x40@3x.png", - "scale" : "3x" - }, - { - "size" : "60x60", - "idiom" : "iphone", - "filename" : "Icon-App-60x60@2x.png", - "scale" : "2x" - }, - { - "size" : "60x60", - "idiom" : "iphone", - "filename" : "Icon-App-60x60@3x.png", - "scale" : "3x" - }, - { - "size" : "20x20", - "idiom" : "ipad", - "filename" : "Icon-App-20x20@1x.png", - "scale" : "1x" - }, - { - "size" : "20x20", - "idiom" : "ipad", - "filename" : "Icon-App-20x20@2x.png", - "scale" : "2x" - }, - { - "size" : "29x29", - "idiom" : "ipad", - "filename" : "Icon-App-29x29@1x.png", - "scale" : "1x" - }, - { - "size" : "29x29", - "idiom" : "ipad", - "filename" : "Icon-App-29x29@2x.png", - "scale" : "2x" - }, - { - "size" : "40x40", - "idiom" : "ipad", - "filename" : "Icon-App-40x40@1x.png", - "scale" : "1x" - }, - { - "size" : "40x40", - "idiom" : "ipad", - "filename" : "Icon-App-40x40@2x.png", - "scale" : "2x" - }, - { - "size" : "76x76", - "idiom" : "ipad", - "filename" : "Icon-App-76x76@1x.png", - "scale" : "1x" - }, - { - "size" : "76x76", - "idiom" : "ipad", - "filename" : "Icon-App-76x76@2x.png", - "scale" : "2x" - }, - { - "size" : "83.5x83.5", - "idiom" : "ipad", - "filename" : "Icon-App-83.5x83.5@2x.png", - "scale" : "2x" - }, - { - "size" : "1024x1024", - "idiom" : "ios-marketing", - "filename" : "Icon-App-1024x1024@1x.png", - "scale" : "1x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} +{"images":[{"size":"20x20","idiom":"iphone","filename":"Icon-App-20x20@2x.png","scale":"2x"},{"size":"20x20","idiom":"iphone","filename":"Icon-App-20x20@3x.png","scale":"3x"},{"size":"29x29","idiom":"iphone","filename":"Icon-App-29x29@1x.png","scale":"1x"},{"size":"29x29","idiom":"iphone","filename":"Icon-App-29x29@2x.png","scale":"2x"},{"size":"29x29","idiom":"iphone","filename":"Icon-App-29x29@3x.png","scale":"3x"},{"size":"40x40","idiom":"iphone","filename":"Icon-App-40x40@2x.png","scale":"2x"},{"size":"40x40","idiom":"iphone","filename":"Icon-App-40x40@3x.png","scale":"3x"},{"size":"57x57","idiom":"iphone","filename":"Icon-App-57x57@1x.png","scale":"1x"},{"size":"57x57","idiom":"iphone","filename":"Icon-App-57x57@2x.png","scale":"2x"},{"size":"60x60","idiom":"iphone","filename":"Icon-App-60x60@2x.png","scale":"2x"},{"size":"60x60","idiom":"iphone","filename":"Icon-App-60x60@3x.png","scale":"3x"},{"size":"20x20","idiom":"ipad","filename":"Icon-App-20x20@1x.png","scale":"1x"},{"size":"20x20","idiom":"ipad","filename":"Icon-App-20x20@2x.png","scale":"2x"},{"size":"29x29","idiom":"ipad","filename":"Icon-App-29x29@1x.png","scale":"1x"},{"size":"29x29","idiom":"ipad","filename":"Icon-App-29x29@2x.png","scale":"2x"},{"size":"40x40","idiom":"ipad","filename":"Icon-App-40x40@1x.png","scale":"1x"},{"size":"40x40","idiom":"ipad","filename":"Icon-App-40x40@2x.png","scale":"2x"},{"size":"50x50","idiom":"ipad","filename":"Icon-App-50x50@1x.png","scale":"1x"},{"size":"50x50","idiom":"ipad","filename":"Icon-App-50x50@2x.png","scale":"2x"},{"size":"72x72","idiom":"ipad","filename":"Icon-App-72x72@1x.png","scale":"1x"},{"size":"72x72","idiom":"ipad","filename":"Icon-App-72x72@2x.png","scale":"2x"},{"size":"76x76","idiom":"ipad","filename":"Icon-App-76x76@1x.png","scale":"1x"},{"size":"76x76","idiom":"ipad","filename":"Icon-App-76x76@2x.png","scale":"2x"},{"size":"83.5x83.5","idiom":"ipad","filename":"Icon-App-83.5x83.5@2x.png","scale":"2x"},{"size":"1024x1024","idiom":"ios-marketing","filename":"Icon-App-1024x1024@1x.png","scale":"1x"}],"info":{"version":1,"author":"xcode"}} \ No newline at end of file diff --git a/flutter_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png b/flutter_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png index dc9ada4..703dff4 100644 Binary files a/flutter_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png and b/flutter_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png differ diff --git a/flutter_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png b/flutter_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png index 7353c41..93a6733 100644 Binary files a/flutter_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png and b/flutter_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png differ diff --git a/flutter_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png b/flutter_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png index 797d452..3daae2a 100644 Binary files a/flutter_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png and b/flutter_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png differ diff --git a/flutter_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png b/flutter_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png index 6ed2d93..65f2a9a 100644 Binary files a/flutter_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png and b/flutter_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png differ diff --git a/flutter_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png b/flutter_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png index 4cd7b00..fb1913e 100644 Binary files a/flutter_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png and b/flutter_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png differ diff --git a/flutter_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png b/flutter_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png index fe73094..26175f9 100644 Binary files a/flutter_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png and b/flutter_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png differ diff --git a/flutter_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png b/flutter_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png index 321773c..f976fbc 100644 Binary files a/flutter_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png and b/flutter_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png differ diff --git a/flutter_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png b/flutter_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png index 797d452..3daae2a 100644 Binary files a/flutter_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png and b/flutter_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png differ diff --git a/flutter_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png b/flutter_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png index 502f463..a1a4c5b 100644 Binary files a/flutter_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png and b/flutter_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png differ diff --git a/flutter_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png b/flutter_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png index 0ec3034..4800d20 100644 Binary files a/flutter_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png and b/flutter_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png differ diff --git a/flutter_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-50x50@1x.png b/flutter_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-50x50@1x.png new file mode 100644 index 0000000..4555c22 Binary files /dev/null and b/flutter_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-50x50@1x.png differ diff --git a/flutter_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-50x50@2x.png b/flutter_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-50x50@2x.png new file mode 100644 index 0000000..1438d6e Binary files /dev/null and b/flutter_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-50x50@2x.png differ diff --git a/flutter_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-57x57@1x.png b/flutter_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-57x57@1x.png new file mode 100644 index 0000000..834b274 Binary files /dev/null and b/flutter_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-57x57@1x.png differ diff --git a/flutter_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-57x57@2x.png b/flutter_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-57x57@2x.png new file mode 100644 index 0000000..1e31a6c Binary files /dev/null and b/flutter_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-57x57@2x.png differ diff --git a/flutter_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png b/flutter_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png index 0ec3034..4800d20 100644 Binary files a/flutter_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png and b/flutter_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png differ diff --git a/flutter_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png b/flutter_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png index e9f5fea..8668be9 100644 Binary files a/flutter_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png and b/flutter_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png differ diff --git a/flutter_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-72x72@1x.png b/flutter_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-72x72@1x.png new file mode 100644 index 0000000..084954c Binary files /dev/null and b/flutter_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-72x72@1x.png differ diff --git a/flutter_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-72x72@2x.png b/flutter_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-72x72@2x.png new file mode 100644 index 0000000..3df2ba2 Binary files /dev/null and b/flutter_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-72x72@2x.png differ diff --git a/flutter_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png b/flutter_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png index 84ac32a..a842f8e 100644 Binary files a/flutter_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png and b/flutter_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png differ diff --git a/flutter_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png b/flutter_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png index 8953cba..6113f41 100644 Binary files a/flutter_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png and b/flutter_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png differ diff --git a/flutter_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png b/flutter_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png index 0467bf1..34b8b3c 100644 Binary files a/flutter_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png and b/flutter_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png differ diff --git a/flutter_app/pubspec.lock b/flutter_app/pubspec.lock index c84da49..12e4fcc 100644 --- a/flutter_app/pubspec.lock +++ b/flutter_app/pubspec.lock @@ -41,6 +41,14 @@ packages: url: "https://pub.dev" source: hosted version: "1.4.0" + checked_yaml: + dependency: transitive + description: + name: checked_yaml + sha256: "959525d3162f249993882720d52b7e0c833978df229be20702b33d48d91de70f" + url: "https://pub.dev" + source: hosted + version: "2.0.4" cli_util: dependency: transitive description: @@ -150,6 +158,14 @@ packages: url: "https://pub.dev" source: hosted version: "5.2.1" + flutter_launcher_icons: + dependency: "direct dev" + description: + name: flutter_launcher_icons + sha256: "10f13781741a2e3972126fae08393d3c4e01fa4cd7473326b94b72cf594195e7" + url: "https://pub.dev" + source: hosted + version: "0.14.4" flutter_lints: dependency: "direct dev" description: @@ -232,6 +248,14 @@ packages: url: "https://pub.dev" source: hosted version: "0.19.0" + json_annotation: + dependency: transitive + description: + name: json_annotation + sha256: "1ce844379ca14835a50d2f019a3099f419082cfdd231cd86a142af94dd5c6bb1" + url: "https://pub.dev" + source: hosted + version: "4.9.0" leak_tracker: dependency: transitive description: diff --git a/flutter_app/pubspec.yaml b/flutter_app/pubspec.yaml index 94c0fbe..ca0e8d2 100644 --- a/flutter_app/pubspec.yaml +++ b/flutter_app/pubspec.yaml @@ -1,5 +1,5 @@ name: rmtpocketwatcher -description: "A new Flutter project." +description: "Track USD vs aUEC" # The following line prevents the package from being accidentally published to # pub.dev using `flutter pub publish`. This is preferred for private packages. publish_to: 'none' # Remove this line if you wish to publish to pub.dev @@ -16,7 +16,7 @@ publish_to: 'none' # Remove this line if you wish to publish to pub.dev # https://developer.apple.com/library/archive/documentation/General/Reference/InfoPlistKeyReference/Articles/CoreFoundationKeys.html # In Windows, build-name is used as the major, minor, and patch parts # of the product and file versions while build-number is used as the build suffix. -version: 1.0.1+2 +version: 1.0.0 environment: sdk: '>=3.5.0 <4.0.0' @@ -89,6 +89,17 @@ dev_dependencies: # Windows installer creation msix: ^3.16.8 + + # App icon generation + flutter_launcher_icons: ^0.14.3 + +# Flutter Launcher Icons configuration +flutter_launcher_icons: + android: true + ios: true + image_path: "assets/logo.png" + adaptive_icon_background: "#1a1a2e" + adaptive_icon_foreground: "assets/logo.png" # For information on the generic Dart part of this file, see the # following page: https://dart.dev/tools/pub/pubspec