Update app icons
@@ -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.
|
||||
@@ -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!
|
||||
171
SETUP.md
@@ -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
|
||||
```
|
||||
|
After Width: | Height: | Size: 5.8 KiB |
|
After Width: | Height: | Size: 4.0 KiB |
|
After Width: | Height: | Size: 6.7 KiB |
|
After Width: | Height: | Size: 18 KiB |
|
After Width: | Height: | Size: 27 KiB |
@@ -0,0 +1,9 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<background android:drawable="@color/ic_launcher_background"/>
|
||||
<foreground>
|
||||
<inset
|
||||
android:drawable="@drawable/ic_launcher_foreground"
|
||||
android:inset="16%" />
|
||||
</foreground>
|
||||
</adaptive-icon>
|
||||
|
Before Width: | Height: | Size: 544 B After Width: | Height: | Size: 2.8 KiB |
|
Before Width: | Height: | Size: 442 B After Width: | Height: | Size: 1.9 KiB |
|
Before Width: | Height: | Size: 721 B After Width: | Height: | Size: 3.6 KiB |
|
Before Width: | Height: | Size: 1.0 KiB After Width: | Height: | Size: 5.1 KiB |
|
Before Width: | Height: | Size: 1.4 KiB After Width: | Height: | Size: 6.3 KiB |
4
flutter_app/android/app/src/main/res/values/colors.xml
Normal file
@@ -0,0 +1,4 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<color name="ic_launcher_background">#1a1a2e</color>
|
||||
</resources>
|
||||
@@ -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++";
|
||||
|
||||
@@ -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"}}
|
||||
|
Before Width: | Height: | Size: 11 KiB After Width: | Height: | Size: 99 KiB |
|
Before Width: | Height: | Size: 295 B After Width: | Height: | Size: 849 B |
|
Before Width: | Height: | Size: 406 B After Width: | Height: | Size: 1.7 KiB |
|
Before Width: | Height: | Size: 450 B After Width: | Height: | Size: 2.4 KiB |
|
Before Width: | Height: | Size: 282 B After Width: | Height: | Size: 1.2 KiB |
|
Before Width: | Height: | Size: 462 B After Width: | Height: | Size: 2.3 KiB |
|
Before Width: | Height: | Size: 704 B After Width: | Height: | Size: 3.3 KiB |
|
Before Width: | Height: | Size: 406 B After Width: | Height: | Size: 1.7 KiB |
|
Before Width: | Height: | Size: 586 B After Width: | Height: | Size: 3.1 KiB |
|
Before Width: | Height: | Size: 862 B After Width: | Height: | Size: 4.4 KiB |
|
After Width: | Height: | Size: 2.1 KiB |
|
After Width: | Height: | Size: 3.8 KiB |
|
After Width: | Height: | Size: 2.3 KiB |
|
After Width: | Height: | Size: 4.2 KiB |
|
Before Width: | Height: | Size: 862 B After Width: | Height: | Size: 4.4 KiB |
|
Before Width: | Height: | Size: 1.6 KiB After Width: | Height: | Size: 6.2 KiB |
|
After Width: | Height: | Size: 2.8 KiB |
|
After Width: | Height: | Size: 5.1 KiB |
|
Before Width: | Height: | Size: 762 B After Width: | Height: | Size: 2.9 KiB |
|
Before Width: | Height: | Size: 1.2 KiB After Width: | Height: | Size: 5.4 KiB |
|
Before Width: | Height: | Size: 1.4 KiB After Width: | Height: | Size: 5.8 KiB |
@@ -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:
|
||||
|
||||
@@ -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'
|
||||
@@ -90,6 +90,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
|
||||
|
||||
|
||||