สร้าง Hello World ด้วย Flutter

Flutter 3 by Keptcode.com

Last Updated: 2024-08-22 01:55

หลังจากที่เราติดตั้งและสร้างโปรเจกเสร็จ พร้อมกับรันโปรเจกเทสผ่านหมดแล้ว ลำดับต่อไปก็จะเป็นส่วนของ การเริ่มต้นพัฒนาแอพพลิเคชั่นด้วย Flutter กันแล้ว โดยปกติแล้วไม่ว่าจะเขียนภาษาไหนก็ตาม เรามักจะเริ่มต้นด้วยการสร้างแอพ Hello World กันก่อน

Repo: Github.com (รบกวนกด Start ให้ด้วยนะคับ)

https://github.com/coachmaxz/flutter-app

คำแนะนำ

main.dart คือไฟล์ที่เป็นจุดเริ่มต้นของการทำงานภายในแอพที่ถูกพัฒนาด้วย Flutter ทั้งระบบ หรือก็คือ Flutter จะเข้าถึงไฟล์ main.dart เป็นไฟล์แรกทุกครั้ง เมื่อเข้าใช้งานแอพ ไฟล์นี้จึงสำคัญต่อโปรเจก Flutter มาก ๆ

ดังนั้นการตั้งค่าต่าง ๆ ของระบบจะถูกกำหนดไว้ภายในไฟล์นี้แทบจะทั้งหมด ยกตัวอย่างเช่น การตั้งค่าภาษาที่ใช้ภายในแอพ ตั้งค่าธีมแอพ หรือ จะเป็นการเช็คเงื่อนไขการเข้าสู่ระบบ ส่วนใหญ่จะถูกเขียนไว้ในไฟล์นี้ทั้งหมด

สร้างไฟล์ main.dart

Path: [skeleton]\flutter-app\lib\main.dart

Language: Dart

// Step 01 : นำเข้าไฟล์
import 'package:flutter/material.dart';

// Step 02 : ประกาศตัวแปร main() ได้เท่านั้น
void main() {

  // Step 03 : เรียกใช้งาน Stateless Widget สำหรับ "รันแอพ"
  runApp(const MyApp()); 

}

// Step 04 : สร้างคลาส MyApp แบบ Stateless Widget
class MyApp extends StatelessWidget {

  // Step 05 : ประกาศตัวแปรนี้ "ทุกครั้ง" เมื่อใช้ Stateless Widget
  // โดยตั้งชื่อให้ "เหมือนกับชื่อคลาส" หลักเช่น MyApp นั่นเอง
  const MyApp({
    super.key,
  });
    
  // Step 06 : สร้าง Widget สำหรับ "แสดงผล" ชื่อว่า "build" เท่านั้น
  @override
  Widget build(BuildContext context) {
    // Step 07 : เรียกใช้งาน Material 3 Design 
    return MaterialApp(
      title: 'Flutter App', // Step 08 : ตั้งชื่อ "แอพ" ของเรา
      theme: ThemeData(
        // Step 09 : ตั้งค่า "สีน้ำเงิน" เป็นสีของ "ธีม" ในแอพเรา
        colorScheme: ColorScheme.fromSeed(
          seedColor: Colors.blue, 
        ),
        // Step 10 : เปืดใช้งาน Material 3 ทั้งแอพ 
        useMaterial3: true,
      ),
      // Step 11 : กำหนด "หน้าหลัก" ให้กับ "แอพของเรา"
      home: const HelloWorldPage(),
    );
  }

}

คำแนะนำ

สิ่งสำคัญของไฟล์ main.dart มีทั้งหมด 4 ส่วน เริ่มต้นจากส่วนที่ 1 ในเมื่อเราต้องการใช้งาน Material 3 Design เราจะต้องมีการนำเข้าไฟล์ flutter/material.dart ทุกครั้ง ส่วนที่ 2 คลาสที่ชื่อ main() ถ้าหากไม่มีการสร้างหรือประกาศชื่อคลาสนี้ แอพเราจะรันไม่ได้ ส่วนที่ 3 คลาสที่เป็นแบบ Stateless Widget เสมือนเป็น Widget ที่ครอบคลุมแอพของเราไว้ทั้งหมด และ ส่วนสุดท้ายคือส่วนของ build() ซึ่งจะหมายถึงว่าจะให้ Flutter แสดงอะไรออกมา

File: main.dart

[skeleton]/lib/main.dart

สร้างไฟล์ hello.dart เป็น Main Screen (หน้าหลัก)

Path: [skeleton]\flutter-app\lib\screens\hello.dart

Language: Dart

// Step 01 : นำเข้าไฟล์
import 'package:flutter/material.dart';

// Step 02 : สร้างคลาส HelloWorldPage สำหรับใช้เป็น "หน้าหลัก" ของแอพ
class HelloWorldPage extends StatefulWidget {

