149 lines
12 KiB
Typst
149 lines
12 KiB
Typst
#import "../PageTemplate.typ": i
|
|
#import "@preview/treet:1.0.0": *
|
|
#import "@preview/cades:0.3.1": qr-code
|
|
#set heading(numbering: "1.1", offset: 1)
|
|
|
|
= Flutter <flutter>
|
|
|
|
#i Flutter เป็นชุดพัฒนาซอฟต์แวร์ UI แบบโอเพนซอร์สที่สร้างโดย Google
|
|
สามารถใช้พัฒนาแอปพลิเคชันข้ามแพลตฟอร์มจากฐานโคดเดียวสำหรับเว็บ Fuchsia, Android, iOS,
|
|
Linux, macOS และ Windows โดย Flutter ได้รับการพูดถึงครั้งแรกในปี 2015
|
|
และเปิดตัวในเดือนพฤษภาคม 2017 และ Flutter ถูกใช้งานภายในโดย Google ในแอปพลิเคชันต่างๆ
|
|
เช่น Google Pay และ Google Earth รวมถึงโดยนักพัฒนาซอฟต์แวร์รายอื่นๆ เช่น ByteDance
|
|
และ Alibaba
|
|
|
|
#i Flutter จะสร้างแอปพลิเคชันที่มีเอ็นจิ้นการเรนเดอร์ของตัวเอง ซึ่งส่งข้อมูลพิกเซลไปยังหน้าจอโดยตรง
|
|
ซึ่งแตกต่างจากเฟรมเวิร์ก UI อื่น ๆ อีกมากมายที่อาศัยแพลตฟอร์มเป้าหมายเพื่อจัดหาเอ็นจิ้นการเรนเดอร์
|
|
เช่น แอป Android พื้นฐานที่ใช้ Android SDK ระดับอุปกรณ์ หรือ iOS SDK ที่ใช้ UI stack
|
|
ในตัวของแพลตฟอร์มเป้าหมาย การควบคุมขั้นตอนการแสดงผลของ Flutter
|
|
ช่วยลดความยุ่งยากในการรองรับหลายแพลตฟอร์ม เนื่องจากสามารถใช้โคด UI
|
|
ที่เหมือนกันได้กับทุกแพลตฟอร์มเป้าหมาย
|
|
|
|
== โครงสร้างโปรเจกต์ Flutter
|
|
|
|
ในโครงงานนี้ โปรเจกต์ Flutter มีโครงสร้างคร่าว ๆ ดังกล่าว
|
|
|
|
#tree-list[
|
|
- android
|
|
- app
|
|
- src
|
|
- main
|
|
- java: โคด Java
|
|
- kotlin: โคด Kotlin
|
|
- res: โฟลเดอร์ทรัพยากร เช่น ไอคอนแอพลิเคชัน
|
|
- AndroidManifest.xml
|
|
- build.gradle.kts
|
|
- settings.gradle.kts
|
|
- assets
|
|
- certificates
|
|
- rootCA.crt: ใบรับรอง Root (ดู@x509 สำหรับรายละเอียด)
|
|
- build: โฟลเดอร์สำหรับเก็บไฟล์ไบนารี
|
|
- ios
|
|
- lib: ซอร์สโคดของแอพลิเคชัน
|
|
- linux
|
|
- macos
|
|
- test
|
|
- windows
|
|
- l10n.yaml: ไฟล์ตั้งค่าฟีเจอร์แปลภาษา
|
|
- pubspec.yaml: ไฟล์ข้อมูลโปรเจกต์ Flutter
|
|
]
|
|
|
|
(รายการข้างต้นรวมถึงแค่ไฟล์ที่สำคัญที่จะถูกกล่าวถึงใน@flutter นี้)
|
|
|
|
== Android
|
|
|
|
#i ในการพัฒนาแอพลิเคชัน Android โดยใช้เฟรมเวิร์ก Flutter จำเป็นต้องใช้ส่วนประกอบเครื่องมือพัฒนา Android ดังนี้
|
|
|
|
- Android SDK (API Level 36 ณ เวลาที่พิมพ์)
|
|
- Android SDK Build-Tools
|
|
- Android SDK Command-line Tools
|
|
- Android SDK Platform-Tools
|
|
- Android Emulator (ไม่บังคับ)
|
|
|
|
และแนะนำให้จัดการและติดตั้งเครื่องมือเหล่านี้ผ่าน Android Studio
|
|
|
|
#i ในการติดตั้ง Android SDK ควรติดตั้ง Android SDK ล่าสุดถึงแม้ว่าอุปกรณ์ของคุณจะใช้เวอร์ชันที่เก่ากว่านั้น เพื่อความมั่นใจว่าแอพลิเคชันจะสามารถใช้กับอุปกรณ์ที่ใหม่ล่าสุดได้
|
|
|
|
#i แอพลิเคชัน Android จะมี SDK/API level เป้าหมาย (Target SDK/API level) และ SDK/API level ขั้นต่ำ (Minimum SDK/API level) โครงงานนี้ ณ เวลาที่พิมพ์ ใช้ API level เป้าหมาย 36 (Android 16) และ API level ขั้นต่ำ 24 (Android 7) ซึ่งรวมกันแล้ว แอพลิเคชัน Android จะสามารถติดตั้งได้บนระบบตั้งแต่ API level ขั้นต่ำจนถึง API level เป้าหมาย หรือก็คือ แอพลิเคชันในโครงงานนี้สามารถติดตั้งได้ตั้งแต่บนระบบ Android 7 ถึง Android 16 นั่นเอง
|
|
|
|
=== Java
|
|
|
|
#i Java เป็นภาษาสำคัญสำหรับการพัฒนาแอพลิเคชัน Android ถึงอย่างไรก็ตาม แอพลิเคชัน Flutter นั้นถูกเขียนด้วยภาษา Dart แต่ยังจำเป็นต้องมีโคด Java เล็กน้อยเพื่อเริ่มต้นแอพลิเคชัน Flutter
|
|
|
|
#i โครงการนี้ใช้ Java 21 (JetBrains Runtime/Azul Zulu OpenJDK) เป็นหลักในการทำงานกับ Gradle แต่แอพลิเคชัน Android ที่ผลิตออกมานั้น เพื่อให้เข้ากับเวอร์ชันที่เก่ากว่าของระบบปฏิบัติการได้ ใช้ Java 11
|
|
|
|
=== Gradle
|
|
|
|
#i Gradle เป็นเครื่องมือสร้างระบบอัตโนมัติสำหรับการพัฒนาซอฟต์แวร์หลายภาษา จัดการงานต่าง ๆ เช่น การคอมไพล์ การแพ็คเกจ การทดสอบ การปรับใช้ และการเผยแพร่ ภาษาที่รองรับ ได้แก่ Java (รวมถึงภาษา Kotlin, Groovy, Scala ที่ใช้ JDK), C/C++ และ JavaScript Gradle พัฒนาต่อยอดจากแนวคิดของ Apache Ant และ Apache Maven และนำเสนอภาษาเฉพาะโดเมนที่ใช้ Groovy และ Kotlin ซึ่งต่างจากการกำหนดค่าโครงการที่ใช้ XML ที่ Maven ใช้ Gradle ใช้กราฟแบบอะไซคลิกกำกับทิศทางเพื่อจัดการการอ้างอิง กราฟนี้ใช้เพื่อกำหนดลำดับของงานที่ควรดำเนินการ Gradle ทำงานบน Java Virtual Machine
|
|
|
|
#i Gradle คือเครื่องมือหลักที่ใช้ในการจัดการโปรเจกต์ Java ส่วนใหญ่ รวมถึงโปรเจกต์ Android โดยในโครงการนี้ จะใช้ Gradle เวอร์ชัน 8.14.3 เป็นหลัก
|
|
|
|
== Linux
|
|
|
|
#i Flutter ใช้ไลบรารีดังต่อไปนี้ในขั้นตอนการพัฒนาแอพลิเคชันบน Linux (development dependencies)
|
|
|
|
- curl
|
|
- git
|
|
- unzip
|
|
- xz
|
|
- zip
|
|
- glu
|
|
|
|
#i การติดตั้งไลบรารีและโปรแกรมที่กล่าวไปข้างต้นจะแตกต่างกันไปแต่ละการแจกจ่าย Linux และ Flutter ใช้ไลบรารีพื้นฐานดังกล่าวในการทำงานของแอพลิเคชัน (runtime dependencies)
|
|
|
|
- GTK 3
|
|
- blkid
|
|
- LZMA
|
|
|
|
แต่โดยทั่วไปแล้ว ไลบรารีเหล่านี้ควรถูกติดตั้งมาอยู่แล้วหากคุณใช้ graphical desktop ทั่วไป
|
|
|
|
=== Debian
|
|
|
|
```sh
|
|
# Development dependencies:
|
|
sudo apt install -y curl git unzip xz-utils zip libglu1-mesa
|
|
# Runtime dependencies:
|
|
sudo apt install libgtk-3-0 libblkid1 liblzma5
|
|
```
|
|
|
|
=== Fedora Linux
|
|
|
|
```sh
|
|
# Development dependencies:
|
|
sudo dnf install curl git unzip xz zip mesa-libglu
|
|
# Runtime dependencies:
|
|
sudo dnf install gtk3 libblkid xz
|
|
```
|
|
|
|
=== Arch Linux
|
|
|
|
```sh
|
|
# Development dependencies:
|
|
sudo pacman -S --needed curl git unzip xz zip glu
|
|
# Runtime dependencies:
|
|
sudo pacman -S --needed util-linux-libs xz gtk
|
|
```
|
|
|
|
== Windows
|
|
|
|
#grid(
|
|
columns: 2,
|
|
column-gutter: 1em,
|
|
[#i ในการพัฒนาซอฟต์แวร์บน Windows ด้วย Flutter คุณจำเป็นต้องติดตั้ง Git สำหรับ Windows ซึ่งคุณสามารถดูขั้นตอนการติดตั้งได้โดยการสแกน QR code ด้านข้าง หรือที่ https://git-scm.com/install/windows หรือเพียงแค่ใช้ WinGet ในการติดตั้งโดยการใช้คำสั่งด้านล่าง],
|
|
qr-code("https://git-scm.com/install/windows", width: 1in),
|
|
)
|
|
|
|
```sh
|
|
winget install --id Git.Git -e --source winget
|
|
```
|
|
|
|
= Git
|
|
|
|
#i Git เป็นระบบซอฟต์แวร์ควบคุมเวอร์ชันแบบกระจาย ที่สามารถจัดการเวอร์ชันของซอร์สโคดหรือข้อมูลได้ มักใช้เพื่อควบคุมซอร์สโคดโดยโปรแกรมเมอร์ที่พัฒนาซอฟต์แวร์ร่วมกัน
|
|
|
|
== Gitea
|
|
|
|
#i Gitea เป็นชุดซอฟต์แวร์ forge สำหรับการโฮสต์ระบบควบคุมเวอร์ชันการพัฒนาซอฟต์แวร์โดยใช้ Git รวมถึงฟีเจอร์การทำงานร่วมกันอื่น ๆ เช่น การติดตามบั๊ก การตรวจสอบโคด การผสานรวมอย่างต่อเนื่อง (Continuous Integration; CI) กระดาน Kanban ระบบรายงานปัญหา และวิกิ รองรับการโฮสต์ด้วยตนเอง และยังมีอินสแตนซ์สาธารณะของบุคคลที่หนึ่งให้ใช้งานฟรีอีกด้วย Gitea เป็นส่วนหนึ่งของ Gogs และเขียนด้วยภาษา Go Gitea สามารถโฮสต์ได้บนทุกแพลตฟอร์มที่รองรับ Go รวมถึง FreeBSD, Linux, macOS และ Windows โครงการนี้ได้รับทุนสนับสนุนจาก Open Collective
|
|
|
|
#i โครงงานนี้ใช้ Gitea (self-hosted) ในการโฮสต์โคดของโครงงาน
|