Hello Flutter! The Concept of Widget and State.

York Chen
4 min readNov 25, 2020

--

第一個APP,從 main()開始

Flutter從main function開始執行runApp這個function。
runApp()會將給定的widget填滿整個螢幕畫面,一般會傳遞的一個MyApp widget物件。

void main() => runApp(MyApp());

直接執行一個widget

runApp()會將給定的widget填滿整個螢幕畫面,這裡則是直接執行一個Center widget填滿畫面。

Center是一個widget,讓child(Text widget)置中
Text,用來顯示文字,這裡需額外設定textDirection文字方向為由左至右,

import 'package:flutter/material.dart';void main() => runApp(Center(
child: Text(
'Hello Flutter',
textDirection: TextDirection.ltr,
)));

Widget

Flutter裡所有看得到的畫面元件都是Widget。
widget組成APP的樹狀結構,樹狀中有父子關係(parent Widget and children Widgets)

一個常見的樹狀結構:

圖片來源:flutter-community Widget — State — BuildContext — InheritedWidget

BuildContext

Context是Widget樹狀結構中,其中一個Widget下的一組Widge(parent Widget下有多個children Widgets)。
context作為 Widget 樹狀結構的一部分,當APP畫面呈現時,這組Widge被參照引用。

widget有兩種,StatelessWidget和StatefulWidget

StatelessWidget是一般靜態的Widget

資料依賴父節點提供,一旦建立就不會有任何變化
典型的 Widget包含Text、Row、Column 和 Container 等,只在創建時將一些參數資料傳遞給它們來創建。
參數包含尺寸、顏色、文字等等
stateless widget 只有在 loaded/built 時才會重繪一次,任何事件、使用者操作都無法改變Widget

StatefulWidget是動態更新的Widget

它有State的生命週期,可以讓Widget產生變化

例如官方範例的計數器就是個StatefulWidget
數字會根據使用者點擊按鈕而逐漸累加

在網頁前端中常作的接API>拿到資料>tableView reloadData
要在Flutter APP實現的話,就會用到StatefulWidget

State 生命週期

State關係到APP的畫面呈現(Layout)和使用者的行為操作(behavior)
藉由State的改變來Build App呈現的 Context

生命週期圖

圖片來源:flutter-community Widget — State — BuildContext — InheritedWidget

createState()

要建立StatefulWidget時,需要呼叫

initState()

生命週期的第一個階段,只會被呼叫一次
要覆寫使用時,要使用super.initState()來覆寫

didChangeDependencies

生命週期的第二個階段
initState()後,會被呼叫

Context地lWidget準備被取用

Inherited的Widget畫面或資料發生變化時,會被呼叫。
要覆寫使用時,要使用super.didChangeDependencies()來覆寫

Build(Context)

didChangeDependencies() 和didUpdateWidget後被呼叫
用來建構畫面

didUpdateWidget()

第一次build後,Widget State改變時會被呼叫。
hot reload後,會被呼叫。

移除與離開畫面

deactivate()

當State移除時被呼叫,例如切換畫面

dispose()

永久摧毀畫面時,被呼叫

參考資料

Widget — State — BuildContext — InheritedWidge

Flutterの基礎

--

--

York Chen
York Chen

Written by York Chen

Cooking is an indispensable part of life. It is a taste that can’t be forgotten.

No responses yet