成人午夜视频全免费观看高清-秋霞福利视频一区二区三区-国产精品久久久久电影小说-亚洲不卡区三一区三区一区

flutter高級(jí),flutter高級(jí)課程

Flutter 之 交互

手勢(shì)操作在 Flutter 中分為兩類:

網(wǎng)站建設(shè)哪家好,找創(chuàng)新互聯(lián)公司!專注于網(wǎng)頁(yè)設(shè)計(jì)、網(wǎng)站建設(shè)、微信開發(fā)、微信小程序開發(fā)、集團(tuán)企業(yè)網(wǎng)站建設(shè)等服務(wù)項(xiàng)目。為回饋新老客戶創(chuàng)新互聯(lián)還提供了麻山免費(fèi)建站歡迎大家使用!

第一類是原始的指針事件(Pointer Event),即原生開發(fā)中常見(jiàn)的觸摸事件,表示屏幕上觸摸(或鼠標(biāo)、手寫筆)行為觸發(fā)的位移行為;

第二類則是手勢(shì)識(shí)別(Gesture Detector),表示多個(gè)原始指針事件的組合操作,如點(diǎn)擊、雙擊、長(zhǎng)按等,是指針事件的語(yǔ)義化封裝。

指針事件表示用戶交互的原始觸摸數(shù)據(jù),如手指接觸屏幕 PointerDownEvent、手指在屏幕上移動(dòng) PointerMoveEvent、手指抬起 PointerUpEvent,以及觸摸取消 PointerCancelEvent。在手指接觸屏幕,觸摸事件發(fā)起時(shí),F(xiàn)lutter 會(huì)確定手指與屏幕發(fā)生接觸的位置上究竟有哪些組件,并將觸摸事件交給最內(nèi)層的組件去響應(yīng)。事件會(huì)從這個(gè)最內(nèi)層的組件開始,沿著組件樹向根節(jié)點(diǎn)向上冒泡分發(fā)。通過(guò) hitTestBehavior 去調(diào)整組件在命中測(cè)試期內(nèi)應(yīng)該如何表現(xiàn),比如把觸摸事件交給子組件,或者交給其視圖層級(jí)之下的組件去響應(yīng)。關(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"),// 手勢(shì)按下回調(diào)

onPointerMove:? (event) = print("move $event"),// 手勢(shì)移動(dòng)回調(diào)

onPointerUp:? (event) = print("up $event"),// 手勢(shì)抬起回調(diào)

);

Gesture 是手勢(shì)語(yǔ)義的抽象,而如果我們想從組件層監(jiān)聽手勢(shì),則需要使用 GestureDetector 。GestureDetector 是一個(gè)處理各種高級(jí)用戶觸摸行為的 Widget,與 Listener 一樣,也是一個(gè)功能性組件。

GestureDetector(// 手勢(shì)識(shí)別

? ? child: Container(color: Colors.red,width: 50,height: 50),// 紅色子視圖

? ? onTap: ()=print("Tap"),// 點(diǎn)擊回調(diào)

? ? onDoubleTap: ()=print("Double Tap"),// 雙擊回調(diào)

? ? onLongPress: ()=print("Long Press"),// 長(zhǎng)按回調(diào)

? ? onPanUpdate: (e) {// 拖動(dòng)回調(diào)

? ? ? setState(() {

? ? ? ? // 更新位置

? ? ? ? _left += e.delta.dx;

? ? ? ? _top += e.delta.dy;

? ? ? });

? ? },

? ),

Flutter入門-Dart面向?qū)ο笤?/h2>

Dart作為高級(jí)語(yǔ)言,支持面向?qū)ο蟮暮芏嗵匦?,并且支持基于mixin的繼承方式,基于mixin的繼承方式是指:一個(gè)類可以繼承自多個(gè)父類,相當(dāng)于其他語(yǔ)言里的多繼承。所有的類都有同一個(gè)基類Object,這和特性類似于Java語(yǔ)言,Java所有的類也都是繼承自O(shè)bject,也就是說(shuō)一切皆對(duì)象。

Dart 是一門面向?qū)ο蟮恼Z(yǔ)言, 全部的類都是繼承自 Object , 除了支持傳統(tǒng)的 繼承、封裝、多態(tài) , 還有基于組合(Mixin-based)的繼承特性

類型推導(dǎo)(var/final/const)

var

final和const的區(qū)別

3.非零即真( )

4.字符串

5.集合

Dart中變量初始值為null,即使是int類型也可以是null(java中int默認(rèn)是0, boolean默認(rèn)是false); Dart支持自識(shí)別,可以是用var定義變量,也可以直接指定具體類型; final或者const都可修飾不可變的變量,final變量只能賦值一次,const是編譯時(shí)常量。

int和double是num子類,沒(méi)有float類型; 支持字符串模板,用${expression}的方式來(lái)實(shí)現(xiàn)字符串效果,類似如字符串拼接; String可以使用單引號(hào)或者雙引號(hào); Dart沒(méi)有數(shù)組,只有列表; 其中List,Set,Map不是抽象接口,是具體實(shí)現(xiàn)類,可直接使用; Map的key沒(méi)有指定類型,key類型不一致不會(huì)報(bào)錯(cuò);key不能相同,但是value可以相同,value可以為null。 var name = 'Tom';

