flutter入坑,如何使用setState修改widget狀態?

flutter的widget是區分有狀態和無狀態的,也就是說在無狀態的widget中,我們不可以對widget進行修改變動,而在有狀態的widget中,我們可以進行狀態的修改,也就是說我們可以通過使用setState對widget進行一些數據、樣式的修改。

  1. 有些widgets是有狀態的, 有些是無狀態的
  2. 如果用戶與widget交互,widget會發生變化,那麼它就是有狀態的.
  3. widget的狀態(state)是一些可以更改的值, 如一個slider滑動條的當前值或checkbox是否被選中.
  4. widget的狀態保存在一個State對象中, 它和widget的佈局顯示分離。
  5. 當widget狀態改變時, State 對象調用setState(), 告訴框架去重繪widget.

widget本身可以處理自己的狀態數據,也可以通過父widget,那麼如何使用setState進行widgets重繪呢?

  1. 首先我們要創建一個StatefullWidget的子類,生成一個有狀態的widget。
  2. 之後我們要創建一個State子類,並在有狀態widget類中進行返回,來對widget的狀態進行管理。
  3. 最後,將創建的有狀態子類插入主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,
        ),
      ),
    );
  }
}

結束語

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章