העברת אפליקציית המובייל שלך לגרסת Flutter SDK חדשה
שירות ההעברה שלנו ל-Flutter SDK מכסה שדרוג Flutter, null safety, שינויים שבירתיים ב-Flutter, Impeller Flutter, Navigator 2.0, העברת go_router, תוספי Flutter ובדיקות Flutter. אנחנו מתמודדים עם פרויקטים כאלה מדי חודש. הניסיון שלנו — 5+ שנים ב-Flutter ולמעלה מ-30 העברות מוצלחות — מראה שמעבר מ-Flutter 2.x ל-3.x הוא רק קצה הקרחון. אנחנו עוזרים לצוותים להתמודד עם null safety, ה-Navigator 2.0 החדש ושינויי Material. העברת אפליקציה בייצור היא לא רק flutter pub upgrade; זו עבודה שיטתית שדורשת תכנון ומומחיות.
מדוע העברת Flutter SDK דורשת גישה מקצועית?
כי עדכון גדול שובר לא רק את הקוד אלא גם את התלויות, את תצורת הבנייה ואפילו את התנהגות הווידג'טים. עם גישת feature-flag קיצרנו את זמן ההעברה ב-30% בהשוואה לניסיון לעדכן הכל בבת אחת. מפתח-ביד — עם ביקורת, תיקון כל השינויים השבירתיים ובדיקות על מכשירים אמיתיים. אנחנו מספקים אחריות של 30 יום לאחר ההעברה ויש לנו מפתחי Flutter מוסמכים.
מה בעצם נשבר במהלך שדרוג גדול
Null safety: מעבר ל-dart migrate
הכלי dart migrate עושה 70-80% מהעבודה — הוספת ? ו-! במקום שבו המנתח יכול להסיק nullability. ה-20-30% הנותרים הם עבודה ידנית, ושם מסתתרים באגים.
מקרה טיפוסי: תוסף מ-pub.dev לא הועבר ל-null safety והוקפא. אפשרויות: fork עם תיקון, החלפה בחבילה חלופית, כתיבת wrapper. בפרויקט עם 40+ תלויות, זה הופך לשבוע של עבודה על תלויות בלבד.
מסוכן יותר הוא קוד שעובר העברה ללא שגיאות אבל משנה התנהגות. משתנה late ללא אתחול זורק LateInitializationError בזמן ריצה במקום שבו קודם היה רק null. נתפס רק בבדיקות או בייצור.
שינויים שבירתיים ב-Material 3
Flutter 3.16+ עבר ל-useMaterial3: true כברירת מחדל. אם האפליקציה משתמשת בערכת נושא מותאמת אישית דרך ThemeData, חלק מהרכיבים מתחילים להיראות אחרת: גדלי כפתורים משתנים, ריפוד ה-AppBar משתנה, היררכיית הגופנים של TextTheme משתנה. אפליקציות שנדחו עקב שינויים ויזואליים לאחר שדרוג אינן נדירות.
פתרון: הגדירו במפורש TextTheme במהלך ההעברה, ואז עברו בהדרגה ל-M3 רכיב אחר רכיב.
שינויים ב-Navigator ובניתוב
אם האפליקציה משתמשת ב-useMaterial3: false, כל גרסה גדולה של החבילה שוברת את ה-API בדרכים חדשות. מעבר מ-go_router ל-go_router 6.x הוא שכתוב מלא של תצורת הניתוב: 10.x + GoRoute במקום ShellRoute מקוננים, שינויים בחתימת ה-callback של GoRoute, redirect חדש לניווט מתמשך.
שינויי רינדור: Impeller
Flutter 3.10+ הפעיל את Impeller כברירת מחדל ב-iOS (ב-Android — אופציונלי). Impeller מבטל גמגומים מהידור shader אבל שובר יישומי StatefulShellRoute מותאמים אישית המשתמשים ב-CustomPainter או BlendMode לא סטנדרטיים. לאחר הפעלת Impeller, יש להריץ את כל האנימציות והווידג'טים המותאמים אישית על מכשירים אמיתיים.
כיצד לתכנן נכון העברת Flutter SDK?
תהליך ההעברה
ביקורת תלויות — הצעד הראשון. ImageFilter מראה מה מיושן אבל לא שינויים שבירתיים. אנחנו קוראים ידנית את ה-CHANGELOG של כל חבילה ב-pubspec.yaml עבור גרסאות גדולות. התלויות מחולקות לשלוש קטגוריות:
- עודכנו ללא שינויי קוד
- דורשות שינויי קוד (שינויי API)
- אין גרסה תואמת — דורשות החלפה או fork
גישת feature-flag לאפליקציות גדולות. צרו ענף flutter pub outdated, עדכנו את ה-SDK והחבילות, תקנו את כל שגיאות ההידור. ואז תקנו צעד אחר צעד, החל משכבת הליבה (מודלים, מאגרים) וכלה ב-UI.
בדיקות לאחר ההעברה:
-
migration— ניתוח סטטי ללא אזהרות -
flutter analyze— כל ערכת הבדיקות הקיימת חייבת לעבור - בדיקות Golden לרכיבי UI (אם נעשה בהן שימוש) צריכות להיווצר מחדש — Impeller מרנדר פיקסלים אחרת
- בדיקת עשן על מכשירים פיזיים: iOS + Android, Android זול הוא חובה
שגיאות העברה טיפוסיות והפתרונות שלהן
| שגיאה | סיבה | פתרון |
|---|---|---|
flutter test |
משתנה LateInitializationError לא אותחל |
בדקו את כל שדות late, הוסיפו בדיקות או השתמשו ב-late |
| ווידג'טים נראים אחרת | Material 3 מופעל כברירת מחדל | הגדירו במפורש ? |
useMaterial3: false לא מהודר |
שינוי API גדול | שכתבו את תצורת הניתוב לגרסה החדשה |
| תוסף לא תואם | אין גרסה ל-Dart החדש | Fork, החלפה או wrapper |
מה כלול בעבודת ההעברה
- ביקורת קוד ותלויות נוכחיים עם דוח
- עדכון SDK וכל החבילות, תיעוד שינויים שבירתיים
- תיקון קוד: null safety, Material 3, Navigator, Impeller
- כתיבה ועדכון בדיקות (יחידה, ווידג'ט, golden)
- בדיקות עשן על מכשירי iOS ו-Android פיזיים
- עזרה בפרסום ל-App Store ול-Google Play
- אחריות של 30 יום לאחר ההעברה לשקט נפשי
בהשוואה להעברה פנימית, הגישה השיטתית שלנו מפחיתה סיכון ב-50% ומאיצה את זמן היציאה לשוק פי 2.
רשימת בדיקה להעברה עצמית
- הריצו
go_router - קראו את ה-CHANGELOG של כל חבילה גדולה
- תקנו את כל שגיאות ההידור
- תקנו את שכבת הליבה (מודלים, מאגרים)
- הגדירו Material 3 ל-
flutter pub outdatedאם נדרש - עדכנו בדיקות golden
- בדקו על מכשירים אמיתיים
בעיות ספציפיות מהפרקטיקה
בפרויקט אחד (מסחר אלקטרוני, Flutter 2.8 → 3.19), הקושי העיקרי לא היה בקוד אלא בתוסף false. בין גרסאות 9.x ל-16.x, כל הצד של Android השתנה: flutter_local_notifications חדש עם FlutterLocalNotificationsPlugin.initialize(), InitializationSettings חובה במקום ה-callback שהוצא משימוש. בנוסף, Android 13 דורש הרשאת onDidReceiveNotificationResponse מפורשת — בלעדיה, זה נכשל בשקט.
מקרה נוסף: POST_NOTIFICATIONS לאחר העדכון התחיל להחזיר image_picker במקום XFile. בכל מקום בקוד File הוחלף ב-File(imagePicker.path) — מכנית, אבל היו 23 שימושים על פני מסכים שונים.
לוחות זמנים
| היקף האפליקציה | זמן העברה טיפוסי |
|---|---|
| קטנה (<20 מסכים, <15 תלויות) | 3-5 ימים |
| בינונית (20-60 מסכים, 15-40 תלויות) | 1-3 שבועות |
| גדולה (60+ מסכים, ארכיטקטורה מורכבת) | 3-6 שבועות |
התמחור מחושב בנפרד לאחר ביקורת המאגר ורשימת התלויות. לעיון, העברת אפליקציה קטנה טיפוסית מתחילה ב-$1,500, אפליקציות בינוניות מ-$4,000. קבלו ייעוץ — נעריך את הפרויקט שלכם ונציע לוח זמנים.
למדו עוד על שינויים שבירתיים ב-מדריך Flutter הרשמי.