方法也是對(duì)象,方法可賦值給一個(gè)變量; 如果方法的參數(shù)是解構(gòu)出來(lái)的可以通過(guò) @required 注解標(biāo)注為必填 const Scrollbar({Key key, @required Widget child}); 支持可選參數(shù),可選命名參數(shù)用{}包圍,可選位置參數(shù)寫在最后并且使用[]包圍 String say(String from, String msg, [String device]); 支持默認(rèn)參數(shù) void enableFlags({bool bold = false, bool hidden = false}) {…}; 以_開頭的方法都是私有的。 void main() {

支持閉包,閉包能夠訪問(wèn)外部方法內(nèi)部的局部變量

1.空替換?? expr1 ?? expr2,如果expr1是non-null,返回其值。否則執(zhí)行expr2并返回其結(jié)果; 2.條件成員訪問(wèn)?.P?.y = 4; 如果p是non-null,則設(shè)置y的值等于4; 3.類型判定操作符(as,is,is!); 4.級(jí)聯(lián)操作,可以在同一個(gè)對(duì)象上連續(xù)調(diào)用多個(gè)函數(shù)以及訪問(wèn)成員變量;

和java不同的是,Dart可以拋出任意類型的對(duì)象; 程序不會(huì)強(qiáng)制要求開發(fā)中處理異常,但若發(fā)生異常,程序會(huì)中斷; 其中異常主要分為Error和Exception兩種類型。

創(chuàng)建對(duì)象可以不使用new關(guān)鍵字; Dart中沒(méi)有public,private,protected這些關(guān)鍵字; 沒(méi)有interfaces關(guān)鍵字,每一個(gè)類都是一個(gè)接口。我們可以用抽象類來(lái)類比java中的接口; Dart把多重繼承的類叫做Mixins。

支持語(yǔ)法糖 Point(this.x, this.y); 每個(gè)實(shí)例變量都會(huì)自動(dòng)生成一個(gè)getter方法,Non-final變量還會(huì)自動(dòng)生成一個(gè)setter; 命名構(gòu)造函數(shù),使用命名構(gòu)造函數(shù)可以為一個(gè)類實(shí)現(xiàn)多個(gè)構(gòu)造函數(shù),也能更加清晰的表明你的意圖;

斷言是如果條件表達(dá)式不滿足則停止代碼執(zhí)行; 斷言只在檢查模式下運(yùn)行有效,如果在生產(chǎn)模式下運(yùn)行則不會(huì)執(zhí)行。

Dart 以兩種模式運(yùn)行: Dart 1.x 有生產(chǎn)模式和檢查模式兩種模式, Dart 2.x 中移除了檢查模式。

注:建議在開發(fā)/測(cè)試模式中使用 檢查模式 運(yùn)行 Dart VM ,因?yàn)樗鼤?huì)添加警告和錯(cuò)誤以幫助開發(fā)和調(diào)試過(guò)程;選中的模式會(huì)強(qiáng)制執(zhí)行各種檢查,例如類型檢查等。

dart標(biāo)識(shí)符可以包括字符和數(shù)字,但不能以 數(shù)字開頭 。

Dart 是一種面向?qū)ο蟮木幊陶Z(yǔ)言。

代碼說(shuō)明:定義了一個(gè)類 TestClass ,這個(gè)類擁有一個(gè)方法 disp() ,方法可以實(shí)現(xiàn)在終端打印字符串 Hello Dart! ,使用 new 關(guān)鍵字創(chuàng)建類的對(duì)象,該對(duì)象調(diào)用方法 disp() 。

關(guān)于dart的學(xué)習(xí)還有很多;我列出如下: Flutter高級(jí)工程師進(jìn)階學(xué)習(xí)資料;需要可以私信我。發(fā)送“核心筆記”或“手冊(cè)”,即可領(lǐng)取資料!

Flutter快速上手10:高級(jí)布局之網(wǎng)格 GridView

用于創(chuàng)建二維網(wǎng)格列表。

GridView.count 是在交叉軸上創(chuàng)建固定個(gè)數(shù)的網(wǎng)格,crossAxisCount為必須的屬性,表示交叉軸網(wǎng)格的個(gè)數(shù),而GridView.extent是在交叉軸上創(chuàng)建最大可容納的網(wǎng)格,maxCrossAxisExtent是必須的屬性,表示交叉軸上網(wǎng)格的最大的寬度。

本地Flutter 2.10.1,Mac版Android Studio Bumblebee | 2021.1.1 Patch 2

我是小栗子,初學(xué)Flutter ,文章會(huì)根據(jù)學(xué)習(xí)進(jìn)度不定時(shí)更新,請(qǐng)多多指教~~

Flutter快速上手11:高級(jí)布局之表格 Table/TableRow

表格布局和線性布局比較相似,只是使用起來(lái)更簡(jiǎn)潔一些。

本地Flutter 2.10.1,Mac版Android Studio Bumblebee | 2021.1.1 Patch 2

我是小栗子,初學(xué)Flutter ,文章會(huì)根據(jù)學(xué)習(xí)進(jìn)度不定時(shí)更新,請(qǐng)多多指教~~

flutter生命周期

Flutter跟安卓的Activity、iOS的ViewController一樣擁有自己的生命周期, Flutter中一切都是Widget,渲染方式有點(diǎn)像H5的DOM樹。

Flutter生命周期可以分為3個(gè)階段:

1、實(shí)例化組件并添加到樹, 即Navigator.push;

2、狀態(tài)變化,即打開新的widget或者依賴的上級(jí)widget發(fā)生變化;

3、從樹中移除, 即Navigator.pop。

在Flutter中Widget都是不可變的, 但實(shí)際上需要根據(jù)對(duì)應(yīng)的狀態(tài)刷新Widget。 從而產(chǎn)生了StatelessWidget和StatefulWdiget, StatefulWidget是由2個(gè)對(duì)象Widget和State組成的。

為什么將State和Widget分開呢?

答案是性能, State管理狀態(tài)(可以理解為Controller),Widget是UI(即View)。 根據(jù)狀態(tài)變化每次生成Widget(即View)可以節(jié)省內(nèi)存,即不必每次創(chuàng)建狀態(tài)對(duì)象State。

構(gòu)造函數(shù):

同其它高級(jí)語(yǔ)言, 只執(zhí)行一次;

initState:

插入到渲染樹時(shí)調(diào)用,只執(zhí)行一次。(類似Android Fragment的onCreateView函數(shù))

didChangeDependencies:

1、在初始化initState后執(zhí)行; 2、顯示/關(guān)閉其它widget。 3、可執(zhí)行多次;

didUpdateWidget:

上級(jí)節(jié)點(diǎn)rebuild widget時(shí), 即上級(jí)組件狀態(tài)發(fā)生變化時(shí)會(huì)觸發(fā)子widget執(zhí)行didUpdateWidget;

deative:

有點(diǎn)像Android的onStop函數(shù), 在打開新的Widget或回到這個(gè)widget時(shí)會(huì)執(zhí)行; 可執(zhí)行多次;

dispose:

類似于Android的onDestroy, 在執(zhí)行Navigator.pop后會(huì)調(diào)用該辦法, 表示組件已銷毀;

reassemble:

點(diǎn)擊閃電會(huì)執(zhí)行,只用于調(diào)試時(shí)的hot reload。 release版本不會(huì)執(zhí)行該函數(shù)。

常見(jiàn)業(yè)務(wù)場(chǎng)景:

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時(shí)跟安卓、iOS的時(shí)序一樣, 都是先處理即將顯示的界面。

activity生命周期和Flutter對(duì)應(yīng)關(guān)系:

Flutter提供了WidgetsBindingObserver來(lái)監(jiān)聽AppLifecycleState, 而AppLifecycleState有4種狀態(tài):

1、 resumed 界面可見(jiàn), 同安卓的onResume。

2、inactive界面退到后臺(tái)或彈出對(duì)話框情況下, 即失去了焦點(diǎn)但仍可以執(zhí)行drawframe回調(diào);同安卓的onPause;

3、paused應(yīng)用掛起,比如退到后臺(tái),失去了焦點(diǎn)且不會(huì)收到drawframe回調(diào);同安卓的onStop;

4、suspending, iOS中沒(méi)用,安卓里就是掛起,不會(huì)再執(zhí)行drawframe回調(diào);

下面是生命周期:

1、初次打開widget時(shí),不執(zhí)行AppLifecycleState的回調(diào);

2、按home鍵或Power鍵, AppLifecycleState inactive----AppLifecycleState pause

3、從后臺(tái)到前臺(tái):AppLifecycleState inactive---ApplifecycleState resumed

4、back鍵退出應(yīng)用: AppLifecycleState inactive---AppLifecycleState paused

網(wǎng)站題目:flutter高級(jí),flutter高級(jí)課程
本文來(lái)源:http://jinyejixie.com/article22/dsdiicc.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供、網(wǎng)站營(yíng)銷、靜態(tài)網(wǎng)站品牌網(wǎng)站建設(shè)網(wǎng)站導(dǎo)航、全網(wǎng)營(yíng)銷推廣

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

成都網(wǎng)站建設(shè)
巴林左旗| 舞阳县| 宝山区| 临漳县| 南康市| 休宁县| 梅河口市| 宁化县| 黄浦区| 临漳县| 沽源县| 松潘县| 石河子市| 凉山| 都兰县| 阳山县| 青海省| 六盘水市| 宿迁市| 刚察县| 林西县| 石门县| 赞皇县| 瑞昌市| 厦门市| 惠东县| 宜宾县| 崇信县| 广平县| 莎车县| 麻阳| 阜平县| 沧州市| 牙克石市| 彭州市| 长垣县| 云和县| 甘南县| 恭城| 泸西县| 定南县|