  // Step 03 : ประกาศตัวแปรนี้ "ทุกครั้ง" เมื่อใช้ Stateful Widget เช่นกัน
  // โดยตั้งชื่อให้ "เหมือนกับชื่อคลาส" หลักเช่น HelloWorldPage นั่นเอง 
  const HelloWorldPage({
    super.key, 
  });
  
  // Step 04 : ประกาศตัวแปร
  // กรณีที่ "แอพของเรา" มีการใช้งาน State สำหรับจัดการ "ข้อมูล" ภายในหน้าเหล่านั้น
  @override
  State<HelloWorldPage> createState() => HelloWorldState();

}

// Step 05 : สร้างคลาส HelloWorldState สำหรับจัดการ State โดยเฉพาะ
class HelloWorldState extends State<HelloWorldPage> {

  // Step 06 : สร้าง Widget สำหรับ "แสดงผล" ชื่อว่า "build" เท่านั้น
  @override
  Widget build(BuildContext context) {
    // Step 07 : เรียกใช้งาน Scaffold ที่มาพร้อมกับ Material 3 Design
    // ทำให้เราสามารถกำหนด AppBar และ Body ให้กับแอพของเราได้ (ใช้ทุกหน้า)
    return const Scaffold(
      // Center: กำหนดให้แสดง Content อยู่ตรง "กึ่งกลาง​" ทั้งหมด
      body: Center(
        // Column: จัด Layout ให้มีมีลักษณะของ Column (แนวตั้ง)
        child: Column(
          // กำหนดให้แสดง Content อยู่ตรง "กึ่งกลาง​" ทั้งหมด
          mainAxisAlignment: MainAxisAlignment.center,
          // children: สามารถเพิ่ม Widget ที่ต้องการ "แสดง" เข้าไปได้เลย
          children: <Widget> [
            // ตัวอย่าง: เพิ่ม Widget ประเภท Text เพื่อแสดงข้อความ "Hello World" ลงไป
            Text(
              'Hello World !!',
              // style: คือการ "ตกแต่ง" ข้อความให้ "สวยงาม" มากยิ่งขึ้น
              style: TextStyle(
                fontSize: 22, // ตัวหนังสือ
                color: Colors.black, // สีตัวหนังสือ
                fontWeight: FontWeight.w400, // น้ำหนักของตัวหนักสือ
              ),
            ),
          ],
        ),
      ),
    );
  }

}

คำแนะนำ

หน้านี้ เราจะทำเป็น "หน้าหลัก" ของแอพ และเราจะใช้ "หน้าหลัก" นี้เป็นแนวทางให้กับการสร้างหน้าอื่น ๆ ในอนาคต จุดสำคัญอยู่ตรงที่มีการเรียกใช้งาน Stateful Widget ซึ่งจะแตกต่างจากไฟล์ main.dart ที่เรียกใช้งาน Stateless Widget ต่อด้วยการใช้งาน State หรือการจัดการข้อมูลภายในหน้านั้น ๆ

ต่อจากนั้น ก็จะมีตัวอย่างคำสั่งการจัด Layout ให้กับ Content ต่าง ๆ ยกตัวอย่างเช่นคำสั่ง Center (จัดตำแหน่งกึ่งกลาง), Column (จัดเนื้อหาเป็นแบบคอลัมน์) และ Text (แสดงข้อความพร้อมตกแต่ง) เป็นต้น

เกือบลืมคำสั่ง Scaffold ซึ่งจำเป็นจะต้องใส่ไว้บนสุดของทุก ๆ หน้าที่ต้องการใช้งาน Material 3 Design เป็นธีมของแอพ ความสามารถของสำคำสั่งนี้ จะทำให้เราสามารถ "แยก" การแสดงผลระหว่าง "AppBar" กับ "Body" ออกจากกันได้ ตัวอย่างสามารถติดตามในบนถัดไป

แก้ไขไฟล์ main.dart (นำเข้าไฟล์ hello.dart มาใช้งาน)

Path: [skeleton]\flutter-app\lib\main.dart

Language: Dart

// Step 01 : นำเข้าไฟล์ hello.dart มาใช้งาน เป็น "หน้าหลัก" ของแอพ
import 'package:flutter_app/screens/hello.dart'; // <== เพิ่มคำสั่งนี้ (1)

class MyApp extends StatelessWidget {

  // .....
    
  Widget build(BuildContext context) {
    return MaterialApp(
      // ...
      // Step 02 : เรียกใช้งาน HelloWorldPage เข้ามาเป็น "หน้าหลัก" ของแอพ
      home: const HelloWorldPage(), // <== เพิ่มคำสั่งนี้ (2)
    );
  }

}

ตัวอย่าง