【Flutter 程式設計入門實戰 30 天】Day 7:水平 Row 和垂直 Column 容器

【Flutter 程式設計入門實戰 30 天】線上教學課程目錄 使用 Dart 程式語言,開發 Android 和 iOS APP 應用程式。

哈囉~大家好,我是 KT ,今天實戰第七天,KT 將為大家來介紹,水平 Row 和垂直 Column 容器。

Row 水平佈局容器

元件會「水平」方向依序排列。

Column 垂直佈局容器

元件會「垂直」方向依序排列。

Row 水平佈局容器

範例

在 Row 水平佈局,加入三個 Text 文字元件

return Row(
  children: <Widget>[Text('1'), Text('2'), Text('3')],
);

執行畫面

Row 對齊方式

主軸方向的對齊方式 mainAxisAlignment

Row 主軸為水平,Column 主軸為垂直

MainAxisAlignment.start:靠左對其
MainAxisAlignment.end: 靠右對齊
MainAxisAlignment.center: 置中
MainAxisAlignment.spaceBetween: 中間留空間
MainAxisAlignment.spaceAround: 兩邊空間均分
MainAxisAlignment.spaceEvenly: 均分空間

副軸方向的對齊方式 crossAxisAlignment

Row 副軸為垂直,Column 副軸為水平

(當 row 中的元件高度不一樣,才會呈現出 crossAxisAlignment 效果)

CrossAxisAlignment.start: 縱向起點
CrossAxisAlignment.end: 縱向終點
CrossAxisAlignment.center: 縱向中心點
CrossAxisAlignment.stretch: 佔滿縱向
CrossAxisAlignment.baseline: 縱向對齊 baseline

(其中 baseline 需與 textBaseline: TextBaseline.alphabetic 搭配使用否則會報錯)

Column 垂直佈局容器

在 Column 水平佈局,加入三個 Text 文字元件

return Column(
  children: <Widget>[Text('1'), Text('2'), Text('3')],
);

執行畫面

Column 對齊方式

主軸方向的對齊方式 mainAxisAlignment

Row 主軸為水平,Column 主軸為垂直

MainAxisAlignment.start:縱向起點
MainAxisAlignment.end: 縱向終點
MainAxisAlignment.center: 縱向中心點
MainAxisAlignment.spaceBetween: 中間留空間
MainAxisAlignment.spaceAround: 兩邊空間均分
MainAxisAlignment.spaceEvenly: 均分空間

副軸方向的對齊方式 crossAxisAlignment

Row 副軸為垂直,Column 副軸為水平

(當 Column 中的元件寬度不一樣,才會呈現出 crossAxisAlignment 效果)

CrossAxisAlignment.start: 靠左對齊
CrossAxisAlignment.end: 靠右對齊
CrossAxisAlignment.center: 置中
CrossAxisAlignment.stretch: 佔滿橫向
CrossAxisAlignment.baseline: 橫向對齊 baseline

(其中 baseline 需與 textBaseline: TextBaseline.xxx 搭配使用否則會報錯)

練習:用文字色塊來展示 Row 和 Column

上方範例極簡化,主要是讓大家可以聚焦在 Row 和 Column,這次我們試著更換以下程式碼中的容器為 Row 或 Column ,且分別切換設定 mainAxisAlignment 和 crossAxisAlignment 等相關對齊參數。

import 'package:flutter/material.dart';

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
        home: Scaffold(
          appBar: AppBar(
            title: Text('HKT線上教室'),
          ),
          body: HomePage(),
        ));
  }
}

class HomePage extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    //↓↓↓更改此處程式碼↓↓↓
    return Row(
      mainAxisAlignment: MainAxisAlignment.center,
      crossAxisAlignment: CrossAxisAlignment.center,
      children: <Widget>[
        Container(
          color: Colors.amber,
          child: Text('1', style: TextStyle(fontSize: 100)),
        ),
        Container(
          color: Colors.red,
          child: Text('2', style: TextStyle(fontSize: 100)),
        ),
        Container(
          color: Colors.green,
          child: Text('3', style: TextStyle(fontSize: 100)),
        )
      ],
    );
  }
}

執行畫面

補充資料

Row 和 Column 容器佈局,可以搭配 Expanded 或 Flexible 防止版面跑版。


那今天就介紹到這邊囉~

順帶一提,KT 線上教室,臉書粉絲團,會不定期發佈相關資訊,不想錯過最新資訊,不要忘記來按讚,加追蹤喔!也歡迎大家將這篇文章分享給更多人喔。

我們明天見囉!!!掰掰~

參考資料

HKT 線上教室
http://tw-hkt.blogspot.com/

Background vector created by freepik
https://www.freepik.com

Layouts in Flutter
https://flutter.dev/docs/development/ui/layout

這個網誌中的熱門文章

nano 文字編輯器

2023 最新入門零基礎 Kotlin教學【從零開始學 Kotlin 程式設計】Kotlin 教學課程目錄 (Android Kotlin, IntelliJ IDEA, Android Studio, Android APP 開發教學)

16天記下7000單字

Android Studio 歷代版本下載點

最新入門零基礎 Java 教學【從零開始學 Java 程式設計】Java教學課程目錄 (IntelliJ IDEA 開發教學)