久久亚洲成a人片熟女精品色一区二区三区|国产精品视频第一精品视频|av天堂热无码手机版|亚洲?v无码久久无遮挡|国产精品偷伦视频免费观看国产|麻豆国产自产精品丰满熟妇|av无码av不卡一区二区|久久亚洲精品中文字

ARTICLE DETAIL

資訊詳情

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

OpenHarmony上Flutter相冊組件適配實戰(zhàn):從MethodChannel到鴻蒙插件

OpenHarmony上Flutter相冊組件適配實戰(zhàn):從MethodChannel到鴻蒙插件 在 OpenHarmony 上跑 Flutter 應(yīng)用最能拉開體驗差距的就是相冊這種重原生交互的場景。multi_image_picker_view作為 Flutter 社區(qū)里很順手的多圖選擇組件本身提供了一套現(xiàn)成的網(wǎng)格展示、計數(shù)角標、預(yù)覽彈層和刪除交互但底層依賴image_picker這類原生插件。鴻蒙生態(tài)里image_picker默認是不工作的直接引入這個庫要么編譯不過要么點選圖片完全沒反應(yīng)。這次我把multi_image_picker_view從 Dart UI 到鴻蒙原生能力這一整條鏈路完整打通實現(xiàn)了相冊授權(quán)、多圖選擇、縮略圖列表、大圖預(yù)覽、選圖數(shù)量限制以及相冊增量變化監(jiān)聽整體交互做到了接近原生相冊的流暢程度。整個過程踩了不少坑這篇就是適配 OpenHarmony 的完整復(fù)盤寫給正在做 Flutter 鴻蒙化改造的同學(xué)做參考。這篇文章涉及的內(nèi)容從 Flutter 平臺通道機制、鴻蒙插件注冊方式到相冊權(quán)限申請、縮略圖緩存、大圖降采樣都有對應(yīng)的實現(xiàn)思路和可復(fù)現(xiàn)代碼。即使你對鴻蒙 API 還不熟只要跟著流程走一遍也能把multi_image_picker_view跑起來。當然前提是你得先有一個 OpenHarmony 開發(fā)板和對應(yīng)的 Flutter 運行環(huán)境。1. 先搞清楚 multi_image_picker_view 到底依賴什么1.1 這個庫的真實結(jié)構(gòu)multi_image_picker_view從 pub.dev 拉下來看核心其實是個 UI 組件。它幫你封裝了一排“已選圖 加號按鈕”的橫向流動布局點擊加號會觸發(fā)圖片選擇選中后回調(diào)一個ListXFile給你。它不自己去碰相冊所有跟系統(tǒng)相冊打交道的事情都委托給了image_picker。這意味著什么意味著如果你只把它當黑盒用在鴻蒙上一定掛。因為image_picker在 OpenHarmony 上并沒有原生實現(xiàn)MethodChannel 調(diào)過去之后原生側(cè)無人響應(yīng)Dart 層收不到結(jié)果組件就會卡在“選擇中”狀態(tài)或者直接拋MissingPluginException。我在適配前做的第一件事就是把multi_image_picker_view的源碼完整讀了一遍搞清楚它對外暴露的關(guān)鍵點MultiImagePickerView本身是 Widget初始圖片通過ListXFile? initialImages傳入點擊添加按鈕后內(nèi)部調(diào)用ImagePicker().pickMultiImage()拿結(jié)果每次圖片變化會回調(diào)onImagesChanged這個回調(diào)是 UI 層刷新和外部業(yè)務(wù)狀態(tài)同步的關(guān)鍵selectionLimit參數(shù)控制最多選多少張預(yù)覽彈層是自繪的純 Dart 實現(xiàn)不依賴原生。所以這次適配的工程量并沒有想象中那么大預(yù)覽彈層、角標、刪除按鈕這些 UI 全部可以保留真正需要替換的只有“從相冊拿圖片”這一層底層實現(xiàn)。1.2 適配鴻蒙前必須畫清的三條鏈路動手之前我先把要處理的東西拆成了三條鏈路。這個動作非常有用推薦你也先做一遍觸發(fā)鏈路用戶點“” →MultiImagePickerView內(nèi)部調(diào)用ImagePicker→ MethodChannelpickMultiImage→ 鴻蒙原生拉起相冊選擇器 → 返回圖片 URI 列表 → Dart 層包裝成XFile→ 觸發(fā)onImagesChanged。預(yù)覽鏈路用戶點已選圖 → 彈層 PageView 加載大圖。這條鏈路本身在純 Dart UI 上但如果圖片 URI 是鴻蒙的file://或自定義 schemeImage.network可能加載不了需要統(tǒng)一轉(zhuǎn)換或者寫一個支持該 URI 協(xié)議的 ImageProvider。狀態(tài)同步鏈路選了幾張、哪幾張是新增、哪幾張被刪除、相冊里圖片變了要不要自動同步。這條鏈路在鴻蒙上最容易出問題因為 OpenHarmony 相冊不是簡單的“目錄輪詢”它有自己的媒體庫變更通知機制想做好實時刷新必須靠原生事件推送。畫完這三條鏈路你就明白真正的適配工作集中在第一條和第三條鏈路的原生側(cè)UI 層幾乎可以原封不動。2. 鴻蒙端插件架構(gòu)與通道設(shè)計2.1 為什么必須自己寫原生插件OpenHarmony 目前主流的 Flutter 運行方式是把 Flutter 引擎嵌入到 ArkTS/ArkUI 應(yīng)用里的 hybrid 模式。Flutter 部分的 Dart 代碼跑在 Flutter Engine 上但相冊、相機、地理位置這些系統(tǒng)能力必須通過 ArkTS 側(cè)的系統(tǒng) API 來完成。所以鴻蒙適配的第一步就是擁有一個能響應(yīng) Dart 側(cè) MethodChannel 調(diào)用的原生插件模塊。OpenHarmony 社區(qū)早期的做法是直接改引擎產(chǎn)物但對應(yīng)用層開發(fā)者來說最穩(wěn)的路徑是用官方提供的 Flutter 插件開發(fā)模板以獨立模塊的方式維護一個插件工程。我從實際體驗來說自己寫插件比在業(yè)務(wù)工程里直接寫window橋接要干凈得多。插件可以獨立發(fā)布、獨立測試業(yè)務(wù)側(cè)只通過 Dart 接口調(diào)用后續(xù)換機型、升 API Level 都只動插件內(nèi)部不會牽一發(fā)而動全身。2.2 MethodChannel、EventChannel 的職責(zé)怎么劃分我這次把通道拆成了三個各管一攤避免一把梭Channel 名稱類型職責(zé)flutter_mip/photo_pickerMethodChannel權(quán)限申請、讀取相冊列表、批量選擇圖片、獲取圖片詳情flutter_mip/photo_thumbMethodChannel按 size 請求縮略圖字節(jié)流走二進制編碼flutter_mip/album_changeEventChannel監(jiān)聽相冊/圖片變化增量通知 Dart 側(cè)刷新為什么縮略圖要單獨拆一個通道因為相冊列表動輒幾百上千張一次性全部回傳必然導(dǎo)致 UI 卡死??s略圖請求是高頻、低延遲、帶大小參數(shù)的給它獨立通道可以單獨控制并發(fā)數(shù)、回收優(yōu)先級和編解碼策略。EventChannel 的作用更關(guān)鍵。當用戶在系統(tǒng)相冊里刪了一張照片或者外部程序往相冊塞了新圖片Dart 側(cè)需要收到通知后重新拉取數(shù)據(jù)。這件事如果用輪詢性能完全無法接受必須靠原生事件推送到 Dart。2.3 原生側(cè) FlutterPlugin 注冊與生命周期管理鴻蒙插件的注冊方式我以標準的 Flutter 插件模板為例。你需要創(chuàng)建一個實現(xiàn)FlutterPlugin接口的類然后在onAttachedToEngine回調(diào)里注冊所有通道import { FlutterPlugin, MethodChannel, EventChannel, MethodCall } from ohos/flutter_plugin; export default class MipPhotoPlugin implements FlutterPlugin { private channel: MethodChannel | null null; private eventChannel: EventChannel | null null; onAttachedToEngine(binding: FlutterPlugin.FlutterPluginBinding): void { this.channel new MethodChannel(binding.getBinaryMessenger(), flutter_mip/photo_picker); this.channel.setMethodCallHandler(this.handleMethodCall.bind(this)); this.eventChannel new EventChannel(binding.getBinaryMessenger(), flutter_mip/album_change); this.eventChannel.setStreamHandler({ onListen: (args, eventSink) { // 保存 eventSink相冊變化時回調(diào) }, onCancel: () { // 反注冊相冊監(jiān)聽 } }); } private async handleMethodCall(call: MethodCall): Promiseany { switch (call.method) { case requestPermission: { // 權(quán)限申請邏輯 } case pickMultiImage: { // 相冊選擇邏輯 } default: throw new Error(Unknown method: call.method); } } onDetachedFromEngine(binding: FlutterPlugin.FlutterPluginBinding): void { this.channel?.setMethodCallHandler(null); this.eventChannel?.setStreamHandler(null); this.channel null; this.eventChannel null; } }這里有個細節(jié)必須重點說onDetachedFromEngine里一定要把所有 handler 置空并把 channel 引用釋放掉。否則熱重載時會注冊兩個相同 channelDart 側(cè)調(diào)用總是命中最先注冊的那個就會出現(xiàn)“新代碼不生效”的詭異 bug。等應(yīng)用切到后臺再回前臺FlutterEngine 可能經(jīng)歷 detach 和 attach 的周期如果 handler 沒有正確清理還會出現(xiàn)重復(fù)回調(diào)。這塊我建議寫單元測試覆蓋至少保證 attach/detach 兩次后依然能正常收發(fā)。2.4 Federated Plugin 結(jié)構(gòu)把 Dart 與原生實現(xiàn)徹底解耦如果你只做鴻蒙適配直接在multi_image_picker_view的 fork 里改代碼也行。但如果你的項目還要同時維護 Android、iOS、Web 端我強烈建議采用 federated plugin 結(jié)構(gòu)。所謂 federated plugin就是把“接口定義”“平臺實現(xiàn)”“數(shù)據(jù)模型”拆成多個包。以這次適配為例mip_picker_platform_interface純 Dart定義平臺接口MipPickerPlatformmip_picker_ohos鴻蒙實現(xiàn)包里面包含 ArkTS 插件和對應(yīng)的 Dart 調(diào)用封裝業(yè)務(wù)側(cè)依賴mip_picker它根據(jù)平臺自動選擇實現(xiàn)。這樣做的最大好處是multi_image_picker_view的 UI 層完全不用動業(yè)務(wù)側(cè)也不知道底層換了實現(xiàn)你只需要在mip_picker的工廠方法里通過defaultTargetPlatform判斷運行時平臺返回不同的實例即可。我來回重構(gòu)了幾次最后這個結(jié)構(gòu)成了最穩(wěn)的形態(tài)。3. 核心實現(xiàn)細節(jié)權(quán)限、相冊讀取、縮略圖與預(yù)覽3.1 相冊權(quán)限申請的正確姿勢OpenHarmony 的相冊權(quán)限不像 Android 那樣統(tǒng)一運行時彈窗它在module.json5里聲明ohos.permission.READ_IMAGEVIDEO后仍然需要運行時請求。我用的是abilityAccessCtrl提供的權(quán)限申請接口import { abilityAccessCtrl, common } from kit.AbilityKit; async function requestAlbumPermission(context: common.UIAbilityContext): Promiseboolean { const atManager abilityAccessCtrl.createAtManager(); const permissions [ohos.permission.READ_IMAGEVIDEO]; const grantResult await atManager.requestPermissionsFromUser(context, permissions); return grantResult.authResults[0] 0; // 0 表示授權(quán)成功 }有個細節(jié)很容易踩坑如果應(yīng)用剛啟動就立刻彈權(quán)限框用戶還沒看明白很大概率會拒絕。我的做法是先引導(dǎo)到選圖入口等用戶主動點了“選擇圖片”再發(fā)起權(quán)限請求授權(quán)成功率明顯高很多。另外OpenHarmony 部分版本上READ_IMAGEVIDEO和READ_EXTERNAL_STORAGE是二選一授權(quán)關(guān)系如果同時申請會導(dǎo)致權(quán)限彈窗沖突。我實測下來只申請READ_IMAGEVIDEO就夠了系統(tǒng)會把相冊讀權(quán)限連帶處理。3.2 讀取相冊列表的關(guān)鍵參數(shù)讀取相冊數(shù)據(jù)用的是PhotoAccessHelper性能大頭在getAssets接口。它支持分頁式的 FetchOptions我強烈建議不要一上來就全量拉取import { photoAccessHelper } from kit.MediaLibraryKit; const helper photoAccessHelper.getPhotoAccessHelper(context); let fetchOptions new photoAccessHelper.FetchOptions(); fetchOptions.fetchColumns [uri, name, size, date_added, orientation]; fetchOptions.sortKeys [{ key: date_added, descending: true }]; fetchOptions.fetchResult new photoAccessHelper.FetchResult(); fetchOptions.fetchResult.successCount 60; // 先加載一頁滾動到底再分頁這里兩個參數(shù)要解釋一下fetchColumns字段一定要限定不限定會返回整條記錄相冊有幾千張時內(nèi)存和序列化開銷都會爆炸successCount是每次拉取的條數(shù)先拉 60 張比較合適后續(xù)滾動到底部再拉下一頁。如果一開始就拉 1000 張縮略圖任何設(shè)備都頂不住。拉取結(jié)果后把每一張的 uri、id、創(chuàng)建時間返回給 Dart 側(cè)Dart 用列表渲染第一屏。注意縮略圖不要等列表全部返回后再批量請求而應(yīng)該拿到前 60 條 URI 后立刻發(fā)請求邊滾動邊補。3.3 縮略圖內(nèi)存模型與緩存策略這是整個適配里最影響“絲滑度”的一環(huán)。我的方案是列表頁單張縮略圖尺寸固定為200x200根據(jù) cell 大小動態(tài)計算但視覺上夠用原生側(cè)getThumbnail(size)返回 PixelMap在原生側(cè)轉(zhuǎn)成 JPEG 字節(jié)流再通過縮略圖通道回傳 DartDart 側(cè)用內(nèi)存緩存管理已解碼的ui.ImageLRU 容量限制在 64MB超限自動回收同時設(shè)置 Flutter 全局imageCache的maximumSize和maximumSizeBytes防止圖片緩存無限膨脹。代碼示意Dart 側(cè)緩存封裝class ThumbnailCache { static const int maxCacheBytes 64 * 1024 * 1024; final LinkedHashMapString, ui.Image _cache LinkedHashMap( equals: (a, b) a b, hashCode: (o) o.hashCode, ); ui.Image? get(String key) { final image _cache.remove(key); if (image ! null) { _cache[key] image; // 刷新 LRU 位置 } return image; } void put(String key, ui.Image image) { _cache[key] image; int total _cache.values.fold(0, (sum, img) sum (img.width * img.height * 4)); while (total maxCacheBytes) { final firstKey _cache.keys.first; _cache.remove(firstKey)?.dispose(); total _cache.values.fold(0, (sum, img) sum (img.width * img.height * 4)); } } }我實測下來200 張以內(nèi)的相冊列表第一屏 20 張全部顯示完耗時大約 400ms后續(xù)滾動時每一屏的縮略圖都能在滾動結(jié)束后 150ms 內(nèi)補齊。如果低于這個標準多半是原生側(cè)轉(zhuǎn)字節(jié)流時用了大尺寸原圖或者 Dart 側(cè)緩存沒生效每次滾動都重新解碼。3.4 大圖預(yù)覽降采樣與分塊解碼大圖預(yù)覽的 OOM 是高頻問題。OpenHarmony 的 PixelMap 本身對超大圖有支持但如果直接加載一張 5000x4000 的照片并轉(zhuǎn)成ui.Image給預(yù)覽頁內(nèi)存直接多出近 100MB路由切換時大概率崩潰。我的做法是先在原生側(cè)做一次降采樣import { image } from kit.ImageKit; async function loadPreviewImage(fileUri: string): Promiseimage.PixelMap { const imageSrc image.createImageSource(fileUri); const info await imageSrc.getImageInfo(); const targetWidth Math.min(info.size.width, 1600); const targetHeight Math.min(info.size.height, 1600); const pixelMap await imageSrc.createImagePixelMap({ desiredWidth: targetWidth, desiredHeight: targetHeight, desiredPixelFormat: image.PixelMapFormat.RGBA_8888, }); return pixelMap; }降采樣到 1600x1600 以內(nèi)單張大圖的內(nèi)存占用從 90MB 降到 15MB 左右多開兩三張圖緩存也不會掛。如果需要更極致的體驗還可以疊加一個原生側(cè) LRU 緩存把最近查看的 5 張大圖的 PixelMap 緩存住預(yù)覽翻頁時幾乎零延遲。3.5 UI 層兼容XFile、Image.network 與自定義 ImageProvider鴻蒙相冊返回的 URI 通常是file://media/...這種格式而multi_image_picker_view內(nèi)部預(yù)覽和控制圖片時用的是Image.network或Image.file。這兩類組件在鴻蒙 URI 上都會失效。我的處理方案是在 Dart 層做一個 URI 適配層把file://media/格式統(tǒng)一映射成自定義的MediaUri協(xié)議比如mip://resolved/123。然后實現(xiàn)一個MediaImageProvider它從緩存查圖查不到就走縮略圖通道異步拉取class MediaImageProvider extends ImageProviderMediaImageProvider { final String uri; final int width; final int height; override FutureMediaImageProvider obtainKey(ImageConfiguration configuration) { return SynchronousFuture(this); } override FutureImageStreamCompleter loadImage(MediaImageProvider key, ImageDecoderCallback decode) async { final bytes await MipImageSource.fetchThumbnail(uri, width, height); final buffer await ui.ImmutableBuffer.fromUint8List(bytes); final codec await ui.instantiateImageCodec(buffer); final frame await codec.getNextFrame(); return OneFrameImageStreamCompleter(Future.value(frame)); } }這個 Provider 替換完成之后UI 層所有Image.network的調(diào)用都指向mip://協(xié)議底層走自己實現(xiàn)的解碼頭。好處是可控性極強緩存、解碼配置、超時處理都在一個地方不會再被 Flutter 默認的網(wǎng)絡(luò)圖片緩存策略坑到。4. 完整適配流程實操記錄4.1 環(huán)境準備與依賴替換先把環(huán)境列出來方便你對照OpenHarmony SDK API 12Flutter 3.22 的 OpenHarmony 分支引擎DevEco Studio 5.x Flutter 插件開發(fā)模板依賴替換上我直接 fork 了multi_image_picker_view把內(nèi)部調(diào)用替換成自己的封裝。pubspec.yaml里這樣引用dependencies: multi_image_picker_view: git: url: https://your-gitlab.example/multi_image_picker_view.git ref: ohos-supportfork 的源碼里只需要改一個文件把_openPicker()方法中ImagePicker的調(diào)用替換成MipImageSource.pickMultiImage()并確保返回類型一致。這樣業(yè)務(wù)側(cè)不用改動任何代碼。4.2 Dart 端平臺接口設(shè)計我沒有在業(yè)務(wù)代碼里散落 MethodChannel而是單獨建了一個mip_image_source.dart把與原生交互的邏輯全部集中class MipImageSource { static const _pickerChannel MethodChannel(flutter_mip/photo_picker); static const _thumbChannel MethodChannel(flutter_mip/photo_thumb); static FutureListString pickMultiImage({int limit 9}) async { final uris await _pickerChannel.invokeListMethodString(pickMultiImage, {limit: limit}); return uris ?? []; } static FutureUint8List fetchThumbnail(String uri, int width, int height) async { return await _thumbChannel.invokeMethod(fetchThumbnail, { uri: uri, width: width, height: height }); } }Dart 側(cè)的數(shù)據(jù)模型用 URI 字符串作為主鍵比較穩(wěn)妥。注意不要試圖把 PixelMap 或者原生對象直接傳給 Dart跨語言橋接只走可序列化類型否則會觸發(fā)序列化錯誤。4.3 鴻蒙端原生實現(xiàn)核心方法逐段解析原生的關(guān)鍵在pickMultiImage方法里。要做的動作是確認權(quán)限拉起系統(tǒng)相冊選擇器返回選中的 URI 列表。這里用了 OpenHarmony 的photoViewHandler它會在應(yīng)用內(nèi)彈出系統(tǒng)級多選界面選完直接返回結(jié)果。這個方案比自繪網(wǎng)格多選框省事得多并且和系統(tǒng)相冊 UI 完全融合private async pickMultiImage(call: MethodCall): Promisestring[] { const context getContext(this) as common.UIAbilityContext; await this.ensurePermission(context); const photoSelectResult await photoViewHandler.select({ MIMETypes: [photoAccessHelper.PhotoViewMIMETypes.IMAGE_TYPE], maxSelectNumber: call.arguments[limit] ?? 9, isPhotoTakeSupported: true, }); const uris: string[] []; photoSelectResult.photoSelectResult.forEach(item { uris.push(item.uri); }); return uris; }這里有個細節(jié)isPhotoTakeSupported我開了這樣用戶在系統(tǒng)選擇界面可以直接切相機拍照體驗上比返回 Flutter 再調(diào)相機要連貫很多。如果你不希望用戶混選把它設(shè)為false即可。ensurePermission的實現(xiàn)需要緩存一個 Promise避免用戶連續(xù)點擊時重復(fù)觸發(fā)權(quán)限彈窗。我在第一次請求未完成時后續(xù)請求直接復(fù)用同一個 Promise等結(jié)果出來再統(tǒng)一交給兩個調(diào)用方。4.4 接入 multi_image_picker_view 并替換數(shù)據(jù)源fork 之后業(yè)務(wù)側(cè)的用法和原庫完全一致MultiImagePickerView( initialImages: _selectedImages, selectionLimit: 9, onImagesChanged: (images) { setState(() _selectedImages images); }, )initialImages里放的是XFile對象。我額外做了一步在進入頁面時預(yù)先調(diào)MipImageSource.pickMultiImage(limit: 0)只讀列表不拉選擇器把相冊前 60 張的縮略圖信息預(yù)熱到緩存這樣用戶真正點開選擇器時系統(tǒng)相冊頁面的返回速度會快不少。4.5 性能驗證與三輪調(diào)優(yōu)記錄適配完之后我做了三輪調(diào)優(yōu)每輪都有明確指標第一輪是縮略圖并發(fā)。原生側(cè)默認 12 個并發(fā)內(nèi)存抖動明顯滾動有掉幀。我降到 4 個并發(fā)并用隊列控制滾動體感穩(wěn)定了很多。第二輪是緩存優(yōu)化??s略圖加了一個 64MB 的 LRU滾動回看圖片不再重復(fù)加載也沒有白閃。第三輪是事件合并。EventChannel 推送相冊變化時Dart 側(cè)做 300ms 的 debounce把多次通知合并成一次刷新避免用戶連續(xù)刪兩張圖導(dǎo)致列表刷兩次。實測數(shù)據(jù)OpenHarmony 開發(fā)板 / 麒麟平臺選取 9 張圖全流程平均耗時 2.8s含權(quán)限彈窗與用戶選擇等待相冊列表首屏 1.2s縮略圖滾動無掉幀大圖預(yù)覽滑動幀率穩(wěn)定在 55fps 以上。注意以上數(shù)據(jù)是單次適配的實測記錄不同設(shè)備和系統(tǒng)版本會有差異。你適配時建議先固定一套基準測試對比調(diào)優(yōu)前后數(shù)據(jù)再決定哪些優(yōu)化要做。5. 實戰(zhàn)中踩過的坑與排查技巧5.1 權(quán)限回調(diào)丟失第一次適配時發(fā)現(xiàn)用戶點了允許Dart 側(cè)卻沒有收到任何回調(diào)。查了半天原來是requestPermissionsFromUser的結(jié)果沒有通過普通 Promise 返回而是依賴回調(diào)事件。解決方式是封裝一個帶回調(diào)轉(zhuǎn) Promise 的請求函數(shù)function requestPermissionWithCallback(context: common.UIAbilityContext, permissions: string[]): Promisenumber { return new Promise((resolve) { context.on(requestPermissionsFromUserResult, (result) { resolve(result.authResults[0] ?? -1); context.off(requestPermissionsFromUserResult); }); abilityAccessCtrl.createAtManager() .requestPermissionsFromUser(context, permissions); }); }記得在回調(diào)之后立即off掉監(jiān)聽否則下一次請求會觸發(fā)兩個回調(diào)造成狀態(tài)混亂。5.2 相冊監(jiān)聽回調(diào)不觸發(fā)EventChannel 的相冊變化監(jiān)聽在 API 12 上要注意注冊時的上下文生命周期。如果你在onAttachedToEngine時拿到的 context 是宿主應(yīng)用的 context 而不是 UIAbility 的 contextphotoAccessHelper的on(photoChange)可能不會觸發(fā)。解決辦法從插件 binding 里先取 UIAbilityContext優(yōu)先用 UIAbilityContext 注冊監(jiān)聽。另外事件流建立之后要注意在onCancel里反注冊否則切后臺再回前臺會重復(fù)監(jiān)聽同一變化通知兩次Dart 側(cè) debounce 也擋不住重復(fù)刷新。5.3 大圖滑動返回時白屏這個坑很隱蔽。我用降采樣后的 PixelMap 生成字節(jié)流傳給 Dart但用戶如果滑動得很快多次請求的返回順序不一致就會導(dǎo)致圖片串位或者白屏。嚴格解決方案是每次請求帶一個requestIdDart 側(cè)收到結(jié)果后校驗 id 是否對應(yīng)當前展示頁不是就丟棄final response await _thumbChannel.invokeMethodMap(fetchThumbnail, { requestId: currentPageIndex, uri: uri, width: width, height: height, }); if (response[requestId] currentPageIndex) { setState(() _currentImage response[bytes]); }這個方法同樣適用于相冊列表的滾動場景只不過列表場景的 requestId 是 cell 的位置。5.4 臨時文件殘留與緩存清理鴻蒙相冊返回的 URI 有些是臨時選擇路徑長時間使用會在系統(tǒng)相冊里留下空殼或緩存文件。我會在每次選擇完成后把返回的 URI 統(tǒng)一轉(zhuǎn)成持久可讀路徑并做一套文件生命周期管理應(yīng)用退出時清理預(yù)覽緩存目錄超過 7 天的臨時縮略圖文件自動清除每次選擇完成后主動刪除只在上一次會話中使用的臨時路徑。這塊雖然不影響功能但會影響應(yīng)用在系統(tǒng)存儲里的衛(wèi)生程度。很多審核和用戶體驗問題都是這種細節(jié)累積出來的。5.5 常見問題速查表問題現(xiàn)象可能原因排查與解決點加號后無反應(yīng)原生插件未注冊或 MethodChannel 名稱不一致檢查onAttachedToEngine是否執(zhí)行通道名是否與 Dart 側(cè)一致MissingPluginException插件 detach 后未重新 attach檢查onDetachedFromEngine是否清理了 handler權(quán)限彈窗反復(fù)出現(xiàn)權(quán)限結(jié)果回調(diào)未處理或重復(fù)注冊監(jiān)聽用 Promise 封裝回調(diào)后off掉監(jiān)聽縮略圖滾動卡頓并發(fā)過高或緩存未生效并發(fā)降到 4檢查 Dart 側(cè) LRU 緩存大圖預(yù)覽白屏返回順序不一致增加 requestId 校驗相冊新增圖片列表不刷新監(jiān)聽未注冊或用錯 context改用 UIAbilityContext確認photoChange回調(diào)觸發(fā)選擇多張圖后返回耗時長全量拉取列表改用分頁預(yù)取前 60 條縮略圖6. 這個方案還能怎么擴展multi_image_picker_view這套適配思路跑通之后我把它沉淀成了一個內(nèi)部通用的“相冊服務(wù)模塊”。后續(xù)如果要繼續(xù)擴展可以直接在原生側(cè)加方法視頻選擇復(fù)用photoViewHandler.select把 MIMEType 改成VIDEO_TYPE返回 Duration 信息自定義裁剪在原生側(cè)拿到選中 URI 后用image.createImageSource再做一次裁剪和轉(zhuǎn)碼返回新的 URI文件路徑持久化將臨時 URI 轉(zhuǎn)存到應(yīng)用沙箱目錄用photoAccessHelper的getPhotoAccessHelperAPI 拿可寫路徑相冊分組按albumName字段分組在 Dart 側(cè)實現(xiàn)二級折疊列表。這些擴展都繞不開一個核心把原生能力做好接口抽象讓 Dart 側(cè)只依賴穩(wěn)定協(xié)議。只要這一點做扎實任何上層 UI 組件都能在鴻蒙上跑得很順暢。最后分享一個實際體會越早把“自帶 UI 組件 原生能力橋接”這個問題解耦后面的適配工作就越輕松。不要覺得加入一個大而全的框架一通兼容就行鴻蒙的相冊 API 有自己的生態(tài)特點老老實實按媒體庫模型去設(shè)計通道跑出來的效果才是最穩(wěn)的。
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
九九色综合| 成人五级久久| 人妻精品综合中文字幕在线 | 亚洲精品九九九| 日韩欧美偷拍美女视频| 中文伊人大香蕉视频| 中文字幕奈奈美被公侵犯| 伊人宅男大香蕉| 在线人妻熟女一区二区三区四区五区| 國產尤物AV尤物在線觀看| 精品国产乱码久久久久久久| 亚洲男人天堂2016| 欧美中文字幕男人天堂久久精品 | 五月天综合| 午夜视频久久久久一区| 久久AV无码AV| 欧美福利视频啊啊啊啊| 91中文字幕| av日韩中文字幕| 色婷婷蜜臀av| 久久9精品视频| 久久综合婷婷| 亚洲综合中文字幕有码| 国产性久久久| 国产精品成人无码a v毛片| 四虎av在线| 天天综合麻豆视频| 走光一区92下载| 久久超碰、| 大香蕉在线视频15| 97网址www| 国产精品免费视频不卡| 久久婷色| 中文字幕在线高清男人的天堂 | 2000亚洲男人天堂| 欧美欲色| 天天综合网久久ww| 欧美亚洲se91| 亚洲美女高潮喷水视频| 伊人网在线点播| 国产精品另类一区大香蕉| 日韩天天本| 性性欧美| 一二区在线观看视频| 丝袜狂射91| 国产和美国毛片| 国产精品国产| 日本ZZ高免费A级视频| 久久精品99| 98超碰日本| 啊啊啊要高潮了| 内射中国少妇高清视频免费视频| 9.1小视频| 偷窥自拍亚洲| 日本一级真人黄色性爱视频| 国语国产操逼伊人AV网| 国产刺激视频| 亚洲 综合 第一页| 亚洲男人综合| 色欲日韩欧美在线一区| 影音综合网| 中文字幕超碰CAO| 囯产精品强| 密臀国产在线| av亚欧| 免费人成在线观看网站品爱网| 男女性感激情网站| 99在线观看| 中文字暮97| 久久97资源 网| 日1区2区3区2020| 婷婷久月| 操逼无码一区| 日韩AV一区二区三区三州三州| 韩日男人的天堂| 中文字幕在线2| 亚洲欧美高清| 大香蕉啪啪网| 东北老女人的激情视频| 欧美日韩欧美| 欧美aaaaaaa| 久热九九| 日日AAvv| 手机在线人成免费视频| 欧美精品人妻视频| 后入福利| 秋霞网—男女啪啪亚洲免费体验区| 日本丝袜人妻内射| 夜夜騷av、一區二區| www.人人摸在线视频| 在线毛片片免费观看| 色久桃花影院在线观看| 中文字幕啊啊啊在线观看视频| 97干天天| 操婢日韩| 足交视频老司机| 久久 精品| av绯色| 精品无码一区二区| 加勒比海人人操超碰在线| 操逼免费视频无码国产| 日韩97超碰中文字幕| 黄色一区三区| 日韩亚洲中文字幕在线| 一区二区不卡| 2025年A片视频精品| 亚欧高清v| 精品一区二区三区四区外站| 欧美伊人久久综合网| 偷拍欧美激情| 天久久久噜噜噜久久国产精品爽爽| 91高清无码下载| 精品久久久久黄少妇| 蜜臀久久久99久久久久 | 国产真实野战在线视频| 天天综合网~91入口| 久久伊人最新网址视频| 久久超碰爱| 啊啊啊啊好疼| 久久久草成人网站久久久草成人久久久草久久久| 欧亚成人在线视频| 国产东北女人在线视频| 国产在线精品电影观看| 人人看欧美性爱| 加勒比AV天堂| 操逼操网| 大香蕉综合网| 800zy一区二区| 白嫩少妇| 97超级欧美| 国产乱伦性爱区| 女人的天堂大香蕉网| 婷婷伊人五月| 久久m| 亚洲欧美国产成人综合不卡| 曰韩中文人妻视频| 婷婷激情一区二区三区俺也去| a片在线播放| 97国产天堂岛| 性做久久久久久久| 99少妇| 99爱在线视频| 亚洲国产精品成人久久蜜臀| 久久亚洲不卡一区二区三区| 色吧综合网| 97超碰欧美精品| 一区二区激情国产熟女| 欧美福利视频啊啊啊啊| 动漫av中文| av资源在线播放天堂| 欧美激情亚洲| 97硬碰| 性色av蜜臀av色欲aV| 久久九九久精品国产尤物|国产精品爽黄69天堂A片潘金莲,国产亚洲精品第一综合 | 天天综合中文字幕 91| 荡小穴在线观看| 51久久夜色精品国产麻豆| 少妇色综合| AV中文在线| 色综合一本| 1.igao73.com 加入收藏 免费专区 国产精品 中文字幕 日韩精品 欧美精品 精彩 | 综合欧美日韩在线观看| 人妻精品一区二区| 综合色拍| 国产精品久久久亚洲一区| 欧美日韩电影成人在线| 偷拍盗拍亚洲色图图片| 日本熟妇色熟妇在线视频播放| 国产亚洲精品自在线亚洲情侣| 亚州综合| 九九九久| laoshunv91| 丁香六月婷| 久久久久久亚洲中文| 日韩欧美中文字幕搭讪巨乳美人妻视频| 国产久久一区二区三区野外在线| 日韩在线观看中文字幕视频| 亚洲色图尤物视频 | 国产三级日产三级韩国三级| 精品999999| 60秒免费视频| 精品九九淫乱男| 920日本午夜免费| 最新中文字幕在线亚洲| 日本黄色精品专区网站| 外国91| 97资源站久久| 久久一二三四五六七八九区区| 99色色网| 9l视频自拍9l九色成人| 中文字幕aⅴ在线视频| 五月天我淫我色av| 欧美一级黄色免费专区| 少妇高潮流水av免费| 国产精品另类| 国产风韵犹存熟妇三区| 一区二区三区无卡视频在线观看| 大香蕉欧美伊| 色第一页| 91色图片| 啊啊啊啊在线观看网址| 少妇500双飞99| 天堂精品在线| 五月天激情小说网| 午夜大香蕉| 亚洲日韩成人性爱视频| 少妇干B| 午夜.DJ高清在线观看免费7| 日韩视频精品在线观看| 日本色色视频网站| 永久免费发布性爱网| 国产一区二区三区白丝| 国产精品日韩在线一区| 操人人| 欧亚性爱在线视频| 丁香五月偷拍| 欧美另类色图片| 99热亚洲| av大香蕉网站| 99re在线视频| 91美| 性爱综合一区二区| 中文字幕奈奈美被公侵犯| 欧 美 自 拍 偷 拍| 一区二区三区黄片免费观看| 乱欲一区二区| 午夜色婷婷| 超碰人人草| 五月天激情婷婷| 久久极品伊人| 91综合天天看| 激情小说图片亚洲首页| 久久精品中文字幕无码l| av午夜影院在线播放| 中文字幕av亚洲在线| 色婷婷av在线观看| 色呦呦、国产精品| 日韩人人精品| 97久久网| 精品一区二区成人动漫| 久久久噜噜噜久久久| 欧美性色综合网| 人妻熟妇久草在线| 免费家庭乱伦视频| 偷窥自拍亚洲天堂网爆| 久久人人爽爽爽人久久久| 欧美暴力猛交| 夜色91| 欧洲综合视频| 欧美亚洲成人在线一区二区三区| 97精品在线视频| A一区片| 欧美丰满熟妇XXXX性ppX人交| 亚洲欧美激情另类色图| 好屌色综合| 久久线上视频免费看| 极品销魂美女一区二区| 99精品在线观看| 日本男人插女人的逼黄色| 理论久久婷婷网8| AV麻豆免费一区| 激情开心五月天| 日韩精品三级片长长久久| 青娱乐黄色录像| 欧美大香蕉同搞| 人人色97| 99热在线只有精品| 美女国产一区二区久久| 国内操逼视频二区| 成人五级久久| 超碰日本97美女人妻人人玩人人爱| 欧美在线大香蕉| 热热色中文无码| 人人摸人人干人人拍97| caopeng97人妻| 91殴美| 免费看欧美美女黄色大片| 天堂资源欧美| 99热| 九色 人妻 大香蕉| 本道综合精品| 色五月综合| 久久色AV线| 91久久免费视频互動交流 | 亚洲天天自拍| 成人短视频在线观看| 国产视频小说| 丁香六月激情| 日韩不卡码| 乱抡国产91| 国产性刺激| 天美传媒AV在线播放| 欧美日韩性爱精品| 美欧色综合| 色墦五月丁香| 好爽视频在线观看视频| 久热色情精品| 人人干人人操人人爱| 一区二区三区网站日日骚| 亚洲精品99999| 激情五月天综合网| 国产日韩久久| 99re这里只有精品中心播放| 亚洲国产成人精品女人久久久| 大香网伊人久久综合| 亚洲91射| 天天综合97| 色婷亚洲五月在线观看| 精品成人无码| 51一区二区三区| 午夜免费视频1000| 91久久青青草原精品| 91爱综合| AV和黑人在线播放| 欧亚日韩综合精品国产| 超碰在线91| 97超碰香蕉| 丰满少妇人妻久久久久久| 久草午夜| 久久成年精品| 殴美在线AⅤ| 蜜桃午夜视频一区二区 | 九九热超碰97亚洲最新香蕉| 宅男影院久久久,99| 另类图片亚洲加勒比另类图片亚洲加勒比另类图片亚洲加勒比 | 日日夜夜精品视频| 国产精品视频播放| 妺妺跟我一起洗澡没忍住| 亚洲综人网| 私色综合网| 欧美性爱日韩高清| 夜夜嗨免费视频| 久久草大香蕉| 日本1区2区不卡视频| 亚洲综合校园春色| 超碰在线91| 性爱网站一区二区| 3P乱轮视频| 竹菊一区二区三区AV线| 你草精品在线视频| 天天爽天天干| 国产性久久久| 91综合网| 亚洲综合有码| 欧美 亚洲 另类 综合| 性爱av网站| 色在线视频导航| 成人精品欧洲亚洲| 日本天天人人狠狠在线日美女| 成年人三级黄色片视频| 91狠狠综合网| 国产成人精品午夜福利| 性色高清在线| 蜜臀少妇一区二区| 三级片网站在线播放| 13小男生GAY自慰脱裤子| 亚洲脚交| 国产欧美黑人丰满在线| 91伊人大香蕉| 蜜臀人妻少妇久久在线观看| 五月丁香影视| 五月丁香啪啪啪| 在线视频免费播放一区| 18禁无码永久免费无限制| 中文有码9| 在线观看视频91| 国产精品久久久视频| 九九aV| 亚洲av综合色区无码一| 日韩精品一区二区高清| 中国AAAAAA黄色片| 日日爱99| 操逼操逼操| 舔足天天操天天射| 国产91 丝袜在线播放00-百度| 91女优在线观看| 国产精品电影推荐| 亚洲欧洲色情高清| 男人的天堂2000| 中文字幕十五区| 后入式免费视频| 九久久九九久视频| 亚洲丨在线| 农村少妇久久久久久久| 99久久久| 欧美一二三| 国产呦精品系列在线观看| 丝袜足交视频| 欧美日韩在线视频网站| 亚洲欧美国产中文视频| 一区二区免费电影久久| 久久精品国产AV一区二区三区| 蜜臀无码视频在线观看| 日本人妻伦在线中文字幕| 91春色| 日本乱人伦片中文三区| 欧美偷拍区| 国产女人和拘做爰视频| 国产色呦呦| 三级片网站在线播放| 欧美自拍偷拍免费观看| 国产 码在线成人网站| 九九色精品| 伊人97超碰| 91成人在线| 亚洲色图 图片| 夜夜爽夜夜摸夜夜操免费视频| 亚州,欧美在线| 青青草大香蕉视频| 婷婷丁香激情| 亚洲1区2区三区高清中文字幕| 五月天婷精品激情| 青青草密桃在线播放| 大香蕉天天看妹子| 久艹99| 97欧美视频| 黄色大片免费在线| 人妻99p| 97人妻色| 97超碰超欧美。| 日本大香蕉综合网红本杳社区| 婷婷五月天影院| 暖暖精品二区三区观看| 亚洲美女黄色| 亚洲欧美另类激情小说| 色久桃花影院在线观看| 色99在线| 91成人久久| 黑人综合网| 国产亚洲日韩在线三区黑人| 正在播放:深夜激情大战,自带黑丝袜全力输出骚穴 | 超碰人妻久久| 一区二区三区黄片免费观看| 丰满欧美少妇| 情色大香蕉| 日韩精品在线观看观看| 一区二区三区精品黑丝白丝酒店对鸡| 九九九九九九九九九九九九九九九女| 天美传媒精品一区二区| 乱伦图一区| 人妻夜夜爽天天爽麻豆三区网站| 久艹视频在线| h无码动漫在线观看| 久久e6只有精品| 日韩无码人妻中字久久三区四区| 成人日韩3| 一区二区激情国产熟女 | 乱论91| 观看免费区二区三区二| 人妻丝袜日本| 在线另类| 欧中美三级一区二区三区| 99久久婷婷丁香| 夜夜高潮夜夜爽| 外国91| www久久久| 91青青在线视频| 377p欧洲日本亚洲大胆| 亚洲人在线| 久久97精品久久久久久久不卡| 欧美专区日本专区| 93人人操人人| 国产白丝在线| 久操网视频| 1204av韩国| 亚洲97成人在线观看| 又大又长又爽| 2025年A片视频精品| 欧美黑人猛交春色影视大全| 夜夜躁狠狠躁日日躁av| 日韩精品区二区三区不卡| 亚洲狠狠入| 丁香五月自拍| 色综91| 婷婷三区| 亚欧毛片基地国产毛片基地| 好舒服视频| 综合 欧美 亚洲 日本| 99热免费精品| 91动漫操逼视频| 日韩有码回春沙龙第一页| 午夜理论片在线观看免费| 97超碰精品成| 中文字幕亚洲在线一区| 欧美天天干| 国产精品九9| 成人一道本免费视频| 97免费视频网| 一本一道波多野毛片中文在线| 国产亚洲日本| 国产又色又爽又舒服的三级视频| 亚洲欧美97√| 97这里都是精品| 国产精品无码久久久久2028| 熟女91网| 欧美综合骚| 国产一区二区三区久久久精品| 色妇91| 99超级碰免费视频| 欧美大波激情xxxx| 干b网| 天天操女人| 91在线视频观看国产| 天天干夜夜操一区二区| 国产suv精品一区二区四| 啪啪视频mP4| 国产又色又粗又黄又爽| 亚洲脚交| 91网站18在线| 五月丁香六月激情综合| 1人人看人人摸人人操| 91天美免费| 欧美日本久久精品一区 | 嫩草 我啊~嗯~在线| 99久久久久| 秋霞一级鲁丝片A片| 舔舔啊| 中文字幕日韩国产传媒欧美精品| xxxx网站亚洲精品| www亚洲欧美| 色www精品视频在线观看| 桃色五月天| 欧美另类精品xxxx| 久草精品国产99| 国产国产亚洲一二三久久| 精品十三区| 日本99视频| 国产曰批免费观看久久久| 久久精品国产亚洲av水密被窝| 日韩三级在线观看mp4| 女人高潮抽搐喷水视频网站| 久操网无码在线| 97视频网站| 亚洲 欧美 日本 国内 首页| 亚州日韩97| 熟女一区二区| 国产精品肉丝自拍| 丁香六月天| 无码免费精品高清| 无码外流操逼视频| 免费观看日本操逼视频| 超碰在线免费一区二区三区| 日韩青久久| 婷婷五月天无码 | 成人性爱电影网| 亚洲蜜乳av| 亚洲97成人在线观看| 日本大香蕉综合网| 成人三级片一区二区三区视频| 久久久久9| 久久精品72| 亚洲棕合电彰| 综合久欧洲| 成人精品视频一区二区| 欧美不卡在线美女| 亚洲色图在线视频| 啊啊啊啊啊啊啊国| 久久精品免费| 色婷婷综合久久久久中文一区二区| 欧美图片偷拍| 99热色这里只有精品| 午夜精品久久久久久久男人的天堂| 国产版a级片直播在线| 3P乱轮视频| 综合久久六月久久婷婷| 国产亚洲精品玖玖玖在线观看| 亚洲色色探花| 久久久免费的精品| 成人午夜无码视频| 一本道综合色图| 亚洲有码 视频一区| 欧日韩不卡视.频| 日韩丝袜人妻AV| 欧美成人精品一区二区三区| 校园春色综合色| 干B| 蜜臀一二三区| 天天综合色图| 97色伦97色伦国产欧美| 91丨豆花丨熟女| 99精品久久久久久久婷婷| 婷婷丁香五月激情啪啪| 天天欧美欧美亚洲网| 超碰在线974| 97国产色图| 97精品视频在线| www.男人的天堂| 美国黄片aaa| 久久久精品无码亚免费| 丁香五月激情综合| 操b网站亚洲无码| 国产精品久久久久久9999| 婷婷久久久精品| 人人操人人色网| 国产精品无码av嫩草| 久久色情| 日日A∨| 97久操| 嫩草美女久久| 1024人妻| 97超视频在线观看| 91综合网站| 国产自产自拍| 91久热这里只有精品| 小草av不卡亚洲二区 | 午夜男人一级A片7777| 大香蕉AV丝袜| 天天天操天天天爱| 精品人妻一区二区三区四区石在线| 无套内射人妻在线播放| 欧美极品女人的天堂| 国产精品在线一区二区| 17c嫩草51久久91嫩草| 黄色小视频日本txt| 91原创在线观看| 青青草五月份天| ji熟女.com| 91AV老熟女视频| 少妇色欲综合网2| 久久久久久亚洲中文| 欧美综合自拍成人自拍第二十页| 亚洲系列欧美| 色欲av一区二区三区蜜芽| 啊灬啊灬啊灬好深灬快高潮了动漫-国产字幕国产在线观看-B049AV | 女性91网站| 巨爆乳肉感一区二区三区竹菊影视| 青青草精品| 成年无码动漫av片无尽在线 | 大逼色网站| 日韩一区二区三区四区五区| 亚州 综合 色图| 永久电影三级在线观看| 夜夜一区二区| 操熟女91| 色色国产| 天天天干977| 婷婷91| 人人操人人精品影片| 蜜乳AV一区| 啊啊啊啊操死我了| 中文字幕一区二区三区字幕| 久久的网站啊啊啊啊啊| 呦呦一区| 国产久久久9999| 亚洲综合91| 女人的久久久| 国产成人亚洲精品无| 一色网男人的天堂| 东北毛片| 9 7超碰在线免费观看| 999久久久免费精品国产牛牛| 天天狠| 草草草视频在线免费看| 中美日韩毛片| 久久欲| 久久久99999久网站| 国产传媒操逼视频| 日韩毛片9| 高清无码国产亚洲| 99热这里只有精品18| 亚洲天天艹| 欧美高清无码免费视频高清版| 欧美色图私拍91| 无码 黑人一区二区三区| 传媒免费一区二区三区| av无码精品久久久久| 国产精品高朝久久久久久久| 久久久九九网站| 亚洲日韩美女丝袜美腿人妻视频| 日韩精品.久久精品.AV女优.天美传媒| 96精品久久久久久久久久| 中文字幕精品丝袜| 日日噜噜夜夜狠狠视频无| 丝袜色综合| 久久亚洲婷婷| 人人性爱视频免费| 91国产在线精品| 99色综合| 亚洲精品乱码线路中文字幕| 无码九九九九| 日韩美一区| 三级特黄60分钟播放| 熟妇一区,二区,三区。| 天美麻豆精品视频99| 九九热久久99精品re| 日韩毛片9| 在现视频女上位好爽| av无线看| 成人性交午夜免费片| 啊啊啊好湿久久| 自拍偷拍2025在线观看| 亚洲色图欧美一区二区不卡| A男人的天堂| 大香蕉免费中文| 国产女人与拘做受视频免费| 91观看 国产白丝| 在线视频一区二区传媒| 婷婷五月天激情网| 超碰国产精品无码| 男人的天堂1024| 超碰这里只有精品| 蜜臀av在线播放一区二区三区| 久艾草在线精品视频在线观看| 久久风骚城市人| 极品粉嫩少妇视频| 亚洲最大91网| 性做久久久久久免费观看软件| 亚洲中文字幕熟女| 亚洲 欧美 日本 国内 首页| 欧美日韩国产电影| 伊人综合色网| 91五月天| 国产欧美亚洲精品a第2页| 欧美巨大性舒爽顶到了| 超碰吊日色| 91欧美性| 亚洲精品国产精品乱码不卡| 青青草密桃在线播放| 爱射综合| 久久精品国产免费观看99| 中文字幕乱码人妻二区三区| 91欧美亚洲| 色老大| 白嫩91在线亚洲| 99热日| av天天在线| 一级黄碟在线观看| 污到发麻的视频 国产| 久久国产视频性吧| 依人大香蕉| 免费精品福利在线观看| 久久久久成人亚洲国产| AAAAAAAAA黄片| 男人天堂黄片| 日韩免费在线视频观看| 欧美人人曰人人操人人射射 | 国产精品情侣啪啪| 日韩欧美视频青青| 五月天婷婷综合| 激情婷婷丁香| 亚洲激情久久| 亚洲一区中文字幕久久,果冻传媒一区二区天美传媒 | 国产极品美女高潮无套在线观看| 国产成人精品必看| 中国一级特黄大片护士| 岛国免费黄色网址| 亚洲第一狼人丝袜美女另类| www.久久最新地址| 欧美大香蕉专区网| 日日碰狠狠添天天爽超| 国产97色在线| 天天摸,夜夜摸| 青娱乐导航AV| www.高清无码诱惑一区.com | 九九热免费国产视频婷婷伊人五月 | 香港日本韩国人妇99www.wccm20| 欧美后入视频| 亚洲天天精品| 校园春色亚洲色图| 国产色产精品在线观看| 先锋影音av先锋一区| 一本大道不卡一二三区| 操比国产| 日韩性色b| 色色综合97| 亚洲日本大香蕉1| 97色综合中文网| 思思热在线视频免费| 国产极品精品美女视频| 国产女人91精品嗷嗷嗷嗷| 五月天偷拍| 91色爽欧美| 天天日熟妇| 超碰99re| 欧美 日韩 亚洲 春色| 日韩黄色电影网站| 欧美日韩情色一区二区| 91/欧美| 日天天九九天堂666| 丁香七月婷婷| 91动漫操逼视频| 麻豆2区1区天美| 亚洲色图自拍| aa片毛片| 俺去俺来也在线www| 超91综合网| 麻豆传媒一区二区在线观看| 激情一区二区| 免费αⅴ在线观看| 碰碰在线视频| 韩日自拍| 99亚洲精品| 久久综合九九| 久久久久久久久久精| 丰满人妻-区二区三区免费看 | 日韩久久艹| 91A欧美电影网站| 约操熟妇| 中文字日本乱码| 日韩精品亚洲一二三| 成人av影院在线观看| 91熟女熟妇视频网站| 色爽——AV| 免费精品国偷自产在线在线| 中文自拍欧美影视| 丁香五月天久久精品视频一区二区三区| 精品91日日夜夜超清资源| 日韩9999| 久久久久精| 好吊妞转入那个网| 国产热av| 飘花国产午夜精品不卡| 激情五月天婷婷| 91无摭挡| 天堂俺去俺来也www久久婷婷| 超碰79人人乐| 97久久超碰国产精品| 6080YYY午夜理论片在线观看| 99热| 精品人妻伦一区二区三区久久| 国产精品免费久久久久久久久久| 國產尤物AV尤物在線觀看| 一二三啪啪专区| 久久久青青草| 美女黄频a美女大全免费皮| av午夜玫瑰| 亚洲天天在线| 操碰91| 国产夫妻性生活视频| 久久久久久久伊人精品| 刺激性视频黄页| 欧美96精品在线| 日韩九区| 久久风骚城市| 成人八戒网站| 极品AV网站在线观看| 妇女性内射冈站HDWWWCOM| 欧美黄页在线| 91丝袜美女国产| 亚洲综合一| 久久精品店| 国产91会所女技师在线观看| 亚洲成人av色网| 人人操人人肉久久精品| 精品久久99| 久艹免费| 亚洲熟妇自偷自拍另欧美| 精品人妻一区二区三区四区| av国产无码| 欧美草草高清日韩视频| 成人片在线播放| 青青草原香蕉日本Ap| 91精品国产麻豆国产自产在| 亚洲91射| 一起草AV| 九九热AV| 久久中日麻豆| 亚洲一卡2卡3卡4卡乱码网站| 国产精品久久久久久久免牛肉蒲团| 亚洲激情综合另类男同| 亚洲性图91| 国产精品香蕉热久久新品| 日韩精品影视| 婷婷91| 大香蕉中文| 97天天做| 亚洲精品中文字幕一区在线视频| 骚日日av| 中文字暮97| 一个国产在线综合网站| 日本黄色天堂| 亚洲.欧美.丝袜.中文.综合| 久久的免费性爱视频| 97精品综合久久网| 久草福利在线资源站| 超碰色图| 久久久熟妇熟女国产| 最新中文字幕在线亚洲| 久操国产在线| 91伊人影视综合| 高跟丝袜AV专区国产| 91欧美情色| 97玖玖人妻| 在线综合色| 91精品91久久久中77777| 久久婷婷在线观看视频| 国产精品一级片在线看| 丰满人妻-区二区三区| 欧美久久毛片基地| 国产女人91精品嗷嗷嗷嗷| 超碰成人人人爽人人爽| 伊人久久亚洲色欲综合网站 | 日韩另类色图| 日逼国产| av爱爱爱| 欧美色九九| 亚洲色图国产另类| 国产一区二区三区中文字幕| 人摸人人操人| PMv在线观看| 大粗鳼巴久久久久| 亚洲 综合 第一页| 亚洲色图 欧美热图 清纯唯美 另类自拍| 久久久亚洲欧美综合| 一区二区三区国产在线播放 | 国产欧美日韩在线不卡第一页| 日韩激情无码影院| 91天天综合日韩欧美| 超碰 国产熟女精品一区| 激情图片亚洲色图| 欧美.亚洲.另类.丝袜.制服.诱惑| 久草视频在线视频在线视频在线观看| 色姑娘综合网| 超碰色97| 中文字幕熟女人妻丝袜丝| 久久久久ab| 红桃视频高潮| 天美国产精品| 猛交交| 五月开心网| 乱色视频中文字幕| 狠狠色噜噜狠狠狠狠狠色综合久久 | 97内射偷拍| 日韩人妻少妇中文字幕| 99色视频| 九九这里只有精品| 精品超碰国产| 国内自拍 日韩激情 99| 91快色色色色色| 九色精品视频导航1| 欧美一二三级精品在线| 亚洲色欧美| 久久超碰网| 少妇久久久久| 少妇久久| 国产一级高清免费观看| 啊啊啊网站| 超碰97色| 思思热在线视频免费| 久久久九九九| 夜夜草天天| wwwxxx日本爽| 亚洲伊人a线观看视频| 久久精品久久久久久久久| 欧美性爱第一页久久| 久久久久久久免费A片国产成a人亚洲精∨品无码 | 国产高清MV操逼视频| 伊人五月天激情| 久久久久久精品免费看A级| a天堂视频| av婷婷色婷婷色六月| 99日精品欧美国产| 久热伊人| 蜜色网色哟哟| 啊啊啊啊二区好大| 国产情色在线| 97在线免费公开视频| 一区二区三区一亚洲中文字幕、综合区灬| 超碰在线在公开超碰在线在公开| 中文字幕第二页| 久9精品| 亚州熟女乱伦| 国产高清无码一区三区二区| 久久亚洲精品成人av| 色五月综合| 欧美高清性猛交| 97热视频在线观看| 亚洲毛片久久| 四虎国产精品永久入口| 色狠狠 - 百度| www.91色| 91亚洲影院综合| 99国产精品自在自在| 97伊人| 99久国产精品午夜性色福利| 自拍偷拍 日韩无码| 亚洲精品一区中文字幕乱码| 97人人爱人人做人人乐| 欧美激情黑人| 欧美黑人极品高潮喷吹熟女黑人性暴力日韩在线欧美极品一区二区老师黑人潮喷一 | 欧洲精品欧洲精品| 躁躁躁日日躁2020| 人人贴人人摸| 欧美色五月| 激情视频一二三| 亚洲国产综合图区中文字幕 | 一二三啪啪专区| 97超级色碰碰| 91免费看一区二区三区| 亚洲国产麻豆一区二区三区| 天美av在线观看| 99热18这里只有精品| 91五十路| 欧美成人一区二区三区在线播放| 亚洲无套久久嗯嗯| 无卡一区=区| 91在线精品一区二区三区| 免费综合亚洲中文| 欧美一区二区三区大综合| 理论久久婷婷网8| 久久亚洲欧美中文字幕国语| 首页亚洲国产高跟丝袜诱惑视频 | 操逼A∨| 色综合色欲色综合色综合色综合| 另类亚洲图色| 啪啪自拍九九综合| 欧美日韩 强奸乱伦| 人妻密肉在线观看| 午夜男人的天堂| 日本一级二级三级网站| 日本丝袜美腿人妻九九| 欧姜老司机| 国产树林里野战在线看| 久久久久亚洲一区女同性恋中文字幕| 亚洲三级。日韩三级| 看日韩操逼| 熟女网站最新| 国产a片操逼| 国产精品久久发布| 精品国产乱子伦一区二区三区,精品一| 老熟女乱子伦中文字幕一区二区| 看黑人AV不卡| 亚州综合色| 国产亚洲一黄| 大香蕉日韩| 黄网在线播放| 青草伊人久久| 人人爱人人操人人性| 久久九精品| 人妻丰满熟妇一区二区三| 色女99一级片在线观看| 天天日天天干天天操| 农村妇女一级二级三级视频| 日本久久久久久久久久| 亚洲精品aa久久伊人| 美女丝袜激情小说| 免费伦费视频在线观看| 精品一国2| 国产高清免费不卡av| 超碰98综合网| 日韩乱伦影音先锋| 中文字幕欧美日本乱码一线二线 | 欧美综合 站| 国产乱码精品一区二区三区四川| 97碰碰日本乱偷人妻中文的| 国产一级特黄大片处女| 欧洲精品一区二区三区| 亚洲天堂一区二区久久| ai欧美亚洲小说| 久久久久久国产精品免费网站| 中文字幕女同在线| 两性色网| 亚洲AV色图一区| 久久婷综合| 97爱亚洲| 久草资源在线视频官方总站日韩丝袜美腿| 国产成人91一区二区三区| 伊人久久国产免费观看视频| 性爱乱伦视频免费| 日本道日本道中文字幕日本道最新日本道在线观看 | 色yeye成人免费视频| 91在线国产后入风骚翘臀美女素人| www成人啪啪18秘 免费| 午夜噜噜噜| 欧美色三级片91| 欧洲亚洲国产综合在线| x97av| www99热| 26uuu久久| 1.igao73.com 加入收藏 免费专区 国产精品 中文字幕 日韩精品 欧美精品 精彩 | 亚洲蜜臀懂色| 影音先锋乱| 久热一区二区| 亚洲视频小说| 欧美日韩性爱精品| 欧美激情一区| 欧美一级专区免费大片| 五月丁香激情啪啪| 国产精品白领在线观看| 亚洲日韩东京热一区| 欧美操人| 国产在线视频二区| 91久久国产精品| 宗合情欲网| www.色综合| 九九九精品成人免费视频小说| 日韩欧美中文字| 屌色在线97视频| 26UUU欧美激情一区二区| 97超级久久| 97视频620| 99热这里只有精品99| 欧美1区二区三区公司| 日曰骚久久精品| 91真人天天在线| 婷婷日韩一区二区三区中文字幕在线| 成人自拍三级在线观看| 深爱伊人影院| 国产成人主播| 亚洲无套久久嗯嗯| 欧美黄片欧美黄片xxx| 粉嫩av在线| 白嫩白嫩的午夜九久久久久久久久久久久成人剧场| 又黑又大又粗| 新婚人妻扶着粗大强行坐下| 国产强奸乱伦欧美| 91白嫩| 亚洲熟女偷拍在线观看| 神马视频久久久久久| 欧美中出1| 精品午夜福利国产一区二区在线观看 | 欧美激情1区| 91色s| 国产极品久久久| 久久久艹艹艹| 五月天激情小说| 91狼人| 91高清无码下载| 中文字幕乱码人妻二区三区| 亚洲欧美中文日韩视频中国语| 国产狂喷潮在线精品| 亚洲美女精品九九视频| 黑人粗大V S日韩女优视频| 欧美熟女激情| 啊啊啊啊啊在线观看网址 | 久久性视频| 亚洲最新中文字幕免费| 国产一区免费午夜视频| 中文字幕国产在线天堂| 久久久四区| 97超碰9| 新91视频.cmp| 丝袜视频网国产90| 四虎精品一区| 久久综合久色欧美综合狠狠 | 中文字幕一区二区韩| 在线人成亚洲视频免费观看| 亚洲色图欧美色图另类图片| 久久在肏| 有码专区最新中文字幕有码| 人妻无码一区二区三区久久99| 欧美色图 人妻| 欧美激情色婷婷花野真衣一区二区| 青青操少妇| 亚洲第一二区另类图| 伊人久久大香线蕉亚洲五月天,青草青草欧美日本一区二区,欧美日产欧美日产国产 | 天天躁日日躁狠狠狠躁| 黄页网站成人免费| 91模特在线观看| 色悠悠伊人网五月天| 男人的天堂com| 丰满少妇一区二区三区免费看| 久久岛国| 九九九九热| 欧美岛国精品在线观看| 亚洲另类欧美精品| 久久精品欧美一区二区三区不卡| 国产AV色黄看到爽| 中国女人内射6XXXXX| 色色色色网站|