Flutter學(xué)習(xí):用戶交互

flutter用戶交互,首先了解一下StatelessWidget(無狀態(tài))和StatefulWidget(有狀態(tài))這兩個(gè)類,在與用戶交互時(shí),我們選擇有狀態(tài)的,需要繼承StatefulWidget,具體步驟如下:

class TestStatefulWidget extends StatefulWidget{
  @override
  State<StatefulWidget> createState() {
    // TODO: implement createState
    return null;
  }
}

class TestWidget extends State<TestStatefulWidget>{
  @override
  Widget build(BuildContext context) {
    // TODO: implement build
    return null;
  }
}

對于如何管理Widget的狀態(tài),一般有以下兩種:
1.通過widget管理自己的狀態(tài)。

class TestStatefulWidget extends StatefulWidget {
  @override
  State<StatefulWidget> createState() => TestWidget();
}
class TestWidget extends State<TestStatefulWidget> {
  bool active;
  @override
  void initState() {
    // TODO: implement initState
    super.initState();
    active = false;
  }
  _halde() {
    setState(() {
      active = !active;
    });
  }
  @override
  Widget build(BuildContext context) {
    // TODO: implement build
    return GestureDetector(
      onTap: _halde,
      child: new Container(
        child: Text(
          active ? "hello world1" : "hello world hello world",
          style: TextStyle(fontSize: 50),
        ),
      ),
    );
  }
}

2.父widget管理widget的狀態(tài),父組件告訴Widget何時(shí)更新。

class TestStatefulWidget extends StatefulWidget {
  @override
  State<StatefulWidget> createState() => TestWidget();
}

class TestWidget extends State<TestStatefulWidget> {
  bool active;
  @override
  void initState() {
    // TODO: implement initState
    super.initState();
    active = false;
  }
  void _halde(bool newActive) {
    setState(() {
      active = newActive;
    });
  }
  @override
  Widget build(BuildContext context) {
    // TODO: implement build
    return new Container(
      child: new TestChildrenWidget(
        active: active,
        onChanged: _halde,
      ),
    );
  }
}
class TestChildrenWidget extends StatelessWidget{
  bool active;
  ValueChanged<bool> onChanged;//接收一個(gè)參數(shù)的用戶回調(diào)
  TestChildrenWidget({Key key,this.active:false,@required this.onChanged}):super(key:key);
  void _haldleTab(){
    onChanged(!active);
  }
  @override
  Widget build(BuildContext context) {
    // TODO: implement build
    return new GestureDetector(
      onTap: _haldleTab,
      child: new Container(
        child: Text(
          active ? "hello world1" : "hello world hello world",
          style: TextStyle(fontSize: 100),
        ),
      ),
    );
  }
}

3.混合管理:在開發(fā)中,一般根據(jù)需求,通過自己管理或父Widget來管理自己的狀態(tài)。

Flutter的基本手勢。

flutter的基本手勢指令都在GestureDetector中,有

點(diǎn)擊
onTapDown 指針已經(jīng)在特定位置與屏幕接觸
onTapUp 指針停止在特定位置與屏幕接觸
onTap tap事件觸發(fā)
onTapCancel 先前指針觸發(fā)的onTapDown不會在觸發(fā)tap事件
雙擊
onDoubleTap 用戶快速連續(xù)兩次在同一位置輕敲屏幕.
長按
onLongPress 指針在相同位置長時(shí)間保持與屏幕接觸
垂直拖動
onVerticalDragStart 指針已經(jīng)與屏幕接觸并可能開始垂直移動
onVerticalDragUpdate 指針與屏幕接觸并已沿垂直方向移動.
onVerticalDragEnd 先前與屏幕接觸并垂直移動的指針不再與屏幕接觸,并且在停止接觸屏幕時(shí)以特定速度移動
水平拖動
onHorizontalDragStart 指針已經(jīng)接觸到屏幕并可能開始水平移動
onHorizontalDragUpdate 指針與屏幕接觸并已沿水平方向移動
onHorizontalDragEnd 先前與屏幕接觸并水平移動的指針不再與屏幕接觸,并在停止接觸屏幕時(shí)以特定速度移動
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 原文在此,此處只為學(xué)習(xí) Widget與ElementWidget主要接口Stateless WidgetState...
    lltree閱讀 4,626評論 0 1
  • 作者: Mike Bluestein | 譯:孫印鳳 原文地址: [https://www.smashingmag...
    格老子閱讀 3,557評論 0 6
  • 如何安裝 Flutter 請點(diǎn)擊這里 1、Flutter 是什么? Flutter是一款移動應(yīng)用程序SDK,包含框...
    大王叫我來巡山_Cong閱讀 1,570評論 0 9
  • 我還是相信這世間有純粹的感情。 不要妄圖去改變一個(gè)男人,你不是圣母也不是華佗再世。也不要去迎合某人,生命太短暫,應(yīng)...
    yojazz_f閱讀 184評論 0 0
  • “如果我把你真當(dāng)成年人對待,你是不是也會給予我同等的尊重……”這么雞湯又稍微有點(diǎn)凄涼的話,竟然是一家上市公司的公司...
    Ciel天閱讀 399評論 0 1

友情鏈接更多精彩內(nèi)容