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

ARTICLE DETAIL

資訊詳情

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

Flutter鴻蒙開(kāi)發(fā)實(shí)踐:校園打印店打卡應(yīng)用落地復(fù)盤(pán)

Flutter鴻蒙開(kāi)發(fā)實(shí)踐:校園打印店打卡應(yīng)用落地復(fù)盤(pán) 這幾年校園場(chǎng)景里的應(yīng)用需求越來(lái)越多打印店打卡就是其中一個(gè)典型學(xué)生到店取文件要確認(rèn)訂單、商家要核銷打印任務(wù)、管理員還要統(tǒng)計(jì)使用量。我之前做過(guò)幾版純?cè)鷮?shí)現(xiàn)安卓一套、iOS一套、鴻蒙再一套維護(hù)成本直接失控。后來(lái)?yè)Q成 Flutter 做跨平臺(tái)統(tǒng)一開(kāi)發(fā)再通過(guò)適配分支跑到鴻蒙設(shè)備上整體工作量至少砍了一半。這篇就完整復(fù)盤(pán)一下這個(gè)校園打印店打卡應(yīng)用從選型到落地的全過(guò)程重點(diǎn)放在 Flutter 跨平臺(tái)能力在鴻蒙場(chǎng)景下的真實(shí)表現(xiàn)、工程改造的細(xì)節(jié)以及我在真機(jī)調(diào)試時(shí)踩過(guò)的那些坑。如果你正準(zhǔn)備用 Flutter 開(kāi)發(fā)鴻蒙應(yīng)用或者想了解 Flutter 技術(shù)棧在鴻蒙設(shè)備上的可行性這篇文章應(yīng)該能幫你少走不少?gòu)澛?。我?huì)把工程怎么建、狀態(tài)管理怎么選、組件之間怎么通信、掃碼模塊怎么調(diào)、真機(jī)怎么連、打包怎么配全部按實(shí)操順序?qū)懬宄⒔o出可以直接抄的代碼和配置。1. 為什么這次打卡應(yīng)用選了 Flutter 而不是 ArkTS先聊一個(gè)繞不開(kāi)的問(wèn)題也是團(tuán)隊(duì)里爭(zhēng)論最久的鴻蒙應(yīng)用開(kāi)發(fā)到底該用 ArkTS 還是 Flutter當(dāng)時(shí)的情況是打印店打卡應(yīng)用需要同時(shí)覆蓋三類終端學(xué)生用的手機(jī)安卓、鴻蒙、iOS 都有、打印店商家用的平板以鴻蒙和安卓為主、以及運(yùn)營(yíng)后臺(tái)供管理員查看的 Web 端。如果全走 ArkTS 原生意味著鴻蒙單獨(dú)維護(hù)一套代碼安卓和 iOS 又各一套三個(gè)人維護(hù)三套邏輯光是接口字段對(duì)齊就夠喝一壺的。Flutter 這邊的優(yōu)勢(shì)很直接一套 Dart 代碼編譯出多端產(chǎn)物UI 層完全自繪不依賴系統(tǒng)控件理論上只要渲染引擎能跑界面的表現(xiàn)就能保持一致。尤其對(duì)打卡這種業(yè)務(wù)界面邏輯并不復(fù)雜核心在掃碼、定位、訂單狀態(tài)流轉(zhuǎn)這些跨端做起來(lái)并沒(méi)有太大障礙。但 ArkTS 也不是沒(méi)有吸引力。鴻蒙原生應(yīng)用在調(diào)用系統(tǒng)能力比如藍(lán)牙、NFC、掃碼攝像頭時(shí)最順暢性能也最有保障。問(wèn)題在于鴻蒙原生生態(tài)目前對(duì)第三方庫(kù)的支持還不夠全面尤其是地圖、支付、推送這類服務(wù)偶爾需要自己去對(duì)接鴻蒙 SDK 的原始接口。而 Flutter 社區(qū)生態(tài)里現(xiàn)成的插件更多雖然有些插件在鴻蒙上需要重新編譯適配但至少有現(xiàn)成方案可以參考。最后團(tuán)隊(duì)拍板選 Flutter核心原因有三個(gè)團(tuán)隊(duì)現(xiàn)有技能棧以 Dart 和前端為主上 Flutter 的學(xué)習(xí)成本明顯低于全員轉(zhuǎn) ArkTS。打卡應(yīng)用的核心邏輯訂單狀態(tài)機(jī)、計(jì)數(shù)統(tǒng)計(jì)、時(shí)段計(jì)算可以完全復(fù)用跨端只換 UI 殼子。未來(lái)如果要做微信小程序之外的輕量端Flutter 也能編譯到 Web一套邏輯多個(gè)出口。這里補(bǔ)充一點(diǎn)個(gè)人看法如果你做的應(yīng)用強(qiáng)依賴?guó)櫭商赜械南到y(tǒng)能力比如元服務(wù)、分布式流轉(zhuǎn)、超級(jí)終端聯(lián)動(dòng)那還是老老實(shí)實(shí)走 ArkTS。像打卡這種以業(yè)務(wù)邏輯為核心的場(chǎng)景Flutter 的跨平臺(tái)優(yōu)勢(shì)才能發(fā)揮出來(lái)。順便回應(yīng)一下網(wǎng)上常爭(zhēng)論的ArkTS 和 Flutter 誰(shuí)更流行。我的判斷是短期看鴻蒙原生應(yīng)用商店里 ArkTS 應(yīng)用數(shù)量占優(yōu)但跨平臺(tái)開(kāi)發(fā)者群體中 Flutter 的基數(shù)和生態(tài)豐富度更高。兩個(gè)技術(shù)棧橫向?qū)Ρ榷ㄎ徊⒉皇腔ハ嗵娲腔パa(bǔ)。對(duì)這種中小型校園項(xiàng)目來(lái)說(shuō)哪邊能更快交付、更好維護(hù)哪邊就是正確答案。2. 開(kāi)發(fā)環(huán)境準(zhǔn)備讓 Flutter 工程順利跑進(jìn)鴻蒙設(shè)備環(huán)境和工程配置是整個(gè)過(guò)程中最容易卡殼的環(huán)節(jié)而且報(bào)錯(cuò)信息經(jīng)常不是直接說(shuō)你缺了哪個(gè)依賴而是編譯編到一半彈出一個(gè)看不懂的底層錯(cuò)誤。先說(shuō) Flutter SDK 的版本問(wèn)題。要跑鴻蒙設(shè)備理論上用官方穩(wěn)定的 Flutter 主分支配合 OpenHarmony 適配版本。這里有個(gè)容易踩的坑直接下載官網(wǎng)最新版 Flutter創(chuàng)建工程后連 Ubuntu 的安卓模擬器都沒(méi)問(wèn)題但一連接鴻蒙真機(jī)就提示無(wú)法識(shí)別設(shè)備或者干脆在執(zhí)行構(gòu)建命令時(shí)找不到鴻蒙工具鏈。我在實(shí)操中采用的是這種方式安裝 OpenHarmony 命令行工具并把hdc的路徑單獨(dú)配置到系統(tǒng)環(huán)境變量。在 Flutter 工程中引入鴻蒙平臺(tái)的適配 SDK 路徑讓 Flutter 在構(gòu)建時(shí)能找到對(duì)應(yīng)的編譯器。創(chuàng)建工程后先執(zhí)行一次flutter doctor確認(rèn) Flutter、Dart 和鴻蒙工具鏈的狀態(tài)。Exhibit一個(gè)常見(jiàn)的環(huán)境配置示例以 Windows 下為例# 配置鴻蒙工具鏈環(huán)境變量 export DEVECO_SDK_HOME/path/to/ohos-sdk export PATH$PATH:$DEVECO_SDK_HOME/toolchains # 查看 Flutter 環(huán)境狀態(tài) flutter doctor如果flutter doctor檢測(cè)不到鴻蒙工具鏈不要急著換版本先手動(dòng)檢查環(huán)境變量里的路徑是否存在、版本是否匹配。我之前遇到過(guò) SDK 路徑配了但沒(méi)生效的情況最后是重啟終端才被正確加載。工程創(chuàng)建這一步有個(gè)優(yōu)化小技巧不要用默認(rèn)的計(jì)數(shù)器模板而是直接建一個(gè)空工程再?gòu)牧慵尤氪蚩I(yè)務(wù)模塊。默認(rèn)模板會(huì)帶一堆演示代碼后面清理起來(lái)反而麻煩。我習(xí)慣先創(chuàng)建好目錄結(jié)構(gòu)再動(dòng)手寫(xiě)業(yè)務(wù)。再說(shuō)組件通信的問(wèn)題這也是打卡應(yīng)用里躲不開(kāi)的設(shè)計(jì)點(diǎn)。打印店打卡涉及三個(gè)角色的聯(lián)動(dòng)學(xué)生端需要顯示自己的打卡記錄商家端需要看到實(shí)時(shí)訂單管理端需要統(tǒng)計(jì)匯總。三個(gè)入口如果各自維護(hù)一份狀態(tài)很容易出現(xiàn)數(shù)據(jù)不一致。Flutter 本身的組件通信機(jī)制解決了父子組件之間的數(shù)據(jù)傳遞但是兄弟組件、跨頁(yè)面組件、甚至是跨模塊之間的狀態(tài)同步還是需要一個(gè)統(tǒng)一的狀態(tài)管理層。這個(gè)應(yīng)用我選了 Google 官方推薦的 Provider 方案。原因有兩個(gè)一是它的 API 簡(jiǎn)潔ChangeNotifier加Consumer就能解決絕大多數(shù)場(chǎng)景沒(méi)有引入額外概念上手很快二是它在鴻蒙環(huán)境下的兼容性經(jīng)過(guò)驗(yàn)證不需要特殊適配分支處理。下面具體展開(kāi)說(shuō)一下 Provider 在打卡場(chǎng)景里的實(shí)際寫(xiě)法。3. 打卡核心模塊的狀態(tài)管理與組件通信Provider 的工程落地先說(shuō)需求拆解。打印店打卡應(yīng)用的核心場(chǎng)景是學(xué)生到店后掃碼打卡打卡成功則生成記錄商家在后臺(tái)確認(rèn)訂單屬實(shí)管理員可查看今日打卡報(bào)表。整個(gè)流程中打卡狀態(tài)是全局共享的——學(xué)生端打卡后商家端要立刻看到狀態(tài)變化管理端也要同步更新統(tǒng)計(jì)數(shù)字。如果只在某個(gè)頁(yè)面內(nèi)部處理頁(yè)面一銷毀狀態(tài)就丟了。所以我把全局狀態(tài)統(tǒng)一放進(jìn) Provider 里數(shù)據(jù)模型單獨(dú)建一個(gè)類來(lái)維護(hù)。Exhibit 打卡狀態(tài)的數(shù)據(jù)模型class CheckInState extends ChangeNotifier { ListCheckInRecord _records []; // 今日打卡次數(shù) int get todayCount _records.where((r) r.time.isToday()).length; // 最近一條打卡記錄 CheckInRecord? get latestRecord _records.isEmpty ? null : _records.last; void addRecord(CheckInRecord record) { _records.add(record); notifyListeners(); } void checkout(String recordId) { final index _records.indexWhere((r) r.id recordId); if (index ! -1) { _records[index].status confirmed; notifyListeners(); } } }這里的notifyListeners()是關(guān)鍵它通知所有監(jiān)聽(tīng)該狀態(tài)的組件重新構(gòu)建。學(xué)生端打卡按鈕觸發(fā)addRecord商家端頁(yè)面通過(guò)Consumer監(jiān)聽(tīng)到列表變化自動(dòng)刷新訂單列表。這就實(shí)現(xiàn)了跨頁(yè)面的實(shí)時(shí)聯(lián)動(dòng)不需要手動(dòng)傳參。再聊聊組件通信的具體層級(jí)。Flutter 里父子組件通信最簡(jiǎn)單的方式就是構(gòu)造函數(shù)傳值和回調(diào)比如打卡頁(yè)的按鈕組件接收一個(gè)onCheckIn回調(diào)由父頁(yè)面決定點(diǎn)擊后的業(yè)務(wù)邏輯。但跨頁(yè)面的狀態(tài)同步必須走 Provider 或類似方案否則你只能通過(guò)路由參數(shù)層層傳遞改起來(lái)非常痛苦。我這里把組件通信分成三個(gè)層級(jí)來(lái)設(shè)計(jì)頁(yè)面內(nèi)組件通信用構(gòu)造參數(shù)和回調(diào)簡(jiǎn)單直接。同一模塊內(nèi)跨頁(yè)面通信用 Provider 的ChangeNotifierProvider包裹模塊根節(jié)點(diǎn)??缒K共享數(shù)據(jù)例如登錄信息、打印訂單用全局 Provider同時(shí)配合ProxyProvider做模塊間依賴。實(shí)際運(yùn)行下來(lái)這套分層在鴻蒙設(shè)備上的表現(xiàn)和安卓幾乎沒(méi)有差別熱重載、狀態(tài)恢復(fù)都正常。唯一需要注意的是個(gè)別鴻蒙版本對(duì)ChangeNotifier的銷毀時(shí)機(jī)處理不夠及時(shí)在退出頁(yè)面的時(shí)候偶爾會(huì)收到notifyListeners回調(diào)的警告。我在代碼里加了一個(gè)統(tǒng)一的安全判斷在回調(diào)前先確認(rèn)組件是否仍然掛在組件樹(shù)上。Exhibit 安全判斷的寫(xiě)法if (mounted) { notifyListeners(); }這個(gè)處理看起來(lái)微小但真機(jī)上避免了很多奇怪的崩潰和紅屏提示。4. 打印店打卡的業(yè)務(wù)建模與數(shù)據(jù)設(shè)計(jì)一個(gè)打卡應(yīng)用看似簡(jiǎn)單但如果數(shù)據(jù)模型設(shè)計(jì)得不好等做到報(bào)表統(tǒng)計(jì)那一層會(huì)非常痛苦。尤其是校園打印店這種場(chǎng)景一個(gè)學(xué)生一天可能多次到店一次打印任務(wù)可能涉及多頁(yè)文件、多個(gè)打印參數(shù)如果不提前預(yù)留字段后期擴(kuò)展就得動(dòng)表結(jié)構(gòu)。我在設(shè)計(jì)數(shù)據(jù)模型時(shí)把整個(gè)業(yè)務(wù)拆成了四個(gè)實(shí)體用戶學(xué)生/商家/管理員用角色字段區(qū)分。打卡記錄每次到店取件生成一條記錄包含時(shí)間、地點(diǎn)、訂單號(hào)。打印訂單每頁(yè)的打印參數(shù)、份數(shù)、顏色模式、是否雙面。統(tǒng)計(jì)報(bào)表按天、按周匯總的打卡次數(shù)和打印量。打卡記錄和打印訂單是關(guān)聯(lián)關(guān)系一條打卡記錄可以對(duì)應(yīng)多個(gè)打印訂單因?yàn)閷W(xué)生可能一次取好幾份文件。反過(guò)來(lái)一個(gè)訂單只能對(duì)應(yīng)一條打卡記錄這樣在商家確認(rèn)環(huán)節(jié)可以直接通過(guò)打卡記錄反查訂單詳情。Exhibit 打卡記錄的核心字段設(shè)計(jì)字段類型說(shuō)明idString唯一ID使用時(shí)間戳加隨機(jī)數(shù)生成userIdString打卡用戶學(xué)生IDstoreIdString打印店IDorderIdsListString關(guān)聯(lián)訂單ID列表timeDateTime打卡時(shí)間locationString打卡地點(diǎn)通過(guò)定位或掃碼獲取statusint狀態(tài)0待確認(rèn)1已確認(rèn)2已取消訂單表還會(huì)記錄打印頁(yè)數(shù)、單價(jià)、合計(jì)金額等信息。這里有個(gè)實(shí)際經(jīng)驗(yàn)打印店的計(jì)費(fèi)規(guī)則很靈活有的按黑白頁(yè)收費(fèi)有的按彩色頁(yè)收費(fèi)還有的包含裝訂費(fèi)。在設(shè)計(jì)金額字段時(shí)最好把費(fèi)用明細(xì)做成一個(gè) JSON 字符串存起來(lái)而不是拆成多個(gè)列。因?yàn)橛?jì)費(fèi)規(guī)則經(jīng)常變把明細(xì)打包成 JSON改計(jì)費(fèi)邏輯時(shí)只改前端計(jì)算邏輯數(shù)據(jù)表結(jié)構(gòu)不用動(dòng)。這種設(shè)計(jì)在 Flutter 側(cè)就用 JsonSerializable 來(lái)序列化寫(xiě)模型類的時(shí)候加注解自動(dòng)生成 fromJson 和 toJson省掉很多手寫(xiě)模板。當(dāng)時(shí)我還對(duì)比過(guò)手寫(xiě)和 codegen 兩種方式實(shí)測(cè)直接手寫(xiě)字段映射在模型少的時(shí)候更快模型超過(guò)五個(gè)字段之后還是 codegen 更穩(wěn)尤其是字段重命名時(shí)不容易漏改。打印店的業(yè)務(wù)有個(gè)特殊性高峰期集中在中午下課前后同一時(shí)間可能幾十個(gè)學(xué)生同時(shí)到店取件。數(shù)據(jù)模型設(shè)計(jì)好了以后后端接口還需要處理并發(fā)打卡的冪等問(wèn)題。我的做法是打卡記錄的主鍵用userId 年月日 自增序號(hào)的復(fù)合格式保證同一個(gè)學(xué)生同一分鐘內(nèi)的多次打卡不會(huì)因?yàn)椴l(fā)請(qǐng)求造成重復(fù)數(shù)據(jù)。5. 打印店打卡的核心界面實(shí)現(xiàn)從掃碼到狀態(tài)同步界面這一塊我按用戶角色拆成三個(gè)端來(lái)做但共享同一套組件庫(kù)和主題。為什么強(qiáng)調(diào)共享因?yàn)?Flutter 的優(yōu)勢(shì)就在于一套組件可以在不同入口復(fù)用如果每個(gè)端都單獨(dú)寫(xiě)一套頁(yè)面那就白用 Flutter 了。學(xué)生端的核心頁(yè)面是掃碼打卡頁(yè)。這個(gè)頁(yè)面的邏輯其實(shí)很簡(jiǎn)單一個(gè)掃碼窗口一個(gè)顯示結(jié)果的狀態(tài)區(qū)域一個(gè)手動(dòng)補(bǔ)卡的入口。我把掃碼能力封裝成了一個(gè)獨(dú)立的 Widget底層調(diào)用攝像頭權(quán)限并識(shí)別二維碼識(shí)別結(jié)果回調(diào)到上層。Exhibit 掃碼頁(yè)面的骨架class ScanCheckInPage extends StatelessWidget { Futurevoid _handleScanResult(String result) async { // 解析二維碼中的打印店ID和訂單號(hào) final parsed await _parseQrCode(result); // 調(diào)用打卡接口向 Provider 寫(xiě)入新記錄 _checkInProvider.addRecord(parsed); // 跳轉(zhuǎn)到打卡結(jié)果頁(yè) Navigator.push(...); } override Widget build(BuildContext context) { return Scaffold( appBar: AppBar(title: Text(掃碼打卡)), body: Column( children: [ ScannerView(onScanned: _handleScanResult), ConsumerCheckInState( builder: (context, state, child) { return Text(今日已打卡 ${state.todayCount} 次); }, ), ], ), ); } }掃碼頁(yè)需要注意一個(gè)攝像頭權(quán)限的適配問(wèn)題鴻蒙的權(quán)限彈窗和安卓的權(quán)限請(qǐng)求不是同一套機(jī)制直接用現(xiàn)成插件很可能在鴻蒙上拿不到返回結(jié)果。我在鴻蒙真機(jī)上遇到的情況是插件可以打開(kāi)攝像頭畫(huà)面但識(shí)別到二維碼后回調(diào)遲遲不觸發(fā)。排查下來(lái)發(fā)現(xiàn)是插件內(nèi)部對(duì)鴻蒙授權(quán)結(jié)果的處理還沒(méi)有對(duì)齊后面通過(guò)修改插件的原生側(cè)代碼才解決。商家端則是訂單確認(rèn)頁(yè)。商家登錄后可以看到待確認(rèn)的打卡列表每一條都關(guān)聯(lián)具體的打印訂單點(diǎn)擊確認(rèn)后狀態(tài)從待確認(rèn)變成已確認(rèn)統(tǒng)計(jì)報(bào)表同步刷新。這個(gè)頁(yè)面用到了 Provider 的Consumer來(lái)監(jiān)聽(tīng)整個(gè)打卡列表的狀態(tài)變化當(dāng)學(xué)生端新增打卡記錄時(shí)商家端的列表會(huì)自動(dòng)插入新行不需要手動(dòng)去刷新接口。如果兩個(gè)角色所在的設(shè)備不是同一臺(tái)就需要后端接口配合長(zhǎng)連接或輪詢來(lái)同步。我的第一版實(shí)現(xiàn)是純前端狀態(tài)管理后來(lái)加了 WebSocket 推送才真正做到學(xué)生掃碼后商家端秒級(jí)顯示。這里如果你用 Provider 只做前端狀態(tài)很容易忽略后端同步的問(wèn)題我建議在設(shè)計(jì)階段就把接口推送納入打卡鏈路不要只圖前端省事。管理員端是報(bào)表頁(yè)本來(lái)打算用圖表庫(kù)畫(huà)柱狀圖后來(lái)發(fā)現(xiàn)打印店的實(shí)際需求就是看一張數(shù)字匯總表哪個(gè)時(shí)段人多、哪個(gè)套餐打印量高就夠了。圖表反而花哨且不實(shí)用最后我就用簡(jiǎn)單的列表加數(shù)字卡片實(shí)現(xiàn)了。6. flutter 真機(jī)調(diào)試記錄連接、構(gòu)建與熱重載的避坑清單真機(jī)調(diào)試是這次開(kāi)發(fā)里讓我最有收獲的部分也是報(bào)錯(cuò)最多的部分。這里記錄的每一條都是我實(shí)際踩到過(guò)的不是從文檔里抄來(lái)的理論。先說(shuō)說(shuō)設(shè)備連接。鴻蒙真機(jī)連接電腦調(diào)試和安卓一樣需要開(kāi)啟開(kāi)發(fā)者模式但有個(gè)細(xì)節(jié)鴻蒙系統(tǒng)默認(rèn)把USB 調(diào)試選項(xiàng)藏在更深的層級(jí)里你需要連點(diǎn)版本號(hào)進(jìn)入開(kāi)發(fā)者選項(xiàng)再額外打開(kāi)USB 調(diào)試下面的僅充電模式下允許 ADB 調(diào)試開(kāi)關(guān)。如果不開(kāi)這個(gè)電腦端檢測(cè)到的設(shè)備狀態(tài)永遠(yuǎn)是 offlineflutter devices里看不到設(shè)備更別提跑項(xiàng)目了。Exhibit 連接檢查的常用命令# 查看已連接的設(shè)備列表 flutter devices # 查看鴻蒙設(shè)備的 hdc 連接狀態(tài) hdc list targets # 如果離線可以嘗試重啟 hdc 服務(wù) hdc kill hdc start連接成功后跑項(xiàng)目大概率會(huì)遇到第一個(gè)報(bào)錯(cuò)Gradle 或構(gòu)建鏈配置問(wèn)題。這個(gè)報(bào)錯(cuò)在熱搜詞里也出現(xiàn)過(guò)you are applying flutters main gradle plugin imperatively using the apply(s,e/flutter (31173))大致意思是 Flutter 的 Gradle 插件和工程中已有的插件配置方式?jīng)_突。這個(gè)問(wèn)題的解決方式很簡(jiǎn)單在android/settings.gradle和android/build.gradle中把 Flutter 插件從apply腳本式改成現(xiàn)代插件聲明式。具體來(lái)說(shuō)在settings.gradle里加上pluginManagement的倉(cāng)庫(kù)配置然后在各個(gè)模塊的build.gradle里通過(guò)plugins { id com.android.application }方式聲明不再使用apply plugin:。Exhibit 關(guān)鍵配置片段pluginManagement { repositories { google() mavenCentral() gradlePluginPortal() } }改完配置文件后記得在命令行執(zhí)行清理構(gòu)建flutter clean flutter pub get flutter run如果只改配置不執(zhí)行flutter clean舊構(gòu)建緩存仍然生效報(bào)警也不會(huì)消失。熱重載這塊也值得一提。flutter run在鴻蒙真機(jī)上的熱重載體驗(yàn)總體還行但有個(gè)小問(wèn)題改了原生側(cè)代碼比如修改了某個(gè)鴻蒙原生模塊的 Kotlin 代碼之后普通的熱重載不會(huì)生效必須重新編譯運(yùn)行。我后來(lái)養(yǎng)成習(xí)慣純 Dart 邏輯的改動(dòng)直接熱重載涉及原生能力的改動(dòng)一律執(zhí)行完整重啟別省那點(diǎn)時(shí)間。更隱蔽的是定位權(quán)限。打印店打卡場(chǎng)景里打卡時(shí)需要記錄位置學(xué)生每次掃碼前要保證定位權(quán)限已開(kāi)啟。鴻蒙系統(tǒng)在定位權(quán)限上比安卓更嚴(yán)格定位服務(wù)需要同時(shí)在應(yīng)用層和系統(tǒng)層同時(shí)授權(quán)。我在真機(jī)上遇到的坑是第一次授權(quán)彈窗點(diǎn)擊允許后應(yīng)用確實(shí)拿到了權(quán)限但一旦切后臺(tái)再回前臺(tái)權(quán)限狀態(tài)會(huì)被重置。最后繞過(guò)的辦法是在頁(yè)面onResume里周期性地重新檢測(cè)權(quán)限狀態(tài)如果沒(méi)有權(quán)限就彈窗引導(dǎo)用戶去設(shè)置頁(yè)手動(dòng)開(kāi)啟。7. 性能優(yōu)化Impeller 渲染引擎在鴻蒙設(shè)備上的表現(xiàn)Flutter 的渲染引擎這幾年的變化很大從 Skia 逐步切換到 Impeller。Impeller 是為高性能圖形渲染設(shè)計(jì)的核心優(yōu)勢(shì)是預(yù)編譯著色器從根本上解決了 Skia 在部分設(shè)備上首次渲染掉幀的問(wèn)題。打印店打卡應(yīng)用界面不算復(fù)雜動(dòng)畫(huà)也不多但掃碼頁(yè)面的相機(jī)預(yù)覽和結(jié)果頁(yè)的列表滾動(dòng)都依賴穩(wěn)定的渲染幀率Impeller 在這類場(chǎng)景下的表現(xiàn)明顯比 Skia 順滑。鴻蒙真機(jī)的 GPU 型號(hào)五花八門(mén)老款平板的 GPU 驅(qū)動(dòng)對(duì) Skia 的兼容性尤其差滾動(dòng)列表時(shí)偶爾出現(xiàn)白屏閃爍。切到 Impeller 之后這類問(wèn)題幾乎消失。切換方式是在main.dart里配置渲染引擎參數(shù)void main() { // 啟用 Impeller 渲染引擎 const String.fromEnvironment(FLUTTER_ENGINE, defaultValue: impeller); runApp(const CheckInApp()); }實(shí)際構(gòu)建時(shí)也可以在運(yùn)行命令里指定flutter run --enable-impeller需要說(shuō)明的是Impeller 對(duì)鴻蒙的支持是一個(gè)漸進(jìn)的過(guò)程。如果遇到某個(gè)鴻蒙版本的驅(qū)動(dòng)不兼容 Impeller回退到 Skia 也只需要改一個(gè)環(huán)境變量不需要?jiǎng)訕I(yè)務(wù)代碼。這算是 Flutter 框架在設(shè)計(jì)上給自己留的后路對(duì)開(kāi)發(fā)者來(lái)說(shuō)很友好。另一個(gè)性能優(yōu)化點(diǎn)跟列表渲染有關(guān)。打卡記錄會(huì)隨著學(xué)生使用次數(shù)不斷累積如果直接用ListView.builder渲染全部數(shù)據(jù)長(zhǎng)列表一樣會(huì)卡。Flutter 的ListView.builder雖然做懶加載但如果不加緩存策略快速滑動(dòng)時(shí)還是會(huì)出現(xiàn)空白項(xiàng)。我給打卡列表加了一個(gè)cacheExtent參數(shù)并控制每個(gè)列表項(xiàng)的高度讓滾動(dòng)體驗(yàn)保持在流暢狀態(tài)。Exhibit 列表優(yōu)化代碼ListView.builder( cacheExtent: 500, itemCount: records.length, itemBuilder: (_, index) CheckInListItem(record: records[index]), )這套優(yōu)化在打印店高峰期特別有用。學(xué)生掃碼后商家端列表同時(shí)插入大量新記錄如果沒(méi)有緩存策略滑動(dòng)到標(biāo)記位置時(shí)頁(yè)面會(huì)短暫抖動(dòng)影響操作效率。8. 打包發(fā)布鴻蒙應(yīng)用簽名的細(xì)節(jié)與配置檢查打包發(fā)布是開(kāi)發(fā)流程的終點(diǎn)但也是問(wèn)題最多的地方。鴻蒙應(yīng)用打包有兩種模式調(diào)試包和發(fā)布包。調(diào)試包可以直接運(yùn)行在真機(jī)上但應(yīng)用圖標(biāo)、名稱、權(quán)限聲明都受限。發(fā)布包需要簽名簽名配置不對(duì)的話應(yīng)用在部分設(shè)備上會(huì)閃退。我按官方文檔配置簽名時(shí)遇到了一個(gè)細(xì)節(jié)問(wèn)題簽名文件路徑中的反斜杠在 Windows 環(huán)境下被錯(cuò)誤解析導(dǎo)致簽名失敗。解決辦法是把簽名配置寫(xiě)到build-profile.json5的signingConfigs節(jié)點(diǎn)里使用相對(duì)路徑并在構(gòu)建時(shí)打印出的日志中確認(rèn)生成的哈希值與配置的哈希值一致。發(fā)布前還需要檢查權(quán)限聲明。打卡應(yīng)用至少需要相機(jī)掃碼、位置記錄地點(diǎn)、網(wǎng)絡(luò)同步數(shù)據(jù)這三類權(quán)限。在鴻蒙的配置文件中權(quán)限聲明使用module.json5里的requestPermissions節(jié)點(diǎn)如果忘記聲明某條權(quán)限應(yīng)用運(yùn)行時(shí)調(diào)用對(duì)應(yīng)功能會(huì)直接閃退而且報(bào)錯(cuò)信息未必能指向權(quán)限問(wèn)題。Exhibit 權(quán)限聲明示例{ module: { requestPermissions: [ { name: ohos.permission.CAMERA }, { name: ohos.permission.LOCATION }, { name: ohos.permission.INTERNET } ] } }打包完成后建議先在一臺(tái)舊設(shè)備、一臺(tái)新設(shè)備上分別安裝測(cè)試。鴻蒙系統(tǒng)版本跨度比較大老機(jī)型對(duì) Impeller 和部分原生插件的支持與新機(jī)型有差異提前覆蓋能避免上線后被用戶投訴。我還遇到一個(gè)跟 WebView 相關(guān)的問(wèn)題。打卡應(yīng)用的打印訂單預(yù)覽需要在應(yīng)用內(nèi)展示 PDF 文件我最初用的是 Flutter 自帶的多媒體組件但在鴻蒙上對(duì) PDF 的支持不完整。后來(lái)?yè)Q成一個(gè)簡(jiǎn)單的原生視圖來(lái)承載 PDF 預(yù)覽才徹底解決。如果你也有類似的內(nèi)嵌文檔展示需求建議提前確認(rèn)好鴻蒙平臺(tái)是否有對(duì)應(yīng)可用的原生模塊別等到打包階段再返工。發(fā)布到鴻蒙應(yīng)用商店之前還需要審核應(yīng)用名稱和圖標(biāo)是否符合平臺(tái)規(guī)范。打卡應(yīng)用的圖標(biāo)和名稱可以根據(jù)自己的品牌設(shè)計(jì)但要注意不能使用包含誤導(dǎo)性或夸大宣傳的文案審核不通過(guò)很常見(jiàn)的就是名稱里出現(xiàn)官方系統(tǒng)級(jí)這類字眼需要仔細(xì)檢查。9. 常見(jiàn)編譯異常與問(wèn)題定位思路最后專門(mén)整理一下開(kāi)發(fā)過(guò)程中遇到的高頻編譯報(bào)錯(cuò)和定位思路。這部分是純粹的踩坑記錄每一條都可能讓你在排查時(shí)多花幾個(gè)小時(shí)。第一類是 Gradle 倉(cāng)庫(kù)拉取失敗。報(bào)錯(cuò)信息通常是一長(zhǎng)串無(wú)法解析的依賴路徑。這種問(wèn)題大多是網(wǎng)絡(luò)環(huán)境導(dǎo)致的配置國(guó)內(nèi)鏡像倉(cāng)庫(kù)可以緩解但要注意 Flutter 的公共依賴不僅存在 Maven 倉(cāng)庫(kù)還有 Google 的倉(cāng)庫(kù)需要同時(shí)配置多個(gè)鏡像源。在國(guó)內(nèi)服務(wù)器上下載依賴尤其容易出現(xiàn)中斷反復(fù)重試不如一次性把鏡像配好。第二類是 Dart 插件與原生模塊的版本不匹配。Flutter 生態(tài)里很多插件在鴻蒙上沒(méi)有現(xiàn)成的原生實(shí)現(xiàn)需要自己編寫(xiě)鴻蒙側(cè)的 Module 移植代碼。這個(gè)過(guò)程中報(bào)錯(cuò)最多的是No implementation found for method之類的錯(cuò)誤意思是 Dart 側(cè)調(diào)用了一個(gè)原生方法但原生側(cè)壓根沒(méi)有注冊(cè)。排查思路很簡(jiǎn)單先檢查原生代碼里是否實(shí)現(xiàn)了插件注冊(cè)的對(duì)應(yīng)方法再檢查工程里是否遺漏了dependencies塊里的插件引用最后檢查插件名是否與pubspec.yaml中的一致。第三類是第三方 SDK 接入問(wèn)題時(shí)出現(xiàn)的符號(hào)沖突。打卡應(yīng)用的登錄功能接入了第三方認(rèn)證 SDK在鴻蒙真機(jī)上編譯時(shí)提示 duplicate class。這個(gè)問(wèn)題的根源是第三方 SDK 與項(xiàng)目里的某個(gè)模塊存在同名類按照?qǐng)?bào)錯(cuò)信息中給出的路徑把其中一個(gè)模塊的依賴排除掉即可。定位編譯問(wèn)題有個(gè)通用思路先看最底層的報(bào)錯(cuò)行不要被上面的信息干擾然后定位報(bào)錯(cuò)涉及的是 Dart 層、原生層還是構(gòu)建工具層最后逐層排查。大多數(shù)報(bào)錯(cuò)都是構(gòu)建工具配置引發(fā)的和業(yè)務(wù)代碼無(wú)關(guān)不要一上來(lái)就懷疑自己的業(yè)務(wù)邏輯寫(xiě)錯(cuò)了。10. 從這次實(shí)戰(zhàn)里提煉出的幾點(diǎn)心得Flutter 做鴻蒙開(kāi)發(fā)的項(xiàng)目實(shí)踐到這里基本完整了。最后聊幾個(gè)我個(gè)人感受最深的地方。第一選好狀態(tài)管理方案能省掉很多組件通信的麻煩。打印店打卡這個(gè)業(yè)務(wù)說(shuō)大不大但涉及三個(gè)角色共享數(shù)據(jù)只要狀態(tài)設(shè)計(jì)不好后期每加一個(gè)頁(yè)面都要重新捋一遍數(shù)據(jù)流。Provider 在這個(gè)規(guī)模下恰到好處再?gòu)?fù)雜一點(diǎn)的場(chǎng)景我會(huì)考慮 Riverpod但普通業(yè)務(wù)真的沒(méi)必要為了技術(shù)而技術(shù)。第二鴻蒙適配的坑大部分在原生側(cè)不在 Flutter 側(cè)。Flutter 框架本身的跨端能力在鴻蒙平臺(tái)上比我預(yù)期中可靠真正讓人頭疼的是各種系統(tǒng)權(quán)限、原生插件、簽名打包的問(wèn)題。在做技術(shù)選型時(shí)最好先把接入的第三方能力全部在鴻蒙真機(jī)驗(yàn)證一遍再?zèng)Q定最終方案。第三行動(dòng)起來(lái)比爭(zhēng)論誰(shuí)更流行更重要。當(dāng)時(shí)團(tuán)隊(duì)內(nèi)部因?yàn)榧夹g(shù)選型反復(fù)開(kāi)了好幾次會(huì)現(xiàn)在回頭看真正推動(dòng)項(xiàng)目落地的不是某個(gè)框架的壓倒性優(yōu)勢(shì)而是團(tuán)隊(duì)在執(zhí)行過(guò)程中持續(xù)解決具體問(wèn)題的能力。如果你手頭正好有類似的校園場(chǎng)景應(yīng)用要做不妨先建一個(gè)空 Flutter 工程把掃碼、定位、列表這些核心能力在鴻蒙真機(jī)上跑通再逐步疊加業(yè)務(wù)邏輯。前期驗(yàn)證階段多花點(diǎn)時(shí)間后面整體開(kāi)發(fā)會(huì)順很多。
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
狠狠干,狠狠操| 久久久天美| 天堂v无码免费视频| 亚洲色人妻综合| 国产网红精品| WWW操逼| 青青草综合在线| 亚洲丝袜天堂| 色欧美天天| 岛国黄色短视频| 91亚洲人| 日韩97P| 精品妇操一区二区三区| 国产a级精品| 国产精品视频精品一二| 日韩三A大片在线观看 | 五月丁香综合| 黄色视频特级毛片| 在线播放一级无码视频| 国产精品高潮久久久无码| 亚洲亚洲亚洲天堂天堂| 日韩中文字幕宗合在线| 中文字幕版| 熟女人妻av在线资源,黄色的资源| 免费少妇一区二区| 老熟妇乱轮| 97欧美精品| 性感美女91影视| 日韩精品人妻中文字有码在线| 成人影 天天操 亚洲| 激情第四色| 日本精品一区二区中文字幕| 91天堂色男人的天堂| 少妇一区二区三区精选| 亚洲国产精品9999在线观看| 操逼视频色| 高清在线不卡一区二区 视频| 超碰九7| 久热热| 国产传媒一区二区三区| 综合97| 97超碰欧美| 可以免费看黄片的视频| 国产成人无码a| 国产兽交视频在线播放| 天天色黄色影院天天操| 中文字幕中文字幕一区二区| 东京热激情视频一二三区| 91操人视频| 久9视频| 91free福利| 欧美网站免费| 亚洲免费日韩在线一区二区| 一本一首道人妻少妇免费久久| 91天堂视频| 九草在线大香蕉| 色娱乐色呦呦夜夜夜夜av| 久久久久久久78| 亚洲色图美腿丝袜| 久久精品区| 国产三级片在线观看| 牛牛AV人人夜夜澡人人爽| 欧美日韩另类在线播放| 一区二区三区欧美激情| 国产一区二区三区中文字幕| 91色五月俺来也| 日韩BBN| 91 欧美| 18禁中文字幕| 91操碰| 花野真衣| 综合九九| 国产精品亚洲无码| 久久丁香五月婷婷| 日韩av色图综合| 天天舔天天日天天射| 亚州五月| 亚洲欧美在线观看免费| 中文字幕老熟妇黄色视频| 亚洲天堂另类小说男人| 呻吟 欧美 日本 中出| 欧美色91| 国产亚洲精品无码三区| 婷婷五月丁香五月| 中文视频在线观看| 日韩女模中文造逼| 少妇内射www在线观看视频| 9美女超碰在线免费观看| 久久黄片国产一区二区| 久碰视频| 黑人干亚洲| 秋霞一集毛片观看| 激情综合五月| 97久久久久久久久久| 五月亭亭六月丁香| 亚洲国产一区二区三区四区国产| 玖玖蜜臀资源网| 亚洲91射| 青娱乐国产盛宴视频| 色综合中文字幕不卡| 亚洲色图伊人网| 思思热国产高清| 婷婷久久五月| 亚洲在线A| 国产亚洲色婷婷久久99精品91葵花宝典 | 五月天大香蕉| 精品免费视频国产一区| AV 少妇 人妻 偷拍| 1.igao73.com 加入收藏 免费专区 国产精品 中文字幕 日韩精品 欧美精品 精彩 | 97色涩| 爱逼综合| 国产又黄又猛又粗又爽的网站| 亚洲中亚日激情视频| 国产一级高跟丝袜| 欧美人人天天网| 人妻干天天| ,国产乱人伦精品一区二区三区| 中文字幕一区二区无码成人 | 伊人操操| 国产高潮AA片免费看| 日本性一区| 精品久久久久av影院| 熟妇高潮一区二| 伊人网免费视频| 日本不卡三级网在线播放| 香蕉视频欧美一卡二卡| 欧美永久激情一区二区| 可以免费看黄片的视频| 九九九九九九精品| 久久久久成人蜜桃精品| 色婷婷一区二区三区久久| 男人天堂2019亚洲| 狠狠91| 啊啊好多水| 97超碰磁| 国产精品久久久九九九| 巨爆乳肉感一区二区三区竹菊影视| 99re在线视频国产| 超碰免费人人| 天天综合网在线观看| 99综合网| 中文精品一区二去| 日韩三级性| 操逼网免费无码视频| 天天干人妻视频| 五月激情综合网| 青草成人免费视频一COm| 中文字幕一区二区三区蜜臀| 色就色综合| 伦理日韩国产久久| 天天影视网综合少妇| 国产辣妈在线视频福利| 日韩性爱毛片操骚逼| 九九九九一级| 日韩人妻资源在线看| 老熟女乱伦片| 欧美乱欲| 97在线青| 欧美狠狠弄| 日韩无码黄色片| 九九九色| 天天插网| 精品欧美日韩在线观看| 小少妇| 国产成人无码a| 九九九九一区| 东北女人| 色色色色色色色色色色色色色色综合| 久久精品国产亚洲AV嘿嘿| 97日韩欧美亚洲| 国产美脚女优尤物在线观看| 国产精品久久久久综合| 人人操 欧美| 天天草AV| 熟妇精品juliaannAV| ?亚洲伊人伊成久久人综合网| 91亚洲网站| 啊啊啊啊操死我了| 亚洲国产综合久久久性感熟妇| 国产一区在线观看无码AV | 另类图片五月天| 樱花蜜乳av| 搡老女人老熟女91老熟女综合网| 国产丸一视频| 夜夜人妻爽| 操操AV电影| 国产熟女乱论| av强奸乱轮| 中文字幕av亚洲精品| 日韩综合色网| 亚洲成人在线资源| 久久精品人妻一区二区三区| 色在线69堂| 观看视频图片一区二区三区| 欧美日韩性感| 亚洲日本成人动漫| 婷婷色综合| 国产99久久99热这里只有精品15 | 不卡免费av在线播放| 高潮毛片无遮挡高清免费| 欧美 亚洲 在线| 中精品一区二区三区| 精产国品一区二三产品| 大香蕉中文网| 亚洲天天精品| 久欲AV| 中文字幕女同在线| 熟妇高潮精品一区二区三区下载| 欧美熟女逼久久久久久| 天天综合网~91入口| 欧美97日韩| 天天综合网久久ww| 亚州中文字幕超碰97| 欧美 青青草| 天天综和| 亚洲 欧美 另类 日韩 人妻一区| 射丝袜大香蕉| 美女91网| 麻豆国产97在线| 免费国产电影一区二区| 高清无码国产亚洲| 久草成人福利导航| 国产极品999| 操学生天天| 伊人久久大香线蕉亚洲五月天,青草青草欧美日本一区二区,欧美日产欧美日产国产 | 殴洲老熟女| 蜜桃色院一区久久| 91日日夜夜| 美国三级日本三级久久99| 欧美一区二区三熟女剧情| 伊人少妇久久久| 怡红院亚洲怡春院av| 亚洲情色无码一区二区三区| 91爱网| 三级日韩一区二区三区| 中文字幕亚洲永久精品| 色九月| 色综合美国| 韩日男人的天堂| 久啪| 男人天堂2030| 亚洲 日本 国产 综合| 女人 A一级| 极品色社| 97欧美色综合| 97超碰色色| 国产亚洲日韩欧| 亚洲五码一区二区三区| 久久亚洲不卡| 九九九九九精品十六| 国产在线激情| 99久久久无码精品国产人| 欧美性爱中文字幕无线码| 欧美色婷婷| 神马久久69| 亚洲欧美洲综合| 97人人夜夜精品视频| 影音先锋国产精品| 豆1无夜无码| 清纯唯美亚洲| 91粉芽高清在线一区二区| 97免费免费视频网| 97超碰久久| 亚洲暴力强奸AV| 久久精品视-一级做a爰片性色毛片16美国-中国女与老外在线精品 | 亚洲本色精品一区二区久久| 99爱爱| 精品一区二区三区四区外站| 百度百度日本操逼| 亚洲午夜免费狠狠干| 91碰碰| 四虎午夜影院| 加勒比综合九九99视频在线播放| 亚洲男人天堂AV| 亞洲久久直播| 色香91| 91人妻精华帖| 亚洲欧美综合色| 亚洲加勒比久久日本道| 日韩三级一区 | 级做a爱无码性色永久免费| 操逼逼无码| 北条麻妃性愛视频| 欧美真人抽搐一进一出gif| 9l视频自拍9l九色成人| 色哟哟av| 国产 日韩 另类 视频一区爱| 北条麻妃性愛视频| 中文字幕精品日韩中文字幕| 91强在线播放| 东北丰满熟女国产一区| 夜夜综合| 人干人人人操人人摸| 妇女视频网站| 亚洲精品尤物yw在线影院| 超碰国产情侣自拍网| 99在线观看视频在线高清| 黑人精品成人一区二区三区| 久久久成人免费av电影| 色乱二区| 亚洲素人综合| 超碰免费人人| 性天堂| 7月婷婷综合| 国产精品96| 超碰97欧美在线| 九九久久玖玖| 久操视频免费观看| 亚洲精品美女久久久久久久久| 日韩丨制服丨中文|在线| 欧美一区二区观看在线| 久久久9 9 9精品| 自拍偷拍 日韩无码| 国产精品69久久久久久久| 亚洲成A∨人影院在线欢看| 茄子社区国产精品| 精品色色| 精品人妻视频入口| 亚洲涩涩| 九九色热| 欧洲性爱无码区| 超碰97最新人妻| 久久久国产三级黄色片| 国产辣妈在线视频福利| 十八禁一区二区无码观看| 高清国产av无码| 精品视频在线观看| 亚洲,欧美,综合网| 丰满人妻一区二区三区四| 91啦人妻| 五月天亚洲网| 欧美少妇大量自拍视频在线观看| 乱伦Av网| 丰满人妻一区二区三区| 精品国产国产AV| 日本三级韩三级99久久| 精品人妻一区二区三区四区石在线| 欧美论理片| 99热思思| 日韩精品资源专区二区| 少妇久久久久久| 东北黄色电影| 尤物视频视频官网| 粉嫩AV输入| 久久久精品国产亚洲AV无码| 久久永久无码人妻视频| 国产1727欧美| 67914亚洲精品| 精品久久久av无码免费| 精品9999| 久久綜合很很很| 9l视频自拍9l九色成人| 岛国大片在线观看网站入口| 亚洲熟妇A V黑人| 伊人国产视频| 99超级碰免费视频| 国产在线观看一区二区三区| 亚州中文字幕超碰97| 久久美女福利是上海美女| 日韩欧无码一区二区三区免费不卡| 久久久久ab| 亚洲 欧美 91| 狠狠色综合网| 操逼日韩无码 | 日韩三级天堂在线观看| 天天看夜夜看日日干| 久射吧| 免费人人搞97| 久久久久久久九九九九九九| 91九九| 最新中文字幕精品在线| 做爱A级亚欧| CCYY草草影院地址入口| 91老熟女视频| 91夜色| 91成人无码| 人妖欧美一区二区| 少妇熟女视频一区二区三区| 日韩av情韩国爱禁区av一区二区| 高潮综合网| 久久最新视频免费观看| 狠狠躁天天躁日日躁| 91总综合网| 日日橹狠狠爱欧美超碰| 区一二区日韩亚洲乱码av电影| 亚洲日产专区| 97天天爽| 日韩精品人妻中文字幕有码午| 91熟女熟妇视频网站| 超碰在线99| 人妻少妇久久久| 久久久久久人妻| 丁香五月影院| 亚洲中文字幕乱码无码一区二区 | 欧美丝袜亚洲| 密臀视频三区免费网站| 免费操逼91| 中文字幕国产在线天堂| 在线观看免费视频国产| 欧美性爱伊人| 蜜臀AV成人精品蜜臀| 国产AV天美| 亚洲视频一二区| 亚洲伊人久久精品影院| 中出20p| 777超碰| 久久的免费性爱视频| 乱伦熟女论坛| 在线综合色| 五月丁香激情综合| 欧美大香蕉在线观看| 1234区中文字幕在线观看_青青草国产在线_日韩一区二区 | 天天插网| 欧美综合自拍| 一区二区三区在线美女| 亚洲欧美国产其他二区| 97人人干| 黄色不卡视频| 天天综合网~91| 97干97色| 久草网站免费在线观看| 天天操天天插| 色麻豆AV| 欧美性性性| 国产粉嫩蜜臀av一区二区三区| 岛国福利在线精品播放| 亚洲五月婷| 国产60区。| 9Ⅰ超碰| 97在线欧洲| 青青草中文-久久青草精品一区二区三| 亚洲人妻一区二区三区| 国产精品久久久久久久久久久久久久久久| 唯美清纯 妖精视频| 综合亚洲欧美精品日韩?v| 色婷婷视频| 丝袜AV一二三区| 久久久久网站-538在线视频-欧美永久乱码 | 丝袜亚洲91| 欧美少妇人妻| 久久9视频| 玖玖爱一区在线| 国产熟妇 码视频户外直播| 日韩一级欧美一级在线观看| 成人日本精品九区| 欧美中文字幕精品人妻| www.天天干| 蜜桃臀一区二区aV| 欧美精品23| 欧美制服网站美腿丝袜| 中文字幕AV中出| 久久久免费一级黄片| 97玖玖超碰| 久草新在线| 三级三久久线久久99久目本WW| 日韩三级在线观看mp4| 96麻豆精品一区二区三区| 无码聚合| 欧美黑人91| 一牛影视成人片免费| 久久骚少妇| 色婷婷六月丁香七月婷婷| 日夜啪电影| 神马麻豆福利院| 婷婷色色五月天| 精品二区久久| 久久久久9| 一本一道久久综合久久| 狠狠色噜噜狠狠狠狠狠色综合久久| 性色高清在线| 啪啪性爱免费视频| 97综合日韩| 狠狠婷婷亚洲中文综合久久| 四虎 精品 WWW| 97视频在线| 亚洲欧洲视频小说在线观看| 国产精品午夜高潮呻吟久久av| 亚洲综合影片| 成人av在线播放| 91丝袜激情在线| 日韩性爱毛片操骚逼| 久久綜合很很很| 九月丁香婷婷色| 男人的天堂久久狠| 久久激情五月| 日韩97P| 91人人看| 一级@啪啪视频| 蜜臀th| 色婷婷网| 激情综合网激情综合| 日韩伦理久 久久 清纯| 日韩欧美成人午夜福利| 亚州九九九精品视频| 欧美一区二区亚洲天堂| 碰碰97| 性性久久| 久色网| 草草电影院| 亚洲黄a三级三级三级看三级| 一区二区三区免费岛国片| 91热色| 国产按摩一区二区三区| 麻豆国产视频精品观看| 亚洲极品| www老逼91| 久久riav中文精品| 97视频免费播放| 亚洲日韩青青草色月| 一牛影视成人片免费| 色九九久九九| 伊人国产视频| 欧美性天天影视| 日本精品无码三级网站| 99re这里只有精品2| 日韩女优在线| 超碰人人超在线观看| 九九九九9999| 亚洲中文字幕一区| 91女在线观看| 国产91久久九九免费精品无码| 成人性生活高清视频在线播放| 综合网久久| AV九九| 中文字幕国产| 欧美在线91| 后入福利| 我中文字幕6区| 欧美日日夜夜| 96精品在线| av无码精品久久久久| 一区二区三区国产在线播放 | 欧美激情 亚洲色图| 中文字幕亚洲欧美在线不卡| 精品少妇一区二区三区在线视频| 无码外流操逼视频| 99re在线| 国产日韩怡红院| 欧亚揄拍偷拍精品视频| 久久水蜜臀亚洲AV无码精品| 性爱动态120秒| 99日精品欧美国产| 操逼视频亚洲| 亚洲精品人妻在线| 自拍偷拍第26| 欧州一区二区三区四区| 国产白丝精品在线观看| 男人的天堂2018| 91亚洲图片| 亚欧美无遮挡| 久久超碰天天| 国内毛片四区| 日韩性爱电影一区| 日韩人妻播放| 伊人久久大香线蕉无码| 在线a v| 国产欧美日韩一区二区三区| 日韩高清黄片| 日韩熟女乱伦中出| 久久国产热视频97电影| 在线国产福利网址导航| 人人操人人uiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii | 精品国产精品一区二区| 日本午夜久久电影| 久9视频| 任你草| 懂色AV一区二区三区| 一二三区在线| 亚洲中文字幕有码视频一区二区三区| 欧美制服另类丝袜| 国产农村妇女精品一二区| 啊啊啊啊啊好大好舒服想要| 色哟哟1区2区| 久久久久久99999国产精品| 青青草五月份天| 精品天堂| 黄色大片免费在线| www.91理论| 中文字幕 国产 精品| 亚洲人妻av| 日韩人妻少妇中文字幕| 伊人一区二区三区| 欧美精品亚洲精品日韩传电影| 久久久无码精品人妻二区| 国产精品欧美在线观看| 日韩啊V| 精品视频免费在线一区| 久久露脸国产老熟女| 成人综合色网| 亚州色阁| 中欧人妻丝袜中文字幕| 性饥渴少妇av无码毛片| 黄片www.| 亚洲。日韩。欧美| 屁股久久久久久久久| 美女高潮国产高清| 中文字幕人成乱码熟女香港| 亚洲AV无码久久久国产精品| 麻豆黄色五月天| 国产久久日| 久久青青草在线视频| 综合国产影视三级| 99亚洲天堂| 亚洲第一二区另类图| 亚洲综合有码| 午夜一区二区三区国产| 极品色社| 一本色道久久综合亚洲二区三区| 午夜国产综合视频在线观看| 强奸a片网| 欧美亚洲美少妇一区二区| 精品人妻一区二区三区不卡断| 亚洲AV无码乱码| 五月香婷婷| 欧美黑人91| 99久久精品无码一区二区毛片免费 | 九九综合色| 内射卯月麻衣| 青青青国产手线观看视频2| 欧美激情色婷婷花野真衣一区二区| 欧美淫乱视频| 久久av一级av少妇av高潮| 91亚洲黑人| 97视频一区| 婷婷激情五月天小说网| 亚洲综合影片| 亚洲中文字幕在线视频一区二区| 亚洲色久| 97精品一区| 国产精品无码av嫩草| 红桃视频高潮| 久久久96| 欧美 亚洲 综合 制服| 国产97在线播放| 精品久久久久久中文| 亚洲网自拍| 免费精品国偷自产在线在线| 后入美女国产| 国产精品视屏| 日本人体九九九九九九| 黄色工厂这里只有精品| 久久久五月天| 中文字幕黄色一起草| 另类小色呦| 999熟女精品| 丝袜美腿制服人妻二区中文字幕| 天天插天天操天天摸天天射天天看| ji熟女.com| 粉嫩少妇自慰在线| 日韩人妻一二三区视频 | 亚洲字幕一区二区| 久久国语| 欧美人妻久久精品二区三区 | 亚洲第2页| 无码男人天堂| 国产第25页在线观看| 一二三四视频在线社区中文字幕| 国产曰批免费观看久久久| 男人天堂综合| 日本一区二区不卡精品| 国产精品69久久久久久久| 精品超碰国产| 亚洲另类天堂| 91天堂视频| 大香蕉专区| 91大香蕉伊人| 国产精品女同| 99久久精品无码一区二区毛片免费 | 伊人操操| 中字乱伦AV| 亚洲91网| 性性欧美| 婷婷久久五月天| 久久成年片色大黄全免费网站| 欧美日韩一干二干| 熟女人妻一区二区三区| juliaann丝袜| 丝袜视频一区二区在线播放国产中文| 久久亚洲AV无码专区国产精品| 狠狠97| 精品国产网站| 亚洲综合中文字幕有码| 超碰97丝袜| 青春草A| 凹凸视频特色日本特黄| 日本欧美中文字幕| 日韩久草| 亚州操操穴网| 欧美性巨大╳╳╳╳╳高跟鞋| 国产搭汕a级片| 美女大乳久久久久久久女人18| 国产激情av女片自拍| 亚洲情色欧美| 激情久久日韩精品中文字幕麻豆| 女人的久久久| 久久精品国产亚洲AV无码电影| 欧美高清色| 久日综合网| 亚洲国产精品久久久久婷婷青年| 久久精品毛片免费不卡| 欧美日韩在线小说 | 神马久久午夜| 香蕉av一区二区三区| oumeisetu综合| 天天色综亚洲91污| 色综合V| 99热在线播放| 欧洲一区二区| 色综合超碰超| 亚洲色图欧美色图制服丝袜| 激情六月婷婷| 九九综合久久| 精品人妻一区二区视频| 精品九九九九| 2017天天插| 亚洲欧美内射| 色偷偷人人玩人人舔人人操人人摸人人爽| 九九九综合精品| 99热这里是精品| 亚洲AV无码国产精品久久久久| AV一区观看| 精品人妻免费观看| 91少妇人妻| 久久久久国色αv免费观看| 亚欧美综合网。| 精品九九九九九九九| 色女网日韩| 狠狠中文字幕| 国产剧情一区在线观看| 狠狠色综合网| 欧美99热| 91色久| www.zbzhongsen.com| 青青草丝袜在线视频| 国产精品无码在线| 日本性爱少妇| 亚洲古典另类欧美在线| 加勒比久久综合网高清| 18禁精品网站在线看| 亚洲精品乱码线路中文字幕| 成人av毛片在线观看| 国产无码精品久久久久久| 欧美天天综合| 在线日韩日本亚洲国产| 男女啪啪啪18禁网站| 99亚洲国产精品色一区二区三区| 老司机午夜精品视频| 亚洲成人激情小说视频| AAAA欧美日韩| 高清无码在线播放网站| 亚洲成a人片在线观看中文!!!| 国产成年精品高清在线观看91| AV和黑人在线播放| 高清无码 国产精品| 天天做日日做天天欢。| 动漫爆乳3D奶水一区在线观看| 懂色AV蜜臀无码精品APP| 亚洲无线码一区国产欧美国| 久久98| 久久久工口| 激情终合网| 九热超碰| 草草草草视频| 精品久久久久久AV无码| 岛国视频免费在线观看| 日韩av乱伦| 日韩在线女优天天干| 日本一片一区| 五月天AV资源| 91情色| 国产精品熟女九色九色蜜臀| 中文字幕av亚洲在线| 91一区二区| 偷拍超碰| 老熟乱一区二区三区四区| 蜜臀久久99精品久久久久久无删减 | 凹凸视频特色日本特黄| 色妺妺在线视频| 性性欧美| 亚洲视频精选| 国产精品一区av在线| 亚洲AV永久无码一区仙野| 天天色悠悠激情| 天美传媒av在线| 伊人骚琪琪亚洲天堂网站| 国产av激情无码久久天堂| 亚洲AV成人无码久久精品播放| 精品女人999| 色妇91| 蜜桃av色偷偷av老熟女| 91三级理论片播放器| 久久久久13| 国产女主播视频在线观看| 亚洲国产成人精品女人久久久| 精品少妇人妻av久久免费| 日韩久久三区| 长久操视频| 国内毛片欧美香蕉精品| 久久久97| 免费草草草草草视频| 日韩一级二级三级免费看完整版 | 青青草在线视频播放器| 国产日韩无码一区二区三区久久区| 日韩性爱再线视频| 岛国人妻少妇av在线观看| 91情色在线| 免费A V在线播放| 日本少妇va7777| 夜夜嗨一区二区三区直播内容| 欧美日韩不卡a片| 久操99| 少妇淫妇久久久久久久| 日韩性爱电影一区| 日韩无码AB| 国产无吗在线播放| 大香蕉伊利av| 欧美日韩制服| 日本理论在线| 九九久精品| 围产精品一区二区三区视频播放| 国产亚卅97| 张柏芝国产一区在线观看| 啪啪综合网| 干妹子| 精品v日韩欧美国产| 在线亚洲精品久久久| 亚洲无码超碰免费| 蜜桃精品一区二区三区ww| 黑人综合网| 国产按摩一区二区三区| 人妻第一页| 91日本在线观看| 日日97| 六十路日本| 亚洲成成熟女人综合一区二区| 欧美一级A片在线看视频性色| 青青草日韩免费观看高清在线| 欧 美 自 拍 偷 拍| 欧美视频第二页| 天天谢天天干| 91爱看| 久久亚洲AV无码专区国产精品| 天美传媒Av在线| 日韩欧美aⅴ综合网站发布| 亚洲精品一卡二卡三卡福利视频网站 | 蜜桃无码AV一区二区| 亚欧美色图| 色婷婷网| 天天综合-91入口| 精品一区96| A片A5445444| 91爱做| 黄aaaaaaaaaaaaaaaaaa色网站| 人人九九精| 99九九精品| 97在线看| 欧美国产一区二区三区麻豆传媒| 99精品欧美一区二区三区桃色| 99re在线精品78| 噜噜噜无码AV一级一级久久影院| 欧亚三区动漫| 7月婷婷综合| 中文字幕在线观看永久| 99蜜月精品久久| 曰韩精品九九无码| 在线观看一级α片刺激高潮视频| 啊啊啊啊二区好大| 女人喷水视频在线观看| 女优大全 - 91n| 久草资源在线视频官方总站日韩丝袜美腿 | 丁香五月久久| 97在线亚洲| 午夜天堂精品久久久久91| 视频一区二区免费在线| 国产精品久久久久久久久久久久久久久久久久| 在线欧美69V免费观看视频| 欧美手机在线综合| 久草久热| HEYZO高无码国产精品227| 97色亚洲| 激情四射婷婷六月天| 亚州精人品大香蕉| 亚洲第一精品在线视频| 日夜精品| 青青伊人加勒比海| 青青草九九九九九| 国产福利av精彩对白| 乱欲视频| 97在线日韩中文字幕| 人妻久热在线| 国产一区二区三区影片| 思思视频免费看网站| 人妻少妇无码| 99色婷婷中文字幕乱色| 婷婷月色| 强奸乱伦中文字幕AV| 国产偷人伦激情在线观看| 人妻天天爽夜夜爽2| 91色五月俺来也| 激情综合五月天| 少妇干B| 91精品亚洲内射孕妇| 神马麻豆福利院| 久久噜噜噜精品国产亚洲综合| 欧美永久激情一区二区| 六月婷婷综合| 欧美亚洲中文字幕| 国产AV毛片| 国产不良强奸视频免费看| 亚州综合在线| 日本一二三免费久久| 亚洲老司机123专区| 激情露脸爱| 欧美78p| 狠狠操狠狠插| 久久久97| 久久婷婷热| 在线观看黄色电话| 老司机老司机午夜影院| 午夜无遮挡男女啪啪视频| 九九九久久久| 亚洲综合20p| 麻豆视频一区二区| 偷偷人人精品女女久久| 老熟妇一区二区三区| 日韩淫色网| 精彩久久中文| 美国三级日本三级久久99| jiujiujiujingpin| 韩日巨乳美女免费视频在线观看| 丝袜喷水在线| 9超碰免费| 国产伦精品| 久久国产精品一区二区| 中文字幕黄色一起草| 97超级久久| 91欧美网| 欧美综合自拍| 激情天天视频| www.亚洲成人一区| 伦激情人妻另类人妻| 老司机深夜18禁污污网站| 91在线精品一区二区三区| 粉嫩av平台| 美国黄片aaa| 国产Aα| 在线精品福利免费播放| 一起草精品人妻| 97自拍视频在线| 99re9在线| 欧美第38页| 一二三四视频在线社区中文字幕| 激情小说亚洲视频| 天天日天天干天天摸天天操| 亚洲熟女诱惑| 日韩性爱一级片| 思思热免费在线视频| 乱伦熟女区| 久久熟女人| 怡红院成人av| 亚洲精品九九九九九九| 麻豆精品.欧美精品.日韩精品.| 日韩少妇无码| 日韩无码三级影院| 欧美黄片视频在线观看免费| 婷婷爱五月| 97在线欧洲| 亚州精品人妻一二三区| 中文字幕一二三| 久久五十路熟女人妻| 国产黄色av大片网站| 囯产精品一区二区三区线|亚洲人成无码网WWW动漫|国产精品免费一级... | 亚洲综合夜色| 欧美精品黑人猛交高潮| 精品人妻免费观看| 黄色大香焦1级‘′‘| 中文字幕高清20页视频| 99色日| 精品无码少妇| 正在播放国产精品一区| www.99在线| 欧美精品偷拍| 中国和日本人色哪个不下载能放| 国产乱伦视频污| 激情五月天丁香社区| 欧美九九99久久精品| …中文字幕亚洲乱,97人妻无码费视…| 香蕉视频精品亚洲一区二区三区在线播| 无码精品久久| 丁香六月综合激情| 插入粉嫩少妇视频| 欧美性爽xyxOOOO| 蜜乳av首页| 淫乱图区 | 久久天天躁日日躁狠狠躁| 蜜臀99久久精品| 无码人妻一区二区三区色欲aⅴ | 土豪酒店各种姿势玩弄极品幼稚| 97欧美精品| 久久久精品成人国产| 国产又大又粗又长视频在线| 超碰99在线| 人妻中文字幕日韩电影| 黄色高清久久无码依人| 国产精品夜夜| 亚洲中文字母在线播放| 日本999精品| 天天日天天操天天射河南省| 色婷亚洲五月在线观看| 欧美黑人极品高潮喷吹熟女黑人性暴力日韩在线欧美极品一区二区老师 | 中文字幕av亚洲在线| 91九九九小逼| 久久永久无码人妻视频| 97天堂| 玖玖资源视频一区二区三区| 亚洲一区二区三区不卡国产欧美| 伊色综合天堂色97| 欧美综合天堂| 激情九月婷婷| 加勒比无码毛片| 亚洲日韩成人性爱视频| 曰韩少妇无码| 精品人妻av在线播放| 国产污视频麻豆传媒一区二区| 欧美亚洲高清| 亚洲熟妇图片| 欧美v日韩v亚洲v最新在线| 防屏蔽在线视频| 久久久久白虎| 日本免费中文一区二区三区四区| 91制服丝袜| 天天做天天爱| 免费视频97| 91oumei| 97精品| 亚洲最大的黄色电影网站。| 一级性爱网| 精品久久久久黄少妇| 亚洲啪啪视频免费| 国产传媒美日韩av| 色操逼网| 成人天天爽| 久久精品国产亚洲AV成人直播| 欧美骚少妇| 亚洲日本韩国在线| 亚洲精品91| 好湿好紧好爽 视频| 乱伦熟女论坛| 伊人操操| 国产精品免费美女视频| 丝袜视频网国产90| 五月天成人综合| 少妇久久久久久| 啊啊啊啊在线观看网址| 久久久久久久亚洲Av无码| 激情久久日韩精品中文字幕麻豆| 欧美刺激色黄片免费看| 91性网| 国产性刺激| 思思热在线cao| 毛片99-全集电影手机免费观看完整-B029AV | 中文字日本乱码| 国产麻豆福利av在线播放| 青青草华人在线欧美在线| 天天日天天插| 色色五月婷| 国产内射爽爽大片| 97视频900| 99九九久久| 思思热在线视频在线| 狠操91,com| 久久麻豆一区二区| 1人人看人人摸人人操| 黄久久| 日韩97视频!在线| 国产AV毛片| 欧美色就是色| 啊啊啊啊啊啊啊啊要喷了| 长长久久曰曰夜夜成人网| 日韩欧美大力操| 日韩久射综合| 超碰人妻中文在线| 狠狠色婷婷| 国产精品ⅴ无码大片在线看.| 亚洲另类色综合网站| 97综合在线观看| 人人操人人摸人| 97视频在线| 高清孕妇孕交 交孕妇| 成人精品电影| 黄片直播三级黄片两女一男| 91香蕉国产尤物视频| 久久视频,这里只有精品| 九九无码久久精品视频| 乱伦日本色图AⅤ| 国产强奸AV在线| 天天色综合影视网| 久久久久久久久久久久久久久久9| 日韩啪啪网| 亚洲91在线播放影院| 美女诱惑一区| 天美久久久久| 天天干人妻| 麻豆久久久久久久久丝袜| 校园春色美腿丝袜| 日韩兔费看黄片| 亚州高清AV| 欧美天堂超碰97| 男人天堂婷婷五月天校园春色| 精品人妻av在线播放| 久久精品一区二区一8| 欧美丝袜亚洲| 中文字幕日韩人妻视频一区二区三区交换夫妻| 超碰久热| 激情接吻视频久久久久久| 国产高清视频无码在线| 欧美写真视频一区| 女人18精品一区二区三区| 最新精品久久蜜桃 | 国产成人网| 爆操无码| 成年人性爱日韩| 久操网视频| 二男一女成人A片| 国产精品一区二区亚洲人成毛片| 少妇久久久久久久| 欧美乱欲| 日本不卡在线二区三区| 青青草色AV| 人妻夜爽夜夜爽| 亚洲精品97p| 中文无线日韩一区| 日本性一区| 本道在线| 麻豆区久久久久亚| 99热国产精品| 欧美精品欧美精品系列| 99re在线视频国产| 九九九草| 少妇久久久免费| 精品熟妇视频一区二区| 干美女人妻| K8久久久久| 97干在线视频| 91另类| 人人操人人93| 99久久无码| 最新av中文字幕高清| 日韩黄片影院| 精品国产91av一区二区三区| 飘花国产午夜精品不卡| 成人日韩3| 可以在线观看AV的网站| 成人美女av| 国产精品亚洲免费| 婷婷中文字幕| 色一射色一射| 日韩精品99久久久久久中文字幕 | 日本一区二区三区午夜观看| 十八禁视频一区二区|