重慶分公司,新征程啟航
為企業(yè)提供網(wǎng)站建設(shè)、域名注冊(cè)、服務(wù)器等服務(wù)
為企業(yè)提供網(wǎng)站建設(shè)、域名注冊(cè)、服務(wù)器等服務(wù)
主要屬性
成都創(chuàng)新互聯(lián)從2013年成立,是專業(yè)互聯(lián)網(wǎng)技術(shù)服務(wù)公司,擁有項(xiàng)目成都網(wǎng)站建設(shè)、網(wǎng)站制作網(wǎng)站策劃,項(xiàng)目實(shí)施與項(xiàng)目整合能力。我們以讓每一個(gè)夢(mèng)想脫穎而出為使命,1280元華容做網(wǎng)站,已為上家服務(wù),為華容各地企業(yè)和個(gè)人服務(wù),聯(lián)系電話:18982081108
//創(chuàng)建一個(gè)帶 title 的 item
//通過傳入 length 多少個(gè)來創(chuàng)建多少個(gè) item
手勢操作在 Flutter 中分為兩類:
第一類是原始的指針事件(Pointer Event),即原生開發(fā)中常見的觸摸事件,表示屏幕上觸摸(或鼠標(biāo)、手寫筆)行為觸發(fā)的位移行為;
第二類則是手勢識(shí)別(Gesture Detector),表示多個(gè)原始指針事件的組合操作,如點(diǎn)擊、雙擊、長按等,是指針事件的語義化封裝。
指針事件表示用戶交互的原始觸摸數(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ā)。通過 hitTestBehavior 去調(diào)整組件在命中測試期內(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"),// 手勢按下回調(diào)
onPointerMove:? (event) = print("move $event"),// 手勢移動(dòng)回調(diào)
onPointerUp:? (event) = print("up $event"),// 手勢抬起回調(diào)
);
Gesture 是手勢語義的抽象,而如果我們想從組件層監(jiān)聽手勢,則需要使用 GestureDetector 。GestureDetector 是一個(gè)處理各種高級(jí)用戶觸摸行為的 Widget,與 Listener 一樣,也是一個(gè)功能性組件。
GestureDetector(// 手勢識(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"),// 長按回調(diào)
? ? onPanUpdate: (e) {// 拖動(dòng)回調(diào)
? ? ? setState(() {
? ? ? ? // 更新位置
? ? ? ? _left += e.delta.dx;
? ? ? ? _top += e.delta.dy;
? ? ? });
? ? },
? ),
[img]Flutter是Google開發(fā)的新一代跨平臺(tái)方案,F(xiàn)lutter可以實(shí)現(xiàn)寫一份代碼同時(shí)運(yùn)行在iOS和Android設(shè)備上,并且提供很好的性能體驗(yàn)。Flutter使用Dart作為開發(fā)語言,這是一門簡潔、強(qiáng)類型的編程語言。Flutter對(duì)于iOS和Android設(shè)備,提供了兩套視覺庫,可以針對(duì)不同的平臺(tái)有不同的展示效果。
Flutter原本是為了解決Web開發(fā)中的一些問題,而開發(fā)的一套精簡版Web框架,擁有獨(dú)立的渲染引擎和開發(fā)語言,但后來逐漸演變?yōu)橐苿?dòng)端開發(fā)框架。正是由于Dart當(dāng)初的定位是為了替代JS成為Web框架,所以Dart的語法更接近于JS語法。例如定義對(duì)象構(gòu)建方法,以及實(shí)例化對(duì)象的方式等。
在Google剛推出Flutter時(shí),其發(fā)展很緩慢,終于在18年發(fā)布第一個(gè)Bate版之后迎來了爆發(fā)性增長,發(fā)布第一個(gè)Release版時(shí)增長速度更快。可以從Github上Star數(shù)據(jù)看出來這個(gè)增長的過程。在19年最新的Flutter 1.2版本中,已經(jīng)開放Web支持的Beta版。
Flutter不僅僅提供了一套視覺庫,在Flutter整體框架中包含各個(gè)層級(jí)階段的庫。例如實(shí)現(xiàn)一個(gè)游戲功能,上面一些游戲控件可以用上層視覺庫,底層游戲可以直接基于Flutter的底層庫進(jìn)行開發(fā),而不需要調(diào)用原生應(yīng)用的底層庫。Flutter的底層庫是基于Open GL實(shí)現(xiàn)的,所以O(shè)pen GL可以做的Flutter都可以。
Dart的 IO 庫包含了文件讀寫的相關(guān)類,它屬于 Dart 語法標(biāo)準(zhǔn)的一部分,所以通過 Dart IO 庫,無論是 Dart VM 下的腳本還是 Flutter,都是通過 Dart IO 庫來操作文件的,不過和 Dart VM 相比,F(xiàn)lutter 有一個(gè)重要差異是文件系統(tǒng)路徑不同,這是因?yàn)镈art VM 是運(yùn)行在 PC 或服務(wù)器操作系統(tǒng)下,而 Flutter 是運(yùn)行在移動(dòng)操作系統(tǒng)中,他們的文件系統(tǒng)會(huì)有一些差異。
Android 和 iOS 的應(yīng)用存儲(chǔ)目錄不同, PathProvider 插件提供了一種平臺(tái)透明的方式來訪問設(shè)備文件系統(tǒng)上的常用位置。該類當(dāng)前支持訪問兩個(gè)文件系統(tǒng)位置:
File代表一個(gè)整體的文件,他有三個(gè)構(gòu)造函數(shù),分別是:
文件讀取本身有兩種形式,一種是文本,一種是二進(jìn)制。
2.2.1 讀取文本內(nèi)容
如果是文本文件,F(xiàn)ile提供了readAsString、readAsLines、readAsStringSync、readAsLinesSync方法,讀取文本內(nèi)容
readAsString 一次性讀取所有文本
readAsLines 一行行的讀取文本
結(jié)果返回的是一個(gè)List,list中表示文件每行的內(nèi)容
readAsStringSync、readAsLinesSync同步讀取文本
2.2.2 讀取二進(jìn)制內(nèi)容
如果文件是二進(jìn)制,那么可以使用readAsBytes或者同步的方法readAsBytesSync:
dart中表示二進(jìn)制有一個(gè)專門的類型叫做Uint8List,他實(shí)際上表示的是一個(gè)int的List。
上面提到的讀取方式,都是一次性讀取整個(gè)文件,缺點(diǎn)就是如果文件太大的話,可能造成內(nèi)存空間的壓力。
所以File為我們提供了另外一種讀取文件的方法,流的形式來讀取文件.
示例
dart提供了open和openSync兩個(gè)方法來進(jìn)行隨機(jī)文件讀寫:
寫入和文件讀取一樣,可以一次性寫入或者獲得一個(gè)寫入句柄,然后再寫入。
一次性寫入的方法有四種,分別對(duì)應(yīng)字符串和二進(jìn)制
句柄形式可以調(diào)用openWrite方法,返回一個(gè)IOSink對(duì)象,然后通過這個(gè)對(duì)象進(jìn)行寫入:
默認(rèn)情況下寫入是會(huì)覆蓋整個(gè)文件的,但是可以通過下面的方式來更改寫入模式:
雖然dart中所有的異常都是運(yùn)行時(shí)異常,但是和java一樣,要想手動(dòng)處理文件讀寫中的異常,則可以使用try,catch:
我們還是以計(jì)數(shù)器為例,實(shí)現(xiàn)在應(yīng)用退出重啟后可以恢復(fù)點(diǎn)擊次數(shù)。 這里,我們使用文件來保存數(shù)據(jù):
1.引入PathProvider插件;在pubspec.yaml文件中添加如下聲明:
執(zhí)行 flutter pub get
2.實(shí)現(xiàn)如下
參考: