flutter的widget是區分有狀態和無狀態的,也就是說在無狀態的widget中,我們不可以對widget進行修改變動,而在有狀態的widget中,我們可以進行狀態的修改,也就是說我們可以通過使用setState對widget進行一些數據、樣式的修改。
- 有些widgets是有狀態的, 有些是無狀態的
- 如果用戶與widget交互,widget會發生變化,那麼它就是有狀態的.
- widget的狀態(state)是一些可以更改的值, 如一個slider滑動條的當前值或checkbox是否被選中.
- widget的狀態保存在一個State對象中, 它和widget的佈局顯示分離。
- 當widget狀態改變時, State 對象調用
setState()
, 告訴框架去重繪widget.
widget本身可以處理自己的狀態數據,也可以通過父widget,那麼如何使用setState進行widgets重繪呢?
- 首先我們要創建一個StatefullWidget的子類,生成一個有狀態的widget。
- 之後我們要創建一個State子類,並在有狀態widget類中進行返回,來對widget的狀態進行管理。
- 最後,將創建的有狀態子類插入主Widget中
下面是最簡單的代碼,看看也就明白了。
import 'package:flutter/material.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
// 主方法
@override
Widget build(BuildContext context) {
return StateTest();
}
}
/**
* 有狀態Widget
*/
class StateTest extends StatefulWidget {
@override
State<StatefulWidget> createState() {
return _StatetTextState();
}
}
/**
* State類
*/
class _StatetTextState extends State<StateTest> {
bool _light = false;
@override
Widget build(BuildContext context) {
return Container(
child: GestureDetector(
onTap: () {
print('點擊了'+_light.toString());
setState(() {
_light = true;
});
},
child: Text(
'Hello World!',
textDirection: TextDirection.ltr,
),
),
);
}
}
結束語