- ประเด็นคือ ตอนเริ่มหัดพัฒนา Flutter เริ่มกับ version 1 แต่พอเขียนไปสักพัก เค้าออก version 2 แหละ
- เลยลองลง Flutter version2 ในเครื่องส่วนตัว พยายาม Migrate โปรเจคจากเครื่องทำงานที่ Flutter version 1 ไปเครื่องส่วนตัวที่ Flutter version 2
Env เครื่องทำงานที่เริ่มทำโปรเจค Flutter
- Ubuntu 18.04
- Flutter 1.22.3
- Dart 2.10.3
- openjdk-11-jdk
- Android Studio 4.1.3
Env เครื่องส่วนตัวที่จะย้ายโปรเจคไปเขียนต่อ
- Ubuntu 20.04
- Flutter 2.0.2
- Dart 2.12.1
- openjdk-11-jdk
- Android Studio 4.1.3
Step migrate
- sudo apt install openjdk-11-jdk (ไม่ต้องใช้ openjdk-11-jdk เพราะอีกที่เราพัฒนาโปรเจคเวอร์ชั่นเก่าใช้ 11 ทดสอบใช้ 14 แล้วรัน Flutter project เราที่ย้ายมาไม่ได้เลย ติดปัญหาที่ Java)
- ติดตั้ง Android Studio ที่เครื่องใหม่ให้เรียบร้อย
- ดาวน์โหลด Flutter SDK มาแตกไฟล์ไว้ยังพาธที่ต้องการ (Dart SDK ร่วมใน Flutter แล้ว)
- ติดตั้ง Plugin Flutter, Dart สำหรับ Android Studio ให้เรียบร้อย
- ทดสอบสร้าง Flutter proejct ขึ้นมาเพื่อทดสอบ Flutter SDK , Dart SDK ว่าใช้ได้จริง
- คัดลอกไฟล์ project Flutter จากเครื่องที่เขียนด้วยเวอร์ชั่นเก่า
- วางในพาธของเครื่องที่ลงเวอร์ชั่นใหม่ที่เราต้องการ
- จากนั้นเปิด Android Studio เลือกแบบ Exist project ไฟยังพาธที่วาง Project flutter ของเรา
- ใน Flutter project ให้เปิดไฟล์ main.dart ขึ้นมา
- แถวขวาบน เราจะเห็น Enable Dart support และ Open Dart settings ให้เลือก Enable Dart
- support อันนี้แหละ มันจะปรับ config file ของ project ให้ใช้ SDK พาธเครื่องใหม่เราให้อัตโนมัติ
- แต่ถ้าเราไปเลือก Open Dart settings อันนี้เหมือนเราต้องไป set Flutter, Dart SDK ด้วยตัวเราเองนะ ถ้าจำไม่ผิด
- จากนั้นสั่ง flutter clean
- และ flutter pub get
- หลังจากนั้น Close project และ Open project ใหม่
- เพียงเท่านี้ก็สามารถรัน Flutter project ที่เขียนด้วย Flutter 1 มาพัฒนาต่อบน Flutter 2 ได้แล้ว แต่ตอนรันอาจเจอ Note: เรื่อง Deprecate ของ lib ที่เราใช้ใน pubspec.yaml
ข้อควรจำNote: Some input files use or override a deprecated API.Note: Recompile with -Xlint:deprecation for details.Note: /home/jui/snap/flutter/common/flutter/.pub-cache/hosted/pub.dartlang.org/flutter_local_notifications-2.0.2/android/src/main/java/com/dexterous/flutterlocalnotifications/FlutterLocalNotificationsPlugin.java uses or overrides a deprecated API.Note: Recompile with -Xlint:deprecation for details.Note: /home/jui/snap/flutter/common/flutter/.pub-cache/hosted/pub.dartlang.org/flutter_ringtone_player-2.0.0/android/src/main/java/io/inway/ringtone/player/FlutterRingtonePlayerPlugin.java uses or overrides a deprecated API.
- เครื่องแรกที่ใช้พัฒนาโปรเจคใช้ Java เวอร์ชั่นใหน เครื่องใหม่ที่เราจะเปลี่ยนไปใช้พัฒนาแทนต้องใช้ เวอร์ชั่นเดียวกัน
- โปรเจคนี้เครื่องที่ที่ใช้พัฒนาใช้ sudo apt install openjdk-11-jdk
- พอเครื่องใหม่จะลองใช้ sudo install openjdk-14-jdk มันรันไม่ผ่าน มันขึ้นประมาณ Java Compiler error
- ต้อง sudo apt remove openjdk-14-* เอาออกแล้ว sudo apt install openjdk-11-jdk เท่านี้ก็รันโปรเจคได้แล้วคับ
- และอีกเรื่องแนะนำ ไม่ควรไปอัพเดทเปลี่ยน เวอร์ชั่น ของ lib ใน pubspec นะ มันก็ยังรันได้อยู่
- ถ้าเราไป upgrade lib ใน pubspec ของโปรเจคเราที่นี้แหละ งานเข้าเลย ต้องไล่แก้โค้ดที่ เยอะเลยคับพี่น้อง