手勢操作在 Flutter 中分為兩類:
網(wǎng)站建設(shè)哪家好,找創(chuàng)新互聯(lián)公司!專注于網(wǎng)頁設(shè)計、網(wǎng)站建設(shè)、微信開發(fā)、微信小程序開發(fā)、集團企業(yè)網(wǎng)站建設(shè)等服務項目。為回饋新老客戶創(chuàng)新互聯(lián)還提供了麻山免費建站歡迎大家使用!
第一類是原始的指針事件(Pointer Event),即原生開發(fā)中常見的觸摸事件,表示屏幕上觸摸(或鼠標、手寫筆)行為觸發(fā)的位移行為;
第二類則是手勢識別(Gesture Detector),表示多個原始指針事件的組合操作,如點擊、雙擊、長按等,是指針事件的語義化封裝。
指針事件表示用戶交互的原始觸摸數(shù)據(jù),如手指接觸屏幕 PointerDownEvent、手指在屏幕上移動 PointerMoveEvent、手指抬起 PointerUpEvent,以及觸摸取消 PointerCancelEvent。在手指接觸屏幕,觸摸事件發(fā)起時,F(xiàn)lutter 會確定手指與屏幕發(fā)生接觸的位置上究竟有哪些組件,并將觸摸事件交給最內(nèi)層的組件去響應。事件會從這個最內(nèi)層的組件開始,沿著組件樹向根節(jié)點向上冒泡分發(fā)。通過 hitTestBehavior 去調(diào)整組件在命中測試期內(nèi)應該如何表現(xiàn),比如把觸摸事件交給子組件,或者交給其視圖層級之下的組件去響應。關(guān)于組件層面的原始指針事件的監(jiān)聽,F(xiàn)lutter 提供了 Listener Widget,可以監(jiān)聽其子 Widget 的原始指針事件。
Listener(
child: Container(
color: Colors.black,
width: 300,
height: 300,
),
onPointerDown: (event) = print("down $event"),// 手勢按下回調(diào)
onPointerMove:? (event) = print("move $event"),// 手勢移動回調(diào)
onPointerUp:? (event) = print("up $event"),// 手勢抬起回調(diào)
);
Gesture 是手勢語義的抽象,而如果我們想從組件層監(jiān)聽手勢,則需要使用 GestureDetector 。GestureDetector 是一個處理各種高級用戶觸摸行為的 Widget,與 Listener 一樣,也是一個功能性組件。
GestureDetector(// 手勢識別
? ? child: Container(color: Colors.red,width: 50,height: 50),// 紅色子視圖
? ? onTap: ()=print("Tap"),// 點擊回調(diào)
? ? onDoubleTap: ()=print("Double Tap"),// 雙擊回調(diào)
? ? onLongPress: ()=print("Long Press"),// 長按回調(diào)
? ? onPanUpdate: (e) {// 拖動回調(diào)
? ? ? setState(() {
? ? ? ? // 更新位置
? ? ? ? _left += e.delta.dx;
? ? ? ? _top += e.delta.dy;
? ? ? });
? ? },
? ),
Dart作為高級語言,支持面向?qū)ο蟮暮芏嗵匦?,并且支持基于mixin的繼承方式,基于mixin的繼承方式是指:一個類可以繼承自多個父類,相當于其他語言里的多繼承。所有的類都有同一個基類Object,這和特性類似于Java語言,Java所有的類也都是繼承自O(shè)bject,也就是說一切皆對象。
Dart 是一門面向?qū)ο蟮恼Z言, 全部的類都是繼承自 Object , 除了支持傳統(tǒng)的 繼承、封裝、多態(tài) , 還有基于組合(Mixin-based)的繼承特性
類型推導(var/final/const)
var
final和const的區(qū)別
3.非零即真( )
4.字符串
5.集合
Dart中變量初始值為null,即使是int類型也可以是null(java中int默認是0, boolean默認是false); Dart支持自識別,可以是用var定義變量,也可以直接指定具體類型; final或者const都可修飾不可變的變量,final變量只能賦值一次,const是編譯時常量。
int和double是num子類,沒有float類型; 支持字符串模板,用${expression}的方式來實現(xiàn)字符串效果,類似如字符串拼接; String可以使用單引號或者雙引號; Dart沒有數(shù)組,只有列表; 其中List,Set,Map不是抽象接口,是具體實現(xiàn)類,可直接使用; Map的key沒有指定類型,key類型不一致不會報錯;key不能相同,但是value可以相同,value可以為null。 var name = 'Tom';
方法也是對象,方法可賦值給一個變量; 如果方法的參數(shù)是解構(gòu)出來的可以通過 @required 注解標注為必填 const Scrollbar({Key key, @required Widget child}); 支持可選參數(shù),可選命名參數(shù)用{}包圍,可選位置參數(shù)寫在最后并且使用[]包圍 String say(String from, String msg, [String device]); 支持默認參數(shù) void enableFlags({bool bold = false, bool hidden = false}) {…}; 以_開頭的方法都是私有的。 void main() {
支持閉包,閉包能夠訪問外部方法內(nèi)部的局部變量
1.空替換?? expr1 ?? expr2,如果expr1是non-null,返回其值。否則執(zhí)行expr2并返回其結(jié)果; 2.條件成員訪問?.P?.y = 4; 如果p是non-null,則設(shè)置y的值等于4; 3.類型判定操作符(as,is,is!); 4.級聯(lián)操作,可以在同一個對象上連續(xù)調(diào)用多個函數(shù)以及訪問成員變量;
和java不同的是,Dart可以拋出任意類型的對象; 程序不會強制要求開發(fā)中處理異常,但若發(fā)生異常,程序會中斷; 其中異常主要分為Error和Exception兩種類型。
創(chuàng)建對象可以不使用new關(guān)鍵字; Dart中沒有public,private,protected這些關(guān)鍵字; 沒有interfaces關(guān)鍵字,每一個類都是一個接口。我們可以用抽象類來類比java中的接口; Dart把多重繼承的類叫做Mixins。
支持語法糖 Point(this.x, this.y); 每個實例變量都會自動生成一個getter方法,Non-final變量還會自動生成一個setter; 命名構(gòu)造函數(shù),使用命名構(gòu)造函數(shù)可以為一個類實現(xiàn)多個構(gòu)造函數(shù),也能更加清晰的表明你的意圖;
斷言是如果條件表達式不滿足則停止代碼執(zhí)行; 斷言只在檢查模式下運行有效,如果在生產(chǎn)模式下運行則不會執(zhí)行。
Dart 以兩種模式運行: Dart 1.x 有生產(chǎn)模式和檢查模式兩種模式, Dart 2.x 中移除了檢查模式。
注:建議在開發(fā)/測試模式中使用 檢查模式 運行 Dart VM ,因為它會添加警告和錯誤以幫助開發(fā)和調(diào)試過程;選中的模式會強制執(zhí)行各種檢查,例如類型檢查等。
dart標識符可以包括字符和數(shù)字,但不能以 數(shù)字開頭 。
Dart 是一種面向?qū)ο蟮木幊陶Z言。
代碼說明:定義了一個類 TestClass ,這個類擁有一個方法 disp() ,方法可以實現(xiàn)在終端打印字符串 Hello Dart! ,使用 new 關(guān)鍵字創(chuàng)建類的對象,該對象調(diào)用方法 disp() 。
關(guān)于dart的學習還有很多;我列出如下: Flutter高級工程師進階學習資料;需要可以私信我。發(fā)送“核心筆記”或“手冊”,即可領(lǐng)取資料!
用于創(chuàng)建二維網(wǎng)格列表。
GridView.count 是在交叉軸上創(chuàng)建固定個數(shù)的網(wǎng)格,crossAxisCount為必須的屬性,表示交叉軸網(wǎng)格的個數(shù),而GridView.extent是在交叉軸上創(chuàng)建最大可容納的網(wǎng)格,maxCrossAxisExtent是必須的屬性,表示交叉軸上網(wǎng)格的最大的寬度。
本地Flutter 2.10.1,Mac版Android Studio Bumblebee | 2021.1.1 Patch 2
我是小栗子,初學Flutter ,文章會根據(jù)學習進度不定時更新,請多多指教~~
表格布局和線性布局比較相似,只是使用起來更簡潔一些。
本地Flutter 2.10.1,Mac版Android Studio Bumblebee | 2021.1.1 Patch 2
我是小栗子,初學Flutter ,文章會根據(jù)學習進度不定時更新,請多多指教~~
Flutter跟安卓的Activity、iOS的ViewController一樣擁有自己的生命周期, Flutter中一切都是Widget,渲染方式有點像H5的DOM樹。
Flutter生命周期可以分為3個階段:
1、實例化組件并添加到樹, 即Navigator.push;
2、狀態(tài)變化,即打開新的widget或者依賴的上級widget發(fā)生變化;
3、從樹中移除, 即Navigator.pop。
在Flutter中Widget都是不可變的, 但實際上需要根據(jù)對應的狀態(tài)刷新Widget。 從而產(chǎn)生了StatelessWidget和StatefulWdiget, StatefulWidget是由2個對象Widget和State組成的。
為什么將State和Widget分開呢?
答案是性能, State管理狀態(tài)(可以理解為Controller),Widget是UI(即View)。 根據(jù)狀態(tài)變化每次生成Widget(即View)可以節(jié)省內(nèi)存,即不必每次創(chuàng)建狀態(tài)對象State。
構(gòu)造函數(shù):
同其它高級語言, 只執(zhí)行一次;
initState:
插入到渲染樹時調(diào)用,只執(zhí)行一次。(類似Android Fragment的onCreateView函數(shù))
didChangeDependencies:
1、在初始化initState后執(zhí)行; 2、顯示/關(guān)閉其它widget。 3、可執(zhí)行多次;
didUpdateWidget:
上級節(jié)點rebuild widget時, 即上級組件狀態(tài)發(fā)生變化時會觸發(fā)子widget執(zhí)行didUpdateWidget;
deative:
有點像Android的onStop函數(shù), 在打開新的Widget或回到這個widget時會執(zhí)行; 可執(zhí)行多次;
dispose:
類似于Android的onDestroy, 在執(zhí)行Navigator.pop后會調(diào)用該辦法, 表示組件已銷毀;
reassemble:
點擊閃電會執(zhí)行,只用于調(diào)試時的hot reload。 release版本不會執(zhí)行該函數(shù)。
常見業(yè)務場景:
Widget A打開Widget B: Navigator.push(B)
B構(gòu)造函數(shù)---B initState---B didChangeDependencies---B build---A deactive---A didChangeDependencies.
Widget B退出: Navigator.pop
A deactive---A didChangeDependencies---A build---B deactive---B dispose
可以看出, Flutter打開、關(guān)閉Widget時跟安卓、iOS的時序一樣, 都是先處理即將顯示的界面。
activity生命周期和Flutter對應關(guān)系:
Flutter提供了WidgetsBindingObserver來監(jiān)聽AppLifecycleState, 而AppLifecycleState有4種狀態(tài):
1、 resumed 界面可見, 同安卓的onResume。
2、inactive界面退到后臺或彈出對話框情況下, 即失去了焦點但仍可以執(zhí)行drawframe回調(diào);同安卓的onPause;
3、paused應用掛起,比如退到后臺,失去了焦點且不會收到drawframe回調(diào);同安卓的onStop;
4、suspending, iOS中沒用,安卓里就是掛起,不會再執(zhí)行drawframe回調(diào);
下面是生命周期:
1、初次打開widget時,不執(zhí)行AppLifecycleState的回調(diào);
2、按home鍵或Power鍵, AppLifecycleState inactive----AppLifecycleState pause
3、從后臺到前臺:AppLifecycleState inactive---ApplifecycleState resumed
4、back鍵退出應用: AppLifecycleState inactive---AppLifecycleState paused
網(wǎng)站題目:flutter高級,flutter高級課程
本文來源:http://chinadenli.net/article22/dsdiicc.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供、網(wǎng)站營銷、靜態(tài)網(wǎng)站、品牌網(wǎng)站建設(shè)、網(wǎng)站導航、全網(wǎng)營銷推廣
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)