Monday, March 29, 2021

Upgrade Flutter project from Old to New version

  •  ประเด็นคือ ตอนเริ่มหัดพัฒนา 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 ของโปรเจคเราที่นี้แหละ งานเข้าเลย ต้องไล่แก้โค้ดที่ เยอะเลยคับพี่น้อง

No comments:

Post a Comment