# رفع مشکل فیلترینگ دامنه‌های گوگل در وب اپلیکیشن

## مشکل
هنگام استفاده از اینترنت داخلی ایران، دامنه‌های زیر فیلتر می‌شوند:
- `www.gstatic.com` (CanvasKit و Firebase SDK)
- `fonts.gstatic.com` (Google Fonts)

این مسئله باعث می‌شد که اپلیکیشن وب لود نشود.

## راه‌حل پیاده‌سازی شده

### 1. محلی‌سازی CanvasKit
فایل‌های CanvasKit (موتور رندرینگ Flutter) به صورت محلی در پوشه `web/canvaskit/` ذخیره شده‌اند:
- `canvaskit.js` (86 KB)
- `canvaskit.wasm` (5.7 MB)

### 2. محلی‌سازی Firebase SDK
فایل‌های Firebase SDK در پوشه `web/firebase/` قرار دارند:
- `firebase-app.js` (19 KB)
- `firebase-messaging.js` (39 KB)

### 3. غیرفعال‌سازی Google Fonts
Flutter به طور پیش‌فرض فونت Roboto را از Google Fonts دانلود می‌کند. این رو غیرفعال کردیم:

**در `web/index.html`:**
```html
<style>
  @font-face {
    font-family: 'Roboto';
    font-style: normal;
    font-weight: 400;
    src: local('Arial'), local('Tahoma');
  }
</style>
```

**در `web/flutter_bootstrap.js`:**
```javascript
config: {
  canvasKitBaseUrl: "/canvaskit/",
  fontFallbackBaseUrl: "",  // غیرفعال کردن Google Fonts
}
```

### 4. پیکربندی Flutter Bootstrap
فایل `web/flutter_bootstrap.js` برای استفاده از فایل‌های محلی تنظیم شده است:
```javascript
_flutter.loader.load({
  config: {
    canvasKitBaseUrl: "/canvaskit/",
  },
  // ...
});
```

### 4. Error Handling و Fallback
اگر لود اولیه با مشکل مواجه شود:
1. ابتدا سعی می‌کند با renderer پیش‌فرض (WebGL) اجرا شود
2. در صورت شکست، با HTML renderer تلاش می‌کند
3. در نهایت یک پیام دوستانه به کاربر نشان می‌دهد

**مهم:** اگر هر کدام از فایل‌های CanvasKit، Firebase یا فونت‌ها fail شوند، اپ همچنان باز می‌شود و از fallback استفاده می‌کند:
- CanvasKit fail → HTML renderer
- Firebase fail → بدون نوتیفیکیشن
- Font fail → فونت‌های سیستمی (Arial/Tahoma)

## بیلد کردن پروژه
بعد از این تغییرات، برای بیلد وب استفاده کنید:

```bash
flutter build web --release
```

**نکته:** در نسخه‌های جدید Flutter، آپشن `--web-renderer` حذف شده و Flutter به صورت خودکار بهترین renderer را انتخاب می‌کند.

## توجه مهم
- فایل‌های محلی شده باید در گیت کامیت شوند
- در صورت آپدیت Flutter، ممکن است نیاز به آپدیت فایل‌های CanvasKit باشد
- اگر Firebase SDK آپدیت شد، فایل‌های محلی را هم آپدیت کنید

## تست
پس از بیلد، اپلیکیشن باید در شرایط زیر کار کند:
✅ با اینترنت بین‌المللی
✅ با اینترنت داخلی (بدون دسترسی به gstatic.com)
✅ با فیلترشکن
✅ بدون فیلترشکن

## نسخه فایل‌های دانلود شده
- CanvasKit: نسخه `13e658725ddaa270601426d1485636157e38c34c`
- Firebase: نسخه `7.15.5`
