亚洲有码Av一区二区三区_国产高清啪啪免费视频_69色视频国产_国产成人人人爆出白浆_国产精品自在线拍国_一本久久伊人热热精品无码_午夜性刺激在线看免费带字幕_助力高品质欧美狂喷水_亚洲精品日韩无码_精品无码一区二区三区蜜臀_麻豆高清国产AV_熟妇人素无码中文字幕_亚洲a级片在线观看_国产欧美日韩三区_99国产成人高清在线观看

ARTICLE DETAIL

資訊詳情

深耕商務(wù)建站與企業(yè)官網(wǎng)運(yùn)營(yíng)的一線實(shí)戰(zhàn)洞察。

Flutter for OpenHarmony實(shí)戰(zhàn):護(hù)理服務(wù)跨端適配與狀態(tài)管理

Flutter for OpenHarmony實(shí)戰(zhàn):護(hù)理服務(wù)跨端適配與狀態(tài)管理 1. 養(yǎng)老護(hù)理場(chǎng)景里的硬需求為什么這塊硬骨頭選了Flutter先說(shuō)項(xiàng)目背景。我所在的團(tuán)隊(duì)接手了一個(gè)現(xiàn)代智慧養(yǎng)老平臺(tái)其中一塊核心業(yè)務(wù)是護(hù)理服務(wù)護(hù)理員需要在自己手邊的設(shè)備上查看當(dāng)日任務(wù)、完成上門簽到、采集老人健康數(shù)據(jù)、上報(bào)護(hù)理記錄遇到突發(fā)狀況還要能一鍵觸發(fā)SOS呼叫。設(shè)備形態(tài)很雜有老人家里的固定終端、護(hù)理員隨身攜帶的平板、管理端的大屏其中固定終端和平板預(yù)裝的是OpenHarmony系統(tǒng)。這就意味著我們沒(méi)法只寫一套Android App就收工必須直面OpenHarmony上能不能跑起來(lái)、跑得順不順的問(wèn)題。當(dāng)時(shí)擺在面前的有三條路一是用ArkTS原生重寫一套二是讓Android APK直接兼容運(yùn)行三就是標(biāo)題里這條路線——Flutter for OpenHarmony用一套Flutter代碼同時(shí)覆蓋Android、iOS和OpenHarmony三個(gè)平臺(tái)。先解釋一下為什么ArkTS原生不是首選。項(xiàng)目里的業(yè)務(wù)邏輯不是一個(gè)頁(yè)面放兩個(gè)按鈕這么簡(jiǎn)單護(hù)理任務(wù)流轉(zhuǎn)、排班、工單狀態(tài)機(jī)、健康數(shù)據(jù)圖表這些模塊加起來(lái)有幾十個(gè)頁(yè)面如果全用ArkTS重寫至少要多養(yǎng)一個(gè)前端團(tuán)隊(duì)而且后續(xù)Android端和鴻蒙端的業(yè)務(wù)要維護(hù)兩套邏輯迭代效率會(huì)非常難受。Android APK直接兼容運(yùn)行這個(gè)方案聽(tīng)起來(lái)省事但實(shí)際在OpenHarmony設(shè)備上跑遇到高版本SDK的API差異、權(quán)限模型不一致、以及部分傳感器和藍(lán)牙服務(wù)拿不到數(shù)據(jù)排查成本反而比直接適配更高。于是我們認(rèn)真評(píng)估了Flutter for OpenHarmony這條路。Flutter本身是跨平臺(tái)UI框架Framework層和Engine層跟底層操作系統(tǒng)解耦只要社區(qū)和OpenHarmony官方把Embedder層的適配做扎實(shí)業(yè)務(wù)層的Dart代碼幾乎不用動(dòng)。事實(shí)也確實(shí)如此Flutter社區(qū)針對(duì)OpenHarmony的適配已經(jīng)能支撐日常業(yè)務(wù)開發(fā)我們最終確定用Flutter寫業(yè)務(wù)同時(shí)按需保留少量原生通道去調(diào)用系統(tǒng)能力比如撥打SOS電話、讀取定位、調(diào)用藍(lán)牙采集設(shè)備數(shù)據(jù)。這篇文章里我會(huì)把護(hù)理服務(wù)模塊從環(huán)境搭建、平臺(tái)適配到核心功能實(shí)現(xiàn)的完整鏈路講一遍重點(diǎn)放在EventChannel原生日志流、Cubit狀態(tài)管理方案、以及頁(yè)面切換狀態(tài)保留這幾個(gè)容易被坑的地方。如果你也在做OpenHarmony上的跨端應(yīng)用或者你所在團(tuán)隊(duì)正準(zhǔn)備把存量Flutter工程往鴻蒙生態(tài)上遷移這篇文章應(yīng)該能幫你少踩幾個(gè)真實(shí)的坑。2. Flutter for OpenHarmony的適配深度從環(huán)境搭建到工程結(jié)構(gòu)2.1 環(huán)境搭建里最容易被忽略的三個(gè)細(xì)節(jié)網(wǎng)上講Flutter安裝的教程一抓一大把但Flutter for OpenHarmony的環(huán)境搭建跟普通Flutter有幾個(gè)關(guān)鍵差異不是簡(jiǎn)簡(jiǎn)單單裝個(gè)SDK就能跑。第一OpenHarmony側(cè)需要安裝完整的SDK和配套工具鏈。它不是Android SDK那套需要用DevEco Studio來(lái)管理OpenHarmony SDK路徑和配置方式都不同。我們的實(shí)際做法是先把DevEco Studio裝好確認(rèn)里面的SDK能編譯出一個(gè)空工程再回過(guò)頭配置Flutter命令行。第二OpenHarmony SDK版本要與Flutter適配版本匹配。Flutter官方主分支對(duì)OpenHarmony的適配版本有對(duì)應(yīng)關(guān)系我們?cè)陧?xiàng)目里遇到過(guò)Flutter版本升級(jí)后工程能編譯但運(yùn)行時(shí)Engine層跟OpenHarmony系統(tǒng)庫(kù)不兼容的情況癥狀表現(xiàn)為頁(yè)面渲染偶發(fā)空白、點(diǎn)擊事件響應(yīng)延遲。后來(lái)把Flutter版本鎖在社區(qū)推薦的穩(wěn)定分支情況立刻好轉(zhuǎn)。這里我的建議是不要追最新要追最穩(wěn)等某個(gè)適配版本在社區(qū)跑了一段時(shí)間后再升。第三環(huán)境變量里必須顯式聲明OpenHarmony SDK路徑。這一步少了Flutter工具鏈就找不到設(shè)備命令行執(zhí)行flutter devices時(shí)只能看到模擬器里的Android而OpenHarmony設(shè)備永遠(yuǎn)處于offline狀態(tài)。當(dāng)時(shí)我在配置里加了類似這樣的設(shè)置export OHOS_SDK_HOME/path/to/ohos-sdk export DEVECO_SDK_HOME$OHOS_SDK_HOME配置完后執(zhí)行flutter doctor如果輸出里出現(xiàn)了OpenHarmony相關(guān)的工具鏈信息說(shuō)明環(huán)境基本通了。別小看這幾行我在社區(qū)看到大量設(shè)備連不上flutter run找不到目標(biāo)設(shè)備的提問(wèn)八成都是這一步?jīng)]做或者路徑寫錯(cuò)。2.2 工程結(jié)構(gòu)里那個(gè)叫ohos的目錄用Flutter創(chuàng)建跨端工程時(shí)默認(rèn)會(huì)生成android、ios、web這些平臺(tái)目錄。當(dāng)Flutter的OpenHarmony適配被激活后工程里會(huì)多出來(lái)一個(gè)ohos目錄里面是OpenHarmony原生工程的骨架由ArkTS和native代碼組成。這個(gè)目錄的角色就相當(dāng)于Android工程里的android目錄。開發(fā)時(shí)Dart業(yè)務(wù)代碼寫在lib目錄下這個(gè)跟普通Flutter完全一致。但有一個(gè)點(diǎn)要注意ohos目錄里的原生代碼很多組件默認(rèn)不是參與到構(gòu)建里的只有你顯式引用了對(duì)應(yīng)插件原生模塊才會(huì)被編譯進(jìn)去。這會(huì)帶來(lái)一個(gè)隱蔽問(wèn)題你的Dart代碼在真機(jī)上跑到了一個(gè)功能但ohos工程里根本沒(méi)有對(duì)應(yīng)實(shí)現(xiàn)運(yùn)行時(shí)拋MissingPluginException排查起來(lái)非常容易懵。解決辦法是建立一份Flutter插件到ohos原生工程的映射清單。這個(gè)習(xí)慣我是后來(lái)踩了幾次坑才養(yǎng)成的尤其是當(dāng)團(tuán)隊(duì)里同時(shí)有人在改Android實(shí)現(xiàn)、有人在改ohos實(shí)現(xiàn)時(shí)沒(méi)有清單特別容易漏掉。2.3 平臺(tái)插件適配鴻蒙的完整流程以登錄SDK為例我們的App里需要集成一個(gè)第三方統(tǒng)一登錄SDK這個(gè)SDK原本只有Android和iOS版本鴻蒙端沒(méi)有現(xiàn)成的對(duì)接包。在H2標(biāo)題里提到的flutter平臺(tái)插件適配鴻蒙流程在這里得到了完整落地。我拆解成四步創(chuàng)建平臺(tái)接口、編寫鴻蒙端原生實(shí)現(xiàn)、用通道橋接、在Flutter側(cè)統(tǒng)一調(diào)用。第一步先定義Dart側(cè)的抽象接口。我們選用的是Federated Plugin的思路——Flutter社區(qū)里插件統(tǒng)一用這種模式一個(gè)app_side的接口包負(fù)責(zé)定義上層API具體實(shí)現(xiàn)由各個(gè)平臺(tái)去注冊(cè)。這樣Dart業(yè)務(wù)代碼不用關(guān)心底層是Android還是OpenHarmony只調(diào)用接口即可。第二步在ohos目錄里實(shí)現(xiàn)一個(gè)ArkTS類把登錄SDK的方法包一層。比如登錄方法底層要拉起SDK的登錄頁(yè)等待回調(diào)后把token通過(guò)回調(diào)返回。ArkTS的寫法跟TypeScript接近但對(duì)異步回調(diào)的約束更嚴(yán)一些所有原生回調(diào)都要通過(guò)通道轉(zhuǎn)發(fā)到Flutter側(cè)。第三步橋接。這里我用的是MethodChannelDart端發(fā)起登錄請(qǐng)求通過(guò)channel.invokeMethod觸發(fā)ArkTS側(cè)的login函數(shù)原生把登錄結(jié)果轉(zhuǎn)成JSON字符串再通過(guò)result.success返回。三端數(shù)據(jù)類型對(duì)齊是這一階段最常見(jiàn)的問(wèn)題——Boolean在Dart里是bool在ArkTS里也可以是boolean但一旦某個(gè)方法返回的是數(shù)組套對(duì)象轉(zhuǎn)來(lái)轉(zhuǎn)去很容易丟字段。第四步在Flutter側(cè)寫一個(gè)統(tǒng)一入口讓業(yè)務(wù)只管調(diào)用LoginService.login()底層自動(dòng)路由到對(duì)應(yīng)平臺(tái)實(shí)現(xiàn)。跑通這個(gè)流程大概花了兩天時(shí)間其中一半時(shí)間耗在ArkTS側(cè)的異步回調(diào)線程切換上這個(gè)后面專門講。3. 護(hù)理服務(wù)的核心鏈路任務(wù)流轉(zhuǎn)、健康數(shù)據(jù)采集與SOS呼叫3.1 護(hù)理任務(wù)模塊的業(yè)務(wù)狀態(tài)機(jī)護(hù)理服務(wù)里第一個(gè)要落地的核心模塊是護(hù)理任務(wù)。這個(gè)模塊表面上看是一個(gè)帶列表和詳情頁(yè)的CRUD但實(shí)際背后是一個(gè)狀態(tài)機(jī)任務(wù)從待分配流轉(zhuǎn)到已接單護(hù)理員開始上門后變成服務(wù)中服務(wù)完成填寫記錄后變成已完成如果護(hù)理員臨時(shí)有事需要交接給別人還要有待轉(zhuǎn)單狀態(tài)。這幾個(gè)狀態(tài)之間不是隨便能跳的。比如待分配的任務(wù)不能被護(hù)理員直接改成已完成必須經(jīng)過(guò)接單動(dòng)作而服務(wù)中的任務(wù)如果老人臨時(shí)取消又得走已取消分支。設(shè)計(jì)這種狀態(tài)機(jī)的時(shí)候如果只是簡(jiǎn)單地在頁(yè)面里if else判斷代碼會(huì)隨著狀態(tài)增加迅速腐化。我們?cè)贔lutter側(cè)用了枚舉加約束守衛(wèi)的方式enum CareTaskStatus { pending, // 待分配 assigned, // 已接單 inProgress, // 服務(wù)中 completed, // 已完成 cancelled, // 已取消 transferring // 待轉(zhuǎn)單 }每次狀態(tài)變更都走一個(gè)統(tǒng)一的transition方法在這個(gè)方法里用switch判斷當(dāng)前狀態(tài)和目標(biāo)狀態(tài)是否構(gòu)成合法遷移。一旦發(fā)現(xiàn)非法跳轉(zhuǎn)直接拋出異常并上報(bào)日志。這個(gè)設(shè)計(jì)在前期看起來(lái)有點(diǎn)用力過(guò)猛但等到接單、轉(zhuǎn)單、取消、完成這些業(yè)務(wù)流程全部串起來(lái)后受益非常明顯——每個(gè)頁(yè)面都不用重復(fù)校驗(yàn)狀態(tài)合法性只需要調(diào)transition方法。3.2 EventChannel把心率和血壓數(shù)據(jù)實(shí)時(shí)推到Flutter頁(yè)面護(hù)理服務(wù)里有一個(gè)關(guān)鍵場(chǎng)景護(hù)理員上門后需要用設(shè)備采集老人的心率、血壓、血氧數(shù)據(jù)。這些數(shù)據(jù)一部分來(lái)自藍(lán)牙穿戴設(shè)備一部分來(lái)自一體機(jī)。在OpenHarmony終端上藍(lán)牙和傳感器的能力都在原生層Flutter側(cè)拿不到必須通過(guò)通道橋接。數(shù)據(jù)采集場(chǎng)景適合用EventChannel而不是MethodChannel。MethodChannel是單向調(diào)用一次invoke對(duì)應(yīng)一次返回適合查一下?tīng)顟B(tài)調(diào)一個(gè)接口這類場(chǎng)景而EventChannel建立的是持續(xù)的推送通道原生側(cè)可以持續(xù)向Flutter側(cè)發(fā)送事件比如每秒鐘上報(bào)一次心率讀數(shù)。這正好匹配健康數(shù)據(jù)采集的實(shí)時(shí)性要求。ArkTS原生側(cè)的思路是初始化一個(gè)EventSink然后把藍(lán)牙設(shè)備回調(diào)里的數(shù)據(jù)逐步寫入import { eventEmitter } from ohos.base; let heartRateEventSink: (data: string) void null; // 在SDK回調(diào)中持續(xù)推送數(shù)據(jù) function onHeartRateReceived(value: number) { if (heartRateEventSink) { heartRateEventSink(JSON.stringify({ bpm: value, timestamp: Date.now() })); } }Flutter側(cè)訂閱這段事件流的代碼相對(duì)簡(jiǎn)單static const _eventChannel EventChannel( com.careapp/health_monitor ); StreamMapObject?, Object? _healthStream; void initHealthStream() { _healthStream _eventChannel.receiveBroadcastStream() .castMapObject?, Object?(); }拿到流數(shù)據(jù)后我在頁(yè)面里接了一個(gè)StreamBuilder把心率數(shù)值實(shí)時(shí)渲染成折線圖。這里有個(gè)實(shí)戰(zhàn)細(xì)節(jié)值得強(qiáng)調(diào)EventChannel的數(shù)據(jù)是異步到達(dá)的頁(yè)面如果切到后臺(tái)再回來(lái)流的訂閱關(guān)系可能會(huì)斷需要重新訂閱并做一次數(shù)據(jù)快照拉取。我是在頁(yè)面生命周期里處理恢復(fù)邏輯的具體方法后面講Navigator狀態(tài)時(shí)一起說(shuō)。3.3 SOS緊急呼叫里最容易做錯(cuò)的一步護(hù)理服務(wù)中還有一個(gè)緊急場(chǎng)景——老人突發(fā)狀況護(hù)理員或老人本人按下SOS按鈕App需要立刻撥出預(yù)設(shè)的緊急聯(lián)系人電話同時(shí)把定位信息和簡(jiǎn)單情況發(fā)送到管理后臺(tái)。這部分最初我們照搬了Android端的實(shí)現(xiàn)邏輯——點(diǎn)擊SOS后先通過(guò)網(wǎng)絡(luò)請(qǐng)求上報(bào)位置等請(qǐng)求返回成功后再調(diào)起撥號(hào)。實(shí)際在OpenHarmony真機(jī)上測(cè)試時(shí)發(fā)現(xiàn)一個(gè)問(wèn)題網(wǎng)絡(luò)請(qǐng)求有時(shí)會(huì)卡住幾秒老人和護(hù)理員在緊張狀態(tài)下會(huì)反復(fù)點(diǎn)擊按鈕導(dǎo)致重復(fù)上報(bào)。后來(lái)改成撥號(hào)優(yōu)先異步上報(bào)點(diǎn)擊按鈕后先立即通過(guò)MethodChannel調(diào)起系統(tǒng)撥號(hào)同時(shí)后臺(tái)異步發(fā)送定位數(shù)據(jù)并且加了防重復(fù)點(diǎn)擊的節(jié)流器兩秒內(nèi)的重復(fù)點(diǎn)擊全部忽略。這個(gè)改動(dòng)邏輯很小但用戶的體感完全不一樣。撥號(hào)本身需要申請(qǐng)系統(tǒng)權(quán)限這里有一個(gè)跟Android的差異點(diǎn)OpenHarmony的權(quán)限模型更細(xì)撥號(hào)、定位、藍(lán)牙分別對(duì)應(yīng)不同的權(quán)限組而且部分權(quán)限需要用戶到系統(tǒng)設(shè)置里手動(dòng)授權(quán)App內(nèi)彈窗申請(qǐng)的能力有限。我們的做法是在首次啟動(dòng)時(shí)通過(guò)引導(dǎo)頁(yè)把權(quán)限一次性申請(qǐng)清楚避免緊急場(chǎng)景下彈窗打擾。4. 狀態(tài)管理與組件通信Cubit方案和頁(yè)面狀態(tài)保留的真相4.1 為什么CI方案我用Cubit而不是Bloc在Flutter社區(qū)里狀態(tài)管理一直是討論熱度最高的話題。我們的護(hù)理服務(wù)模塊最終采用了Cubit這是Bloc庫(kù)的精簡(jiǎn)版。選擇它不是因?yàn)锽loc不好而是在這個(gè)項(xiàng)目的實(shí)際場(chǎng)景里Cubit的抽象層次更合適。Bloc的核心是把事件和狀態(tài)完全拆開通過(guò)事件驅(qū)動(dòng)狀態(tài)變化適合大型團(tuán)隊(duì)、復(fù)雜業(yè)務(wù)邏輯里需要嚴(yán)格流程管控的場(chǎng)景。但它的儀式感也帶來(lái)額外的代碼量每個(gè)交互都要定義Event類、寫mapEventToState方法、維護(hù)多個(gè)文件。而在護(hù)理服務(wù)模塊中很多邏輯是頁(yè)面觸發(fā)動(dòng)作數(shù)據(jù)變一下UI刷新用Bloc有點(diǎn)殺雞用牛刀。Cubit保留了Bloc的State流式管理能力但去掉了Event層直接通過(guò)方法調(diào)用來(lái)改變狀態(tài)。比如接單操作代碼如下class CareTaskCubit extends CubitCareTaskState { CareTaskCubit(this._repository) : super(CareTaskInitial()); final CareTaskRepository _repository; Futurevoid acceptTask(String taskId) async { emit(CareTaskLoading()); try { final task await _repository.acceptTask(taskId); emit(CareTaskLoaded(task)); } catch (e) { emit(CareTaskError(接單失敗請(qǐng)重試)); } } }這個(gè)寫法非常直觀業(yè)務(wù)人員看著代碼就能知道點(diǎn)接單后發(fā)生了什么。而如果用Bloc同樣的流程還要多一層SealedEvent類的定義。所以我的經(jīng)驗(yàn)是如果團(tuán)隊(duì)里Flutter水平參差不齊Cubit的接受成本更低如果你在做一個(gè)流程嚴(yán)苛的交易系統(tǒng)再上Bloc不遲。4.2 Navigator切換頁(yè)面后會(huì)丟失狀態(tài)嗎——這個(gè)問(wèn)題要分兩半看這個(gè)熱搜詞我在項(xiàng)目里真實(shí)遇到了。護(hù)理員正在填寫一條護(hù)理記錄填到一半有人打電話來(lái)接完電話回來(lái)發(fā)現(xiàn)剛才草稿全沒(méi)了氣得直冒火。技術(shù)上這是頁(yè)面被銷毀導(dǎo)致State丟失的問(wèn)題要理解它必須搞清楚Flutter頁(yè)面棧的機(jī)制。Flutter里用Navigator.push跳轉(zhuǎn)新頁(yè)面時(shí)默認(rèn)情況下原頁(yè)面并沒(méi)有銷毀它只是被壓到路由棧里State對(duì)象還活著。真正導(dǎo)致?tīng)顟B(tài)丟失的常見(jiàn)原因是頁(yè)面已經(jīng)被pop銷毀了。比如護(hù)理員從任務(wù)列表點(diǎn)進(jìn)詳情頁(yè)在詳情頁(yè)里填草稿然后誤觸返回詳情頁(yè)出棧銷毀草稿自然沒(méi)了。另一種情況更隱蔽頁(yè)面還在棧里但系統(tǒng)內(nèi)存緊張時(shí)Flutter會(huì)觸發(fā)重建如果State里的數(shù)據(jù)沒(méi)有持久化依然會(huì)丟失。我們項(xiàng)目里護(hù)理記錄草稿用的是普通內(nèi)存變量后來(lái)改成每次輸入變化都寫入本地?cái)?shù)據(jù)庫(kù)再在頁(yè)面重建時(shí)恢復(fù)。具體做法是使用SharedPreferences做自動(dòng)保存每次EditController的內(nèi)容變化后防抖保存到本地頁(yè)面initState時(shí)讀回來(lái)回填。/// 草稿自動(dòng)保存的核心邏輯 textController.addListener(() { _debounce(() { prefs.setString(draft_brief, textController.text); }, 400ms); });至于頁(yè)面確實(shí)還留在棧里但是UI沒(méi)刷新這種偽丟失本質(zhì)是狀態(tài)更新后沒(méi)有通知到當(dāng)前頁(yè)面這個(gè)屬于組件通信問(wèn)題下面繼續(xù)講。4.3 組件通信的四種主流方案和養(yǎng)老場(chǎng)景下的取舍Flutter組件間通信我實(shí)際用的方案按頻次排列ValueNotifier、Cubit、EventBus、InheritedWidget。ValueNotifier適合單節(jié)點(diǎn)狀態(tài)比如一個(gè)開關(guān)、一個(gè)滑塊頁(yè)面內(nèi)部用沒(méi)問(wèn)題Cubit適合跨頁(yè)面共享某個(gè)業(yè)務(wù)領(lǐng)域的狀態(tài)比如護(hù)理任務(wù)的當(dāng)前狀態(tài)EventBus適合完全解耦的事件廣播比如老人數(shù)據(jù)已更新、刷新地圖標(biāo)記這類不關(guān)心誰(shuí)監(jiān)聽(tīng)的消息InheritedWidget適合主題、語(yǔ)言包這類全局靜態(tài)配置。在老項(xiàng)目里人們經(jīng)常用一個(gè)全局靜態(tài)類保存所有狀態(tài)頁(yè)面之間互相讀寫寫著寫著就分不清是誰(shuí)改了誰(shuí)排查問(wèn)題非常痛苦。我們這次從一開始就規(guī)定凡是兩個(gè)以上頁(yè)面都要讀寫的狀態(tài)一律丟進(jìn)Cubit頁(yè)面里通過(guò)context.read和context.watch去讀寫禁止直接操作全局變量。4.4 一次真實(shí)的詭異數(shù)據(jù)不同步排查過(guò)程項(xiàng)目聯(lián)調(diào)時(shí)出現(xiàn)一個(gè)怪問(wèn)題護(hù)理員在A頁(yè)面完成了接單操作回到B頁(yè)面刷新后B頁(yè)面上的任務(wù)狀態(tài)還是待接單。模型上看B頁(yè)面監(jiān)聽(tīng)了同一個(gè)Cubit實(shí)例理論上狀態(tài)變化會(huì)逐幀廣播。排查了半天發(fā)現(xiàn)問(wèn)題不在狀態(tài)管理而在B頁(yè)面用的Cubit對(duì)象是從一個(gè)每次build都新建實(shí)例的代碼塊里拿的。如果每次刷新都new一個(gè)Cubit那后續(xù)頁(yè)面監(jiān)聽(tīng)的是新實(shí)例而A頁(yè)面操作的是舊實(shí)例兩者根本沒(méi)連上。這一類問(wèn)題極容易發(fā)生在組件內(nèi)嵌帶參數(shù)初始化的場(chǎng)景?,F(xiàn)在我要求所有跨頁(yè)面共享的Cubit實(shí)例必須從頂層依賴注入容器里統(tǒng)一獲取任何地方都不得直接new。如果你也遇到明明監(jiān)聽(tīng)了狀態(tài)卻不更新的問(wèn)題先去檢查是不是每個(gè)build里都新new了狀態(tài)對(duì)象比排查UI邏輯快得多。5. OpenHarmony真機(jī)聯(lián)調(diào)中的編譯問(wèn)題與性能優(yōu)化5.1 could not determine the dependencies of task這個(gè)報(bào)錯(cuò)到底是誰(shuí)的鍋Flutter for OpenHarmony在打包和編譯階段搜索引擎里高頻出現(xiàn)的報(bào)錯(cuò)是類似could not determine the dependencies of task :app:compileDebugJavaWithJavac這一類任務(wù)依賴無(wú)法解析的錯(cuò)誤。第一次遇到時(shí)我以為是Flutter工程的問(wèn)題折騰半天發(fā)現(xiàn)根因在Gradle依賴?yán)∩?。OpenHarmony工程的構(gòu)建鏈Flutter層會(huì)生成一個(gè)Gradle工程同時(shí)基于ArkTS的Hvigor構(gòu)建系統(tǒng)。當(dāng)兩套構(gòu)建系統(tǒng)的版本聲明和依賴倉(cāng)庫(kù)不一致時(shí)Gradle解析任務(wù)依賴就會(huì)失敗。我們踩過(guò)的具體原因是工程里的ohos目錄帶了一個(gè)獨(dú)立的Gradle配置它引用的插件倉(cāng)庫(kù)在部分網(wǎng)絡(luò)環(huán)境下拉取超時(shí)Gradle就干脆報(bào)依賴無(wú)法解析。解決辦法不神秘分三步第一步檢查Flutter工程根目錄的gradle-wrapper.properties確認(rèn)Gradle版本和已安裝版本一致第二步檢查倉(cāng)庫(kù)源配置把OpenHarmony工程需要的三個(gè)倉(cāng)庫(kù)——mavenCentral、華為開源倉(cāng)、以及Gradle插件倉(cāng)——全部顯式聲明第三步把依賴緩存目錄清掉重新構(gòu)建。項(xiàng)目里我們最終是通過(guò)整理統(tǒng)一版本的Gradle配置文件解決社區(qū)里有人說(shuō)升級(jí)Gradle也能解決但升級(jí)有連帶風(fēng)險(xiǎn)我的經(jīng)驗(yàn)是優(yōu)先排查倉(cāng)庫(kù)源。5.2 Flutter SDK版本兼容警告和一例打包崩潰的處理隨著Flutter版本迭代命令行里會(huì)頻繁出現(xiàn)the current configured Flutter SDK is not known to be fully supported這類提示。這個(gè)警告的意思是當(dāng)前Flutter版本和工程里某些插件適配版本沒(méi)有經(jīng)過(guò)官方全量測(cè)試有可能行為不一致。我記得有一次打包時(shí)崩潰在java.lang.AssertionError報(bào)錯(cuò)信息指向一個(gè)閉包無(wú)法關(guān)閉。這個(gè)問(wèn)題的真實(shí)原因是Flutter引擎和OpenHarmony版本的一個(gè)已知兼容沖突。當(dāng)時(shí)社區(qū)里還沒(méi)有現(xiàn)成教程我排查兩天后是把Flutter的引擎回退到了鴻蒙適配分支的上一個(gè)穩(wěn)定tag崩潰就消失了。從那以后我養(yǎng)成一個(gè)習(xí)慣OpenHarmony工程里做任何Flutter版本升級(jí)都要先在測(cè)試設(shè)備上跑一遍核心用例再推給其他同事不要以命令行不報(bào)錯(cuò)作為升級(jí)成功的標(biāo)準(zhǔn)。5.3 性能層面值得關(guān)注的點(diǎn)Impeller和頁(yè)面卡頓OpenHarmony的Flutter渲染初始化、頁(yè)面切換的過(guò)程如果沒(méi)有做性能優(yōu)化在低端設(shè)備上很容易觀察到卡頓。熱搜詞里有一個(gè)flutter impeller這是Flutter渲染引擎的一個(gè)實(shí)現(xiàn)。Impeller的核心優(yōu)勢(shì)是避免了傳統(tǒng)Skia渲染的每幀著色器編譯卡頓這在跨端場(chǎng)景里體驗(yàn)差異比較明顯。但OpenHarmony適配分支上Impeller的支持狀態(tài)要以實(shí)際測(cè)試為準(zhǔn)如果設(shè)備上開啟后出現(xiàn)異?;ㄆ辆突赝说絊kia渲染。護(hù)理服務(wù)里那個(gè)實(shí)時(shí)心率折線圖最初在低端平板上刷新時(shí)掉幀明顯。后來(lái)我把刷新頻率從每幀刷新降到每秒三幀再把圖表數(shù)據(jù)的點(diǎn)集采樣壓縮設(shè)備負(fù)載立刻降下來(lái)。性能優(yōu)化這種事個(gè)中體會(huì)就是跨端框架的渲染性能上限不低但如果你不做節(jié)流和控制再?gòu)?qiáng)的框架也頂不住無(wú)腦刷新。5.4 真機(jī)聯(lián)調(diào)時(shí)最常見(jiàn)的三類問(wèn)題OpenHarmony真機(jī)聯(lián)調(diào)跟Android模擬器調(diào)試有幾點(diǎn)明顯的不同按遇到概率排序第一設(shè)備連接不穩(wěn)定。用命令行跑flutter run設(shè)備偶爾會(huì)斷連日志直接中斷。這個(gè)是OpenHarmony調(diào)試服務(wù)自動(dòng)休眠導(dǎo)致的可以通過(guò)在設(shè)備端持續(xù)保持屏幕常亮來(lái)緩解設(shè)置電源為不休眠。第二權(quán)限彈窗容易誤觸。開發(fā)階段多次安裝應(yīng)用權(quán)限彈窗會(huì)重復(fù)彈出一旦誤點(diǎn)拒絕后續(xù)即使重新安裝部分權(quán)限也不會(huì)再自動(dòng)向用戶申請(qǐng)需要在系統(tǒng)設(shè)置里手動(dòng)打開。涉及定位和藍(lán)牙的模塊我建議在開發(fā)階段就做一個(gè)權(quán)限自檢頁(yè)面打開直接顯示哪些權(quán)限已授權(quán)、哪些被拒絕、哪個(gè)入口去設(shè)置里打開節(jié)省的時(shí)間遠(yuǎn)超寫這個(gè)頁(yè)面的投入。第三日志過(guò)濾規(guī)則不同。Dart側(cè)的print輸出和ArkTS側(cè)的hilog日志在OpenHarmony上不全是同一個(gè)出口很多時(shí)候你看到Flutter側(cè)沒(méi)有報(bào)錯(cuò)但原生其實(shí)已經(jīng)崩了。我的習(xí)慣是出問(wèn)題先在ArkTS側(cè)打關(guān)鍵日志再回Flutter側(cè)對(duì)比不要只盯著Dart控制臺(tái)。6. 模塊設(shè)計(jì)里那份原生橋接清單的價(jià)值前面斷斷續(xù)續(xù)提到了不少踩坑經(jīng)歷但這里我還是想再單獨(dú)強(qiáng)調(diào)一個(gè)工程習(xí)慣維護(hù)原生橋接清單。一份清單記錄三個(gè)平臺(tái)下達(dá)成的通道協(xié)議和參數(shù)格式。我們護(hù)理服務(wù)模塊最終涉及到的橋接通道大概有十來(lái)個(gè)健康數(shù)據(jù)EventChannel、撥號(hào)MethodChannel、定位調(diào)用、藍(lán)牙連接、文件上傳原生壓縮等等。每加一個(gè)新通道如果不在清單里及時(shí)更新參數(shù)格式和回調(diào)類型等另外兩個(gè)平臺(tái)的同學(xué)各寫各的聯(lián)調(diào)階段就會(huì)冒出來(lái)一模一樣的字段、類型卻對(duì)不上的問(wèn)題。實(shí)際落地的清單長(zhǎng)這樣通道名類型參數(shù)格式原生平臺(tái)狀態(tài)health_monitorEventChannelJSON字符串OpenHarmony已聯(lián)調(diào)sos_callMethodChannelcontactId, lat, lngOpenHarmony已聯(lián)調(diào)location_updateMethodChannelJSON字符串OpenHarmony待聯(lián)調(diào)bluetooth_scanEventChannelJSON字符串OpenHarmony開發(fā)中有了這張表團(tuán)隊(duì)溝通成本會(huì)低很多。另外提醒一點(diǎn)通道名稱和參數(shù)結(jié)構(gòu)在正式使用后輕易不要改要改也要先改清單再改代碼否則兩端的同學(xué)完全無(wú)法感知對(duì)方變了。7. 護(hù)理服務(wù)上線前后我的一些復(fù)盤這套Flutter for OpenHarmony的護(hù)理服務(wù)App從開發(fā)到完成真機(jī)驗(yàn)收整個(gè)流程走下來(lái)我對(duì)跨端適配鴻蒙有了新的認(rèn)識(shí)。第一個(gè)體會(huì)是Flutter的統(tǒng)一UI能力在OpenHarmony上確實(shí)是成立的。幾十個(gè)頁(yè)面、復(fù)雜的狀態(tài)流轉(zhuǎn)、和有原生通信的模塊用一套Dart代碼覆蓋三個(gè)平臺(tái)效率層面的收益很明顯。真正拉開差距的是你對(duì)平臺(tái)差異的理解深度。OpenHarmony不是Android它的權(quán)限模型、構(gòu)建系統(tǒng)、調(diào)試方式、ArkTS的語(yǔ)言約束都自成體系。盲目地把Android經(jīng)驗(yàn)照搬過(guò)來(lái)會(huì)在細(xì)節(jié)處反復(fù)碰壁。第二個(gè)體會(huì)是狀態(tài)的持久化設(shè)計(jì)要提前做不能等到上線前再補(bǔ)。像護(hù)理記錄草稿、任務(wù)列表的篩選條件、健康數(shù)據(jù)的緩存這些看起來(lái)不起眼的功能如果一開始就規(guī)劃好本地存儲(chǔ)方案后期會(huì)省掉大量返工時(shí)間。我們項(xiàng)目里中途補(bǔ)了個(gè)本地緩存層代價(jià)是改了十幾個(gè)頁(yè)面的數(shù)據(jù)讀取邏輯。第三個(gè)體會(huì)是關(guān)于團(tuán)隊(duì)協(xié)作的??缍碎_發(fā)最忌諱的是我這邊能跑就行。同樣的Dart代碼Android上的行為和OpenHarmony上的行為未必一致?,F(xiàn)在我們的做法是每個(gè)功能點(diǎn)至少要在兩個(gè)真實(shí)設(shè)備上跑一遍才算完成不允許只在一個(gè)平臺(tái)驗(yàn)證后直接標(biāo)已通過(guò)。這當(dāng)然會(huì)拉長(zhǎng)單個(gè)需求的測(cè)試時(shí)間但上線后的穩(wěn)定性提升非常明顯。如果你正在評(píng)估Flutter for OpenHarmony或者已經(jīng)被分配了類似的項(xiàng)目我建議你從我們這套方案里直接拿走的不是具體代碼而是那幾條基于真實(shí)場(chǎng)景得出來(lái)的經(jīng)驗(yàn)版本鎖定優(yōu)先于版本最新、橋接通道必須維護(hù)清單、狀態(tài)和導(dǎo)航的設(shè)計(jì)要提前想清楚數(shù)據(jù)生命周期。這些點(diǎn)沒(méi)有在官方文檔里高亮但它們決定了項(xiàng)目能不能平穩(wěn)落地。
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
中文字幕五月婷婷免费| 一个人免费视频观看在线WWW| 丁香六月激情| 精品一区二区综合熟妇| 久久夜夜| 婷婷爽人人婷婷爽视频| 78操B| 综合网欧| 一区二区三区四区五区高清无码永久视频| 成人av免费观看| 色欲三区| 一个国产在线综合网站| 亚洲第一页第二页激情| 女人久久久| 日韩精品第3页| 一区=区三区视频| 五月丁香激情综合| 日日天天久久啊啊aaa| 久久久久亚洲Aⅴ无码| 自拍偷拍 日韩欧美| av影院十区| 大香蕉伊然在亚洲91| 色 亚洲 91| 熟妇女人妻呻吟久久AV| 久久超碰亚洲人| 99丝袜福利在线播放| 激情五月丁香五月| www.久久久久| 操一区| 色综合久久88色综合久久天天| 国产视频一区二区三区在线免费观看| 欧美亚洲| 色哟哟AⅤ| 超碰色男人操熟女| 亚洲高清无码在线桃色| 极品白嫩美女白浆成人福利在线看| 淫荡少妇免费| 120分钟婬片免费看| 久久av成人无码免费| 亚洲图片激情综合另类| 六月婷婷综合| 欧美黄页在线| 五十路熟女工口| 麻豆性爱视频在线播放| 欧美72网页| 极品粉嫩一区二区| 欧美综合制服在线| 青娱乐福利99| 手机在线视频国内精品| 色情综合| www.99热在线只有精品| 中文字幕、久久精品国产2020、久久综合久久自在自线精品自、亚洲 | 天堂在线一区二区| 9久9久| 国产路线专区| 欧美在线永久天堂| 日日操丁香五月天| 日本在线一二| 蜜臀久久99'精品久久久| 亚洲男人天堂2| 天堂av最新电影网| 操逼日批| 欧美午夜色妇色鬼| 久久久久深夜无码| 国产精品视频91久久| 国产网红精品| 韩国一区二区精品亚洲| 无码人妻精品一区二区三区九九| 欧美性第1页| 精品人妻一区二区三区在| 久久久99免费| 精品妇女一区二区三区| 97这里只精品| 青娱乐福利99| 99久久综合网| 精品九九九九九九九| 久久人妻一区二区三区高清| 天天干天天操天天操夜夜操天天操 | 91午夜无码| 开心五月婷婷激情| 日韩黄色小说| 黄色成人网久久久久久| 思思热一热婷婷热一热| 久插不卡| 98久久| 国产操逼网站亚洲一级黄色| 欧美性生活内射| 伊人四虎综合| 欧美综合国产精品久久丁香| julia高潮后不停追击中出| 在线观看A啊啊啊| 欧美后入式| а√天堂资源官网在线资源| www.99热| 又黄又硬又粗又长国产视频| www.超碰在线| 99re在线视频| 日韩激情啪啪啪| www.操| 中文字幕福利视频一区二区三区在线观看| 3P乱轮视频| 久久精品免视看国产成人﹣蜜臀av一区. 久久精品免视看国产成人,蜜臀av一区 | 国产a级精品| 人妻熟女一区二区三区视频| 婷婷丁香成人| 97人人色| 无码国产精品午夜不卡(| 国产SV一线| 天天干电影| 国产树林里野战在线看| 9999亚洲精品| 91午夜无码| 久久鲁夜| 国产一级特黄大片处女| 日日夜夜青青草母狗| 国产午夜精品理论片a大结局| 婷婷五月天色色| 天操天操夜操夜月月年年操操| 翔田千里无码一区| 2019天天操天天爽天天拍| 国产福利精品98视频| 91婷婷伊人狠人| 色97干| 激情小说五月天| 中文字幕一区二区三区四五区| 亚洲日韩国产欧美综合v| 97色涩| 日韩色欲久久一二三四区| 麻豆一区在线| 精品国产精品一区二区| 亚洲久久久| 少妇一线天久久久久久| 伊人五月天婷婷| 婷婷五月天无码| 3028国产精品| 国产精品96| 久久国产精品一级二级三级| 99久久亚洲精品无码毛片潘甜甜| 九九英色视频| 色婷婷网| 黑人精品XXX一区一二区| a人片中文字幕一区二区| www色日本| 亚州一区二区| 亚洲黄色网址| 日韩有码一区三区| 影音先锋日本乱伦| 96麻豆精品一区二区三区| 99中出在线| 日韩操p| 97免费视频在线观看视频| 333kkkk·亚洲com久久| 亚洲无无码αⅴ每日更新| 91日产欧美| 色呦呦呦在线观看视频| 大象AV在线| 天天内射| 人妻久热在线| 日本操BAV| 国产精品丝袜在线| 欧美色图 人妻| 婷婷中文字幕| 激情五月天社区| 日本一级特级毛片视频| 国产超碰97| 强奸少妇AV导航网| 日韩中文字幕视频在线观看| 2024年最新色情网站在线观看| 日本东京热大香蕉a片| 亚洲欧洲综合视频在线| 凹凸视频在线观看伊人| 国产多人在线观看视频| 中文字幕视频在线观看| 久久视频少妇美女| 九九十八精品| 婷婷丁香六月天| 亚洲天堂一区二区久久| 国产福利合集| 天天网综合| 九9精品| 超硑97精品| 开心五月激情网| 黑丝自慰喷水网站| 美国精品国产精品| 家庭乱伦麻豆| 啪啪视频免费在线观看| AV色女综合| 色99久草| 久久精品人妻一区二区三区| 亚洲一区亚洲天堂| 欧美一级专区免费大片 | 国产日本一区二区三区蜜臀在线观看| 欧美另类丝袜熟女| 五月天人妻综合| 欧美性生活内射| www.99热在线只有精品| 亚洲欧美中日韩| 3571色综合一区二区二区| 亚洲二区精品在线观看| 亚洲四虎熟女精品| 成人性爱美曰韩| 欧美日韩操逼动图| 久久九九国产精品| 国产伦乱91| 国产理论视频在线播放| 国产精品人妻熟女aⅴ| 污色区网站| 97超碰超碰| а√天堂资源官网在线资源| 收看日本人日bb| 人人操人人摸avav| 亚洲AV成人无码久久精品播放| 无码精品一区二区三区潘金莲| 强奸乱伦免费网站| 性影在线视频| 亚洲色久| 蜜色网色哟哟| 丰满搜索结果 -第18页- 久久高清无码| 久久婷婷色综合一区二区三区| 精品一区二区三区蜜桃臀赵总| 久久ww| 日本高清电影欧美色图| 久久久久七视频| 蜜臀久久久| 亚洲91射| 欧美一区二区一级岛国大片| 国产精品视频白浆免费| 久操99| 北条麻妃性愛视频| 超碰欧美97资源| 97欧美综合| 福利操逼| 久久99久久99久久99人受| 国产熟女少妇一区| 精品女同一区| 97视频免费在线观看| 人人操 欧美| 国产剧情AV不卡在线观看| 欧美在线播放aaaa| 午夜精品久久久久久久99热影院| 蜜桃狠狠色伊人亚洲综合 | www.伪伪| 四色永久成人网站| 久久超碰亚洲人| 中文字幕精品亚洲熟女| 亚洲 欧美 制服 另类 自拍| 国产高清1234区| 蜜臀99999| 久草电影网| 沈阳熟女高潮对白视频| 色婷亚洲五月在线观看| 99re不伦| 国内一区二区免费| 精品性爱无码在线播放| 欧美A√综合网| 天天综合欧美黑人| 久久久久久69国产一区二区| 日本三级久| 天天操人人操骚逼网站| 日产操逼| 欧美老熟另类| 美女91网站| 亚洲熟女中文字幕在线| 久久久久久久久女黄| 综合伊人激情| 激激五月| 啊啊啊啊啊啊在线| 91狠婷| 国产精品69久久久久久久| a级免费在线观看| 日韩中文字幕二区| 四虎影视 亚洲无码| 免费中文综合精品| 美女露胸露尿口| 东京热91| 中文字幕亚洲在线一区| 日韩综合97P| 超碰在线欧美性爱激情| 日韩在线视频1234| 欧美日动态视频| 夜夜天天噜狠狠爱2021| 日本三级小说中文字幕| 久久九色| 青青11操操操操操操操操| 亚洲成人在线资源| 欧美在线视频99| q2午夜理论片夜色av| 国产日产精品久久快鸭的功能介绍| 超碰亚洲97| 蜜臀99久| 久草综合京东| 欧美日韩另类在线| 亚洲污污网站| 日韩欧美中文| 成年人免费观看网站| 欧美色青| 97精品一区二区视频| 99国产人成精品| 精品国产乱码久久久久久口爆网站| 97精| 中文字幕av色| 久久在线观看免费视频| 春色校园综合网| 台湾一区国产高清在线| 亚洲天堂男人| 久久久久久久久久久六六| 91亚洲高清| 殴美日韩m| 国产强奸91| 伊人四虎综合| 男人天堂一区二区| 免费1级a做爰片观看| 久偷拍| 亚洲第一精品在线视频| 久久久免费视频18| 狼天天狼天天大香蕉| 国产又色又粗又黄又爽| 国产一区二区精品在线视频| 九九无码视频| 一起草三级AV电影在线观看| 性爱AV天堂| 激情看片网站| 国产性爱强奸乱伦大全| 亚洲一区二区 麻豆传媒| 日本亚洲熟女视频| 亚洲激情片| 亚洲精品美女操逼| 在线观看一卡二卡| 亚洲国产成人精品久久久国产成人一区二区三. | 色嘟嘟人妻天堂网| 国产日韩欧美亚洲精品95| 久久大香蕉97| 97视频www| 999久久久精品国产| 日本性交操一区二区不卡系列| 久久久久斤小| 国产大片精久久久久久| 丁香五月综合| 久久久久久人妻一区精品色欧美| 另类欧美色| 日韩精品大香蕉伊人在线| 九九九九热只有精品| 粉嫩国产精品久久粉嫩| 欧美久久久15P| 欧美成97爱| wwwxxx日本爽| 极品色社| 天天碰久久入| 免费看黄视频亚洲网站| 黑丝少妇在线观看| 婷婷丁香五月激情啪啪| 99久久精品国产高潮| 九九探花视频在线观看| 亚洲成人综合在线| 美日韩在线不卡人妻| 一起草精品人妻| 久久色AV线| 韩国一级做A片免费的| 久久妇| 亚洲另类色图片| 欧美综合自拍亚洲综合图| 综合激情五月丁香| 中文乱码字幕观看视频| 99精品欧美一区二区三区桃色| 欧美图片校园春色| 老鸭窝亚洲毛片| 可免费观看的av毛片中日美韩| 丁香五月天久久精品视频一区二区三区| 久久99久久99精品天美传媒棢·纸:. | 亚码激情| 亚洲五区熟女| 天天躁日日躁狠狠狠躁| 4tube欧美女厕所| 91劲爆| 大香蕉色十月| 日本中文字幕熟妇| 91女优在线观看| 日韩不卡av一二三| 夜夜高潮夜夜爽夜夜爱爱一区 | 色偷偷综合91久久噜噜| 国产一区二区三区导航| 91 偷| 狠狠欧美| 亚洲免费成人在线高清无码视频| 色老久久| 男人的天堂2010| 伊人网青青| 9 7超碰在线免费观看| 日韩性爱再线视频| 久啪视频| 91偷拍欧美亚洲| 国产 无码 一区二区| 欧美亚洲今日在线| 91亚洲欧美色图| 熟女视频久久| 1000部熟女视频在线观看| 九久久精品| 97日视频| 婷婷情色综合网| 国产懂色精品国产av| 91亚州| 国产夫妻性生活视频| 伊人久久亚洲中文字幕| 大香蕉黄色一区| 中文字幕亚洲永久精品| 亚洲精品97| 夜夜精品视频一区二区| 蜜臀久久久国产| 少妇天堂网络| 中文字幕片| 免费视频无码| 国产呦精品一区二区三区下载| 眼镜人妻101.com| 69人妻精品丰满熟女区| 高清无码 国产精品| 国产一区二区在线看| 精品黑人一区二区| 日韩精品高清资源在线| 婷婷久草| 日韩本不卡视频在线观看| 秋霞一级鲁丝片A片| 婷婷亚洲五月***久久| 18禁久极品美女久久哦哟呀!| 亚洲综合小视频小说在线观看| 97人人射| 操逼999| 婷婷久久五月| 欧洲人妻视频| 天天摸夜夜摸| 一区二区视频在看| 亚洲国产综合久久久性感熟妇| 欧美色图亚洲激情| AV九九| 亚洲伊人久久精品狠狠在线| 九七人妻在线| 国产又大又硬又长又粗| 我爱大香蕉| 淫妻综合网| 国产天天骚| 秋霞鲁丝午夜无码一区二区三| 另类成人首页一区| 99999re| 萌白酱自拍视频| 国产亚洲精品自在线亚洲情侣 | 无套后入双马尾| 亚洲熟妇一,二,三期| 国产日韩手机视频在线| 丰满人妻一区二区三区大胸懂色 | 日日躁天天躁狠狠躁| 老司机福利青青草| 日韩中文字幕视频在线观看| 炮色五月| 男人的天堂视频精品乱在线| 蜜乳av一区二区| 无码91| 日韩99999| 国产免费操逼| 亚洲视频,小说| 亚洲精品久久久久毛片A片拉屎 | 亚洲综合首页| 无码乱人伦中文视频| 日韩精品熟妇| 夜夜爽夜夜高潮夜夜爽| 久久久精品视频免费观看| 欧美色九九九| 亚洲人妻久久| 红杏大香蕉| 欧美一级三级| 欧美疯狂做爰xxxx| 国产亚洲综合欧美一区| WWW4虎| 91中文精品日韩欧美在线 | 久久国产性爱| 免费看污网址| 五月激情视频| 久操网址| 国产熟女无套内射| 国产乱不卡| 欧美亚洲尤物久久| 久偷拍| 中文字幕av亚洲精品| 伦激情人妻另类人妻| 亚洲h片在线免费观看| 五月婷婷激情| 五月天综合| 成人情色一区二区| 激情av| 久久久久久电影| 曰韩香蕉97| 免费操逼视频下载| 久久婷婷电影网| 久久久工口| 风流老熟女一区二区三区l| 色天欧美| 超碰超碰95| 国产在线强奸视频| 日本一二三免费久久| 混色激情av| 亚洲成a人在线观看久| 97超碰日韩| 国产久久一区二区| 欧插网站| 欧亚性爱视频免费看| 超清中文乱码字幕| 青青草一区二区三区四| 偷窥自拍亚洲色图| 99热在线播放| 欧美日韩在线国产在线| 青娱乐淫乱1314| 久久9免费视频| 国产天美传媒精品| 久久久噜噜噜久久久| www.色婷婷| 伊人久操| 国产精品久久久久亚洲av| 国产强奸乱伦无码视频| 九热中文字幕| 精品人妻一区二区三区不卡断| 日影院久久婷婷夜夜网| 美女大乳久久久久久久女人18| 99日韩| 不卡啪啪视频| 无码丰满熟妇一区二区浪潮AV| 国产黄色剧情影片麻豆免费播放| 婷婷涩嫩草鲁丝久久午夜精品| 2017天天操天天日| 国内一级精品| 国产精品农村妇女| 爱爱动态60秒| 欧美gv在线观看| 国产午夜福利专区综合| 97无码视频在线播放| 97资源视频| 国产精品久久久久999| 精品久久久久久亚洲| 国产第12页| 精品夜夜澡人妻无码AV| 日日干夜夜操视频h| 精品成人无码| 黄网色一区二区三区四区精品| 五月丁香六月婷综合成人综合| 天美AV片| 欧美日韩一二三| 亚州国产成人精品女人久久| 黑人中出21连凳花野真衣| 色色国产| 99色婷婷中文字幕乱色| 欧美一二三级精品在线| 亚洲。日韩。欧美| 中出789在线视频| 色综合潮| 丁香五月激情综合国产| 亚洲国产精品无石码久久| 欧美老妇综合网| 日韩精品人妻一| 99国产精品免费| yellow网站免费观看日韩高清无码| 精品国产91av一区二区三区| 五月激情综合网| 夜夜嗷嗷一区二区| 久久久青青草| 九九探花视频在线观看| 女人妻一区| 97天天| 三级网色| 九九国产热| TS人妖另类精品视频系列| 亚洲成a人在线观看久| 磁力99AV| 国产精品精品系列在线观看| 国产 日韩 欧美 人妻 熟女 中文| 玖玖爱一区在线| AV在线性爱| 高树玛利亚无码流出| 日日摸日日弄日日拍| 亚洲免费成人在线高清无码视频| 蜜桃视频精品一区二区| 久久大香蕉97| 天天天天天干夜夜夜夜夜操| 久久国产999| 中国女人内射6XXXXX| 国产视频第2页| 久久人人爽爽人人爽人人片αV| 亚洲、日韩、综合、另类| 亚洲无线观看久久| 久操大香蕉手机视频在线看| 97伊人| 女人爽到高潮久久久| 蜜臀中文字幕| 色女99一级片在线观看| 国产亚洲深夜激情| 久久伊人青青草| 色综合久| 精品国产乱码久久久久久蜜臀| 熟女丰满人妻一区| 丰满美女一级毛片在线播放| 久久噜| 91碰碰碰| 国产一区二区三区免费视频在性观看 | 色欲天天综合网| 久久国产热视频97电影| 夜夜操av亚洲一区二区| 夜夜夜夜久久久久| 国产高清26uuu| 后入人妻无码| 久久久久78| 欧美久久草熟女| 中文字幕亚韩| 天天视频黄网站| av三级电影在线播放| 久久禁| 国模精品一区二区三区苹果色戒| 国产白丝AV| 亚洲色入欧美| 天天香香欲综合| 欧美福利视频啊啊啊啊| 加勒比综合网| 国产无套粉嫩白浆在| 四虎在线免费视频| 欧美激情综合| 日韩亚洲Av人人夜夜澡人人爽| 九色在线熟女国产黑人| 久久久久无码| 国产精品4p在线观看| 美国黄片aaa| 337p大胆噜噜噜噜噜91Av| 大香蕉99999| 97亚洲色图| 骚货操死你| aV中文麻| 久久啊啊| 国产日本顶级一区二区三区| 91热热色| 久99在线免费观看视频| 丝袜视频网国产90| 国产尤物在线三区| 欧美黑人168页欧美黑人167| 亚洲熟女乱色一区二区三区久久久 | AVE乱伦| 亚洲人妻中文在线视频| 色在线综合| 色网在线视频观看免费| 亚洲成熟国产精品美女| 亚洲 欧美日韩 另类| 国产精品99久久久www| 色婷婷基地| 人妻精品综合中文字幕在线| 精爱久久| 台湾佬中文娱乐网久久久久久久久久com | 一级性爱视频免费观看| 国产无码高清操逼视频| 青青伊人这里只有精品| 国产精品一区二区黄片| 欧美色图亚洲色图成人在在线| 久草视频制服诱惑| 哑洲在线| 人人操人人爽人人操人人| 无码高清专| 日本人体九九九九九九| 亚洲老司机123专区| 在线视频资源| 狠狠色狠狠色狠狠五月| 91久久婷婷| 新精精品久久精品| 1240青青草一区二区三区视频天爱| 国产精品懂色tv影视免费观看| 国产久久成人| 91天美免费| 蜜乳AV网址| 亚洲阿v天堂无码z2018| 密乳AV免费观看| 日日噜噜夜夜狠狠视频无| 欧美人体性爱互联网第一页婷婷日本| 99热这里只有精品18| 99久热精品99re6热| 成人三级片无码| 综合亚洲网| 清清一区二区三区四区不卡视频| yw尤物av无码点击进入麻豆| 人人超碰在线观看黄| 99综合免费视频| 国产精品久久久久久亚洲色欲| 欧美色997| 中文不卡视频| 曰韩精品九九无码| 国产精品自拍视频| 欧美亚洲特P| 国产黄色在线播放观看| 久噜噜| 国产suv一区二区三区6| 天天干夜夜操一区二区| 亚洲欧美不卡线| 欧美综合另类| 97操97干| 欧美色图97| 视频黄站| 日韩欧美tv一区二区在线观看| 牛牛久久国产精品视频一二三| 亚洲乱色熟女一区| 日本不卡一区二区三区| 日韩av乱伦| 日韩成年人性爱视频| 狠插 制服 自拍| 看日韩操逼| 国产精品香蕉| 在线亚洲丝袜视频网站| 337p大胆噜噜噜噜噜91Av| 亚洲欧美综合| 免费看国产大AB| 极品丝袜无码| 粉嫩绯色AV一区二区在线| 免费试看60秒| 国产日韩中文字幕欧美| 97精品国产97久久久久久| 久久久久亚洲av综合波多野制衣| 97精品人妻一二三四| 亚洲男人天堂网久久| 欧美中出1| 性久久| 久久 精品| 91中出在线| 午夜福利区| 97干在线看| AV综合中文字幕干| 欧美丝袜制服久久| 可以在线观看的黄色网址| 国产精品久久久久婷婷二区次| 91久久久久久久| 九九十八精品| 三级片大波波| 91亚洲青青草原精品1区| 啊视频在线| 国产AV高清AV无码| 91呆哥人妻| 国产剧情AV不卡在线观看| 亚洲导航深夜福利| 国产成人自拍视频视频| 在线岛| 久久亚洲欧美中文字幕国语 | 天天操天天舔| 午夜福利视频在线一区| 秋霞曰韩R级| 国产69精品久久久久99尤物| 一本一道波多野毛片中文在线| wwwxxx日本爽| 国产不卡免费在线视频| 天天日天天干天天整| 嗯嗯啊啊日韩精品| 97av在线观看| 欧美在线色图| 亚洲 欧美 手机在线观看| 久久激情视频| 另类av综合久久| 天天爽天天操| 91av一区二区在线观看| 1024午夜激情男人的天堂| 九九热九九| 毛片久久| 丁香五月婷婷五月| 精品176精品2| 中文字幕一区二区三区字幕| 成人在线视频网| 天天干2区3区| 国产精品美女视频诱惑| 免费看欧美美女黄色大片| 丁香色五月 97干| 欧美中文狠| 2017天天操天天日| 91精品国产麻豆国产自产在| 欧美综合天天| 亚洲欧美另类图片| 国产精品国产精品国产| 九九九九97| 超碰九7免费| 偷窥自拍A片| 大香蕉欧美伊| 婷婷婷婷婷婷久久久久| 亚洲一区二区三区AV无码| 青青操少妇| 精品人妻一二三| 久久xx| 国产精品96| 日韩人妻 中文字幕| 国产精品 亚洲情色| 大香蕉淫人| 亚洲欧美经典一区二区| 日本淫穴在线| 久久久精品电影| 在线人妻熟女一区二区三区四区五区| 国产黑白丝在线| 破苞ⅩXXX性无码动漫无码| 人妻五十路在线| 日韩丰满熟妇| 久欲AV| 久久亚洲婷婷| 蜜臀AV一区二区三区| 婷婷综合久久| 97超碰精品| 欧美亚洲20p| 成人麻豆av电影网站| 风月影院男女十八禁| 国产精品久久久久久片| 91亚.色| 日本三级韩三级99久久| 91色综合| 欧美偷偷网| 久久久无码国精品无码三区三区| 熟妇人妻精品一区二区| 偷拍亚洲高清图片| 亚洲 日韩 丝袜 熟女 变态| 国产精品久久久久久久久久二区三区| 中文字幕性感少妇av| 中文乱码字幕观看| 综合av影片| 99热成人| 欧美成人性爱视频免费观看 | 欧美一级在线观看成人| 18岁禁 茉莉成人久久| www.色操逼| 性爱网站一区二区| 欧美丝袜中文字幕07在线| 天天碰操中国年青熟妇| 97任你吞精| 狠狠操官网| 一区二区影视| 久久天堂网| 日本黄色裸日本黄色裸体| 欧美日韩另类字幕中文| 欲色综合| 91快色色色色色| 91国产精品熟女| 69久久| 免费A V在线| 久久97资源 网| 日韩精品资源专区二区| 天天干天天操天天干天天操| 欧美丰满少妇xx高潮| A 天堂| 九九九九精品| 精品无码久久久久久久杏吧| 精品国产乱码久久| 欧美日韩黄片精品在线| 欧美一级久久久丰满| 国产精品久久久久久久AV大片 | 亚欧美综合网。| 久久久久13| 国人欧美精品一区二区| 中文字幕精品资源在线| 日日干夜夜操视频h| 都市久久精品激情亚洲| 青青草华人在线欧美在线| 中文字幕成人理论在线| 91成人久久| 操逼国产免费| 精品性爱一区二区| 欧美在线干| 久久本道| 极品久久久久久久久久久久久久| 天天天天做夜夜夜夜做| 中文字幕诱惑制服人妻丝袜美丝袜美| 99精品人人爽| 99热婷婷一区二区三| 久久色网| 无色无码| 亚洲91少妇| 日本精品久久久久久久| 97欧美色| 国产福利一区二| 美国精品国产精品| 久久婷婷视频| 欧美夜色| 91骚熟女| 国产欧美一区激情交| 大香蕉伊人网WWWn0n| 中文字幕第95页| 日韩无码视频黄色| 亚洲天堂 视频你懂的| 色诱avtt| 亚洲欧美综合| 大屁股xxxxx| 高清肉丝中文无码| 综合伊人网12色| 丁香六月婷婷久久综合| 啊啊啊啊好疼视频| 成人一道本免费视频| 欧美少妇熟女| 天天操天天舔| 自慰白浆在线观看| 97久久国产精品| 青青操综合网| 天堂涩涩| 亚洲黄色a级片| 97视频在线视频| 一级特黄aaa大片在线观看成人一级片在线观看 | av在线人气| 日本精品五区| 97AV爱| 又大又大又大又粗爽高潮观看 | 芊芊操逼视频无码| 九九九九日本| 国产熟女完整版中字| 国产乱人妻精品入口| 久久久久久亚洲中文| 亚洲超碰在线| 天天艹天天日| 色欲人妻一区二区在线| 国产日韩手机视频在线| 久久99草| 怡红院一区二区熟女人妻| 久操av在线| 久久婷五月天| 亚洲一区在线观看欧洲| 亚洲综合贴图91 | 亚洲有码视频二区| 国产精品一区二区三区在线| 欧美色图亚洲色| 啊啊啊啊好爽好舒服一区二区易域| 国产久久久久久| 亚洲精品一二牛牛| 污污汅18禁网站在线永久免费观看| 高潮毛片无遮挡高清免费| 婷婷超| 91亚.色| 99热成人| 免费毛片在线播放| 天天干天天操天天操夜夜操天天操 | 乱日视频| 国产性爱乱伦AV| 欧美一级A一级a爱片久久| 久久999久| 丰满人妻一区二区三区四| 男人的午夜天堂| 啊啊啊啊啊啊啊啊啊啊在线观看| 五月天黄色激情视频| 成人日本视频人妻在线| 久久亚洲日韩国产欧| 色色色网站| 人妻 中文 日韩| 久久久精品中文字幕爱豆| 九九九久久久W精品| 久久精品六区| 免费视频a级毛片免费视频| 男人天堂婷婷五月天校园春色| 97天天在线| 日韩精品人妻系列无码天堂| 欧美另类色图片| 久久精品美女一区| 午夜精品久久久久久久99蜜桃一| 国产精品久久久无码aV去| 亚洲色图91| 国产精品白丝| TS人妖另类精品视频系列| 天天综合网~91| 国产精品香蕉| 日韩免费簧片| 欧美综合国产精品久久丁香| 日韩欧美大片免费高清啪啪| 国产黄色视频久久| 亚洲一区在线观看欧洲| 伊人黄色片| 波多野结衣先锋影音| 午夜久久无码1000合集| 激情干在线| 天美传媒国产原创中文字幕亚洲欧美另类| 大香网伊人久久综合| www.狠狠干.coom| 啊操爽品善一区二区三区| 中出后入| 美女啊啊啊啊啊| 久久久久亚洲av综合波多野制衣| 福利视频一区二区微拍| 美女刺激久久国产欧美| 国产久久一区二区三区野外在线| 传媒免费一区二区三区| 嗯嗯啊啊啊好爽| 99久久久久久亚洲精品不卡| 91高清无码下载| 男人的天堂不卡一区二区| 国产精品欧美激在线| 日本二三四区| 思思热免费在线视频| 翘臀vidoes| 久久熟女嫩草成人片免费| 精品日韩人妻精品一二三区| 亚洲偷拍自拍在线视频| av大香蕉网站| 丝袜 中出 制服 人妻 美腿 中文字幕| 欧亚无码视频| 天天色悠悠激情| 校园春色美腿丝袜 | 亚洲天天更新| 男女国产精品| 国产精品久久久久久久电影渣男| 成年人一级黄色毛片大全在线观看| 色九月| 色婷婷综合久久中文字幕雪峰| 国产吹潮女在线观看| 色吧 综合| 国产第25页在线观看| 激情四射婷婷四五月天| 欧美色综合图片| 一区二区三区国产在线播放 | 亚洲美女 晚间男人天堂 | 92人人操人人| 亚洲精品欧洲精品| 好吊色综合| 欧美日韩中文亚洲v在线综合| 精品视频97| 女生久久网| 日本黄 R色 成 人网站| 加勒比av中文| AAAA欧美日韩| 天天色香欲综合网| 国产精品禁久久久精品| 人人看人人爰人人操 | 丁香九月激情| 青青草色插素人| 韩国三级一线观看久| 丁香六月激情| 四虎免费在线播放| a天堂视频| 亚洲自拍欧美色综合| 国产乱伦搜索结果91P| 大香交伊人网| 91亚洲最新在线| 国产美女高潮叫床视频| 精国久久一区二区三区98| 成人97人人超碰人人| 亚洲美女精品| 精品国产Av无码久久久伦古装| 丁香五月天啪啪| 久九九九九九九九热| 极品色www影院| 激情文学亚洲| 欧洲熟妇xxXx欧美老妇裸体| 精品无码一区二区人妻久久蜜桃| 亚洲精品人妻在线| 嗯嗯啊好大| 欧美日韩激情无码专区| 成人精品一区二区三区| 亚洲色图欧美色图日韩色图| 日韩午夜国产| 人人操人人摸人人看人人干| 欧美性爱一区二区三区四区 | 嗯啊不要啊在线 | 麻豆AV一区二区| 国产91影院| 97人亚洲综合字幕| 99久久精品无码一区二区毛片免费| 色诱中文字幕| 国产在线激情视频| www. 男人天堂成人在线| 国产偷拍自拍在线视频| 欧美亚洲韩国视频十五区| 天天色综合天天操| 91美女在线| 亚洲 欧美 中文 日韩超碰| 无码高清操逼| 久久精品老司| 美中日韩无码| 久热伊人| 一区麻豆 高清中文字幕| 麻花豆传媒剧国产MV出差| 九九九九九九视频| www.激情| 大JI巴好深好爽又大又粗视频| 超碰在线人妻不卡| 国产大学生口爆吞精合集| 999九九九九国产动| 久久综合九九| 五月丁香黄色网| 蜜臀av中文字幕| 天天日天天色| 国产福利视频精品视频| 五月天加勒比啪| 天天干天天做| 欧美十八禁视频| 欧美亚洲清纯| 日本不卡卡一区| av绯色| 色噜噜国产精品视频一区二区| 九九九综合精品| 国产无马视频| 超碰99re| 亚精品无码毛片一区二区三区| 国产亚洲国产超碰| 欧美真人抽搐一进一出gif| 天天综合站| 人妻夜夜爽天天爽麻豆三区网站 | 国产成人精品日本亚洲语言| 男人午夜天堂| 九九九九九九免费视频| 久久精精区一区二区一蜜桃一区二区| 国内偷自视频区视频综合| 日本在线999| 麻豆一区二区三区精品| 五月天精品| 欧美色视频在线| 亚洲日韩电影| 亚洲欧美一区二区不卡视频播放 | 97操97色| 九九无码视频| 精品成人无码| 91 综合网| 丝袜狠狠草尤物 91| 欧美老熟另类| 国产欧美日韩精品中文| 日日干天天干夜夜爽| 怡春院久久| 香蕉色网| 亚洲男人的天堂一区二区| 日本三级大片| 日韩av不卡在线观看| 亚洲性爱免费电影| 精品视频一二三中文| 99热这里只有精品1| 歐美性天天| 色好看av| 无码又爽又硬又激情免费视频| 五月天婷精品激情| 日本免费人成视频播放120秒| 草草草视频在线免费看| 成人日本片久久久蜜桃| 蜜桃不卡一区二区| 人妻久久久| 国产婷婷综合在线观看| 激情文学 亚洲图片| 玖玖视频在线资源一区二区三区| 国产激情在线| 久久久无码av精| 91社操逼| 亚洲精品白浆高清久久久久久| 97香蕉网| · —级AA伦aa坐爱午夜极速ⅴA一区天天噪天天噪天天噪 | 欧美97爱| 久久高潮妇女视频| 国产日韩怡红院| 午夜经典| 中文字幕av一区二区三区人妻少妇| 久久精品国产精品| 免费亚洲国产精品久久一区| 久久日本熟妇熟色高清 | 一级片在线观看高清无码| 豆花视频操逼网址| 国产AAAAAABBBBB| 日本性爱欧美性爱| 熟女久久| 九九热这里只有在线精品视 伊人草 成人菠萝蜜视频在线观看 | 亚洲欧美中文日韩视频中国语 | 另类图片五月天| 黄页网站成人免费| 啊啊啊啊好疼| 精品无码少妇| 亚洲精品99999| 精品视频一区二区| 五月丁香黄色网| 激情小说在线视频| 最近2018中文字幕在线高清第一页| 成人性爱免费播放| 热久久国产|