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

ARTICLE DETAIL

資訊詳情

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

Flutter鴻蒙堆疊布局實(shí)戰(zhàn):Stack、角標(biāo)與卡片疊加方案

Flutter鴻蒙堆疊布局實(shí)戰(zhàn):Stack、角標(biāo)與卡片疊加方案 從Flutter切到鴻蒙應(yīng)用開發(fā)之后我最大的感受是UI組件層面的思路完全通用但真到“堆疊布局”這種需要精確定位和層級管理的場景還是要重新捋一遍規(guī)范和習(xí)慣。這段時(shí)間用Flutter給鴻蒙應(yīng)用做了一套帶圖標(biāo)的按鈕、帶徽章的圖標(biāo)、卡片疊加效果踩了不少坑也沉淀出一套可以直接復(fù)用的寫法今天把這些實(shí)現(xiàn)思路和細(xì)節(jié)完整分享出來。如果你正在做鴻蒙端的Flutter應(yīng)用或者想把已有Flutter項(xiàng)目遷移到鴻蒙平臺這篇文章應(yīng)該能幫你省下不少調(diào)試時(shí)間。內(nèi)容不繞彎子直接講怎么搭工程、怎么寫Stack、怎么處理角標(biāo)偏移和卡片層疊交互包括每一步的代碼和背后邏輯。1. 環(huán)境準(zhǔn)備把Flutter工程接到鴻蒙上1.1 鴻蒙平臺的項(xiàng)目形態(tài)在開始寫堆疊布局之前你得先有一個(gè)能在鴻蒙設(shè)備上跑起來的Flutter工程。這里要注意鴻蒙端Flutter目前不是用默認(rèn)的Android/iOS工程模板直接跑而是需要增加一個(gè)ohos平臺目錄。實(shí)際做法是創(chuàng)建一個(gè)標(biāo)準(zhǔn)Flutter項(xiàng)目然后通過鴻蒙適配工具或手動方式在項(xiàng)目里加入OpenHarmony的工程外殼。我這邊常用的是命令行方式創(chuàng)建一個(gè)帶ohos目錄的工程flutter create --org com.example --project-name demo_app -t app demo_app生成標(biāo)準(zhǔn)工程后再把鴻蒙平臺支持補(bǔ)上。這個(gè)步驟每臺機(jī)器環(huán)境不同但核心目標(biāo)是一樣的讓項(xiàng)目根目錄下出現(xiàn)一個(gè)能被DevEco Studio識別和構(gòu)建的ohos目錄里面包含entry/src/main/ets、module.json5等鴻蒙工程文件。有一個(gè)點(diǎn)需要特別留意鴻蒙工程里依賴的Flutter引擎需要指定為支持鴻蒙的分支或鏡像而不是默認(rèn)的官方引擎。常見的做法是在pubspec.yaml里把flutter的sdk依賴保持默認(rèn)但在外層的依賴配置文件里把ohos/flutter_ohos這類包引到對應(yīng)倉庫。如果這一步配錯(cuò)了最常見的癥狀是項(xiàng)目能sync但編譯期直接報(bào)找不到ohos平臺的類。1.2 最小工程配置和調(diào)試準(zhǔn)備工程接好之后先不要急著寫業(yè)務(wù)UI花幾分鐘把調(diào)試鏈路確認(rèn)清楚。用DevEco Studio打開ohos目錄確保能正常編出HAP包。鴻蒙真機(jī)或模擬器上啟用開發(fā)者模式把flutter run的調(diào)試通道指向鴻蒙設(shè)備。確認(rèn)局域網(wǎng)內(nèi)設(shè)備可達(dá)避免USB連不上時(shí)白折騰。這里有一個(gè)我反復(fù)踩過的坑鴻蒙設(shè)備上跑Flutter調(diào)試版有時(shí)候日志會刷大量類似[ERROR:flutter/runtime/dart_vm_initializer.cc]的Dart VM初始化報(bào)錯(cuò)但應(yīng)用本身其實(shí)還在跑只是熱重載通道不穩(wěn)定。遇到這種情況先別急著懷疑堆疊布局代碼優(yōu)先檢查設(shè)備連接和調(diào)試端口用flutter doctor確認(rèn)Flutter工具鏈狀態(tài)再決定要不要重啟daemon。環(huán)境這關(guān)過了后面寫布局時(shí)會省心很多。接下來重點(diǎn)說堆疊布局的原理因?yàn)楹竺嫒惤M件全部依賴這一個(gè)核心能力。2. 堆疊布局的使用邏輯為什么這類效果都離不開Stack2.1 Stack、Positioned、Align的定位差異堆疊布局在Flutter里就是Stack它的本質(zhì)是把子組件按“從下到上”的順序疊放在同一個(gè)坐標(biāo)系里。默認(rèn)情況下子組件會按照自身尺寸在Stack的左上角排布先添加的在底層后添加的在頂層。但在實(shí)際做帶徽章的圖標(biāo)、卡片疊加時(shí)直接往Stack里塞組件是不夠的因?yàn)槲覀冃枰涯硞€(gè)組件精確地釘在另一個(gè)組件的右上角、右下角或者邊緣外側(cè)。這時(shí)候就要配合Positioned和Align。我來區(qū)分一下這三個(gè)組件各自的身份Stack容器負(fù)責(zé)管理層疊關(guān)系和坐標(biāo)系。Positioned定位器用top、right、bottom、left四個(gè)參數(shù)決定子組件相對Stack邊緣的偏移量。Align對齊器用alignment控制子組件在Stack內(nèi)的對齊位置適合把某個(gè)組件放在居中、右上、左下等固定位置。舉個(gè)例子做一個(gè)紅點(diǎn)徽章蓋在圖標(biāo)右上角最直觀的寫法是Stack( clipBehavior: Clip.none, children: [ Icon(Icons.notifications, size: 32), Positioned( top: -4, right: -4, child: Container( width: 12, height: 12, decoration: BoxDecoration( color: Colors.red, shape: BoxShape.circle, ), ), ), ], )這里Positioned的top和right用的是負(fù)數(shù)偏移允許子組件超出Stack邊界。前提是clipBehavior要設(shè)置成Clip.none否則角標(biāo)會被父容器裁掉。這個(gè)細(xì)節(jié)特別容易忽略因?yàn)樵贏ndroid原生里ViewGroup默認(rèn)不裁剪子View但Flutter的Stack默認(rèn)是Clip.hardEdge一不注意就會踩進(jìn)“角標(biāo)被切一半”的坑。2.2 fit和clipBehavior這兩個(gè)參數(shù)是坑點(diǎn)重災(zāi)區(qū)Stack有兩個(gè)高頻出問題的參數(shù)一個(gè)是fit一個(gè)是clipBehavior。fit控制的是非定位子組件的尺寸模式默認(rèn)是StackFit.loose也就是讓子組件以自己的自然尺寸展示如果設(shè)成StackFit.expand非定位子組件會被強(qiáng)制拉伸到Stack的尺寸。帶圖標(biāo)的按鈕里如果想讓背景層鋪滿按鈕區(qū)域用StackFit.expand就很省事但代價(jià)是背景層必須能安全拉伸否則會變形。我之前在一個(gè)卡片疊加場景里為了讓底層裝飾卡片覆蓋整個(gè)Stack區(qū)域把fit設(shè)成了expand結(jié)果底層卡片的圓角背景被拉伸得和上層完全不同。后來改成用Positioned.fill包裹底層背景效果就完全可控了。要注意這兩者看起來相似但StackFit.expand影響所有非定位子節(jié)點(diǎn)而Positioned.fill只作用于你顯式指定的那一個(gè)子組件。clipBehavior在鴻蒙屏幕的圓角場景下也有實(shí)際影響。如果應(yīng)用頁面本身是圓角容器內(nèi)部Stack又做了負(fù)偏移的徽章裁剪策略不對角標(biāo)要么被切掉要么溢出到圓角外。我的習(xí)慣是凡是徽章類組件Stack一律設(shè)置clipBehavior: Clip.none然后在外層再包一個(gè)帶ClipRRect的容器統(tǒng)一處理裁剪邊界。這樣層級關(guān)系清晰也不容易出現(xiàn)溢出報(bào)錯(cuò)。2.3 非定位子節(jié)點(diǎn)決定Stack尺寸還有一個(gè)容易忽略的點(diǎn)Stack本身有多大完全由“非定位子節(jié)點(diǎn)”的尺寸決定所有Positioned定位的子節(jié)點(diǎn)都不參與父級尺寸計(jì)算。這意味著如果你在一個(gè)空的Stack里只放一個(gè)Positioned組件Stack的尺寸會變成0視覺上什么都看不到。實(shí)際編碼時(shí)我通常會在Stack里先放一個(gè)SizedBox.expand或尺寸明確的占位組件再往上疊定位內(nèi)容。在鴻蒙的Flutter頁面里Stack經(jīng)常被放在Expanded或SizedBox內(nèi)部所以尺寸問題不突出。但如果你把組件封裝成可復(fù)用的獨(dú)立Widget比如一個(gè)帶徽章的圖標(biāo)組件調(diào)用方又恰好把它放在Row或Wrap里那么Stack的測量行為就會直接影響整體排版。提前理解這一點(diǎn)可以避免“自己寫的組件突然消失”這種詭異問題。3. 帶圖標(biāo)的按鈕從樸素按鈕到多層疊加3.1 三種基礎(chǔ)結(jié)構(gòu)圖標(biāo)在文本左、圖標(biāo)在文本上、純圖標(biāo)按鈕帶圖標(biāo)的按鈕在鴻蒙應(yīng)用里非常常見但不同場景對圖標(biāo)和文本的位置關(guān)系要求不同。用Flutter實(shí)現(xiàn)時(shí)我習(xí)慣先拆成三種基礎(chǔ)結(jié)構(gòu)圖標(biāo)在文本左側(cè)最傳統(tǒng)的按鈕樣式適合表單提交、列表操作項(xiàng)。圖標(biāo)在文本上方更適合宮格菜單、功能入口比如首頁的快捷入口。純圖標(biāo)按鈕只顯示圖標(biāo)常用于頂部導(dǎo)航欄或工具欄。第一種用Row就能解決第二種要改成Column第三種直接一個(gè)Icon外面包InkWell即可。單純做這些其實(shí)用不到Stack。但一旦加入漸變背景、描邊、裝飾性底紋、角標(biāo)提示之后普通的Row或Column就撐不住了這時(shí)Stack就開始發(fā)揮優(yōu)勢。我舉一個(gè)實(shí)際項(xiàng)目中的例子鴻蒙應(yīng)用首頁的“掃碼”按鈕需求是圓形圖標(biāo)按鈕、右下角帶一個(gè)模擬掃描框樣式的裝飾角標(biāo)、點(diǎn)擊時(shí)有縮放反饋。用普通IconButton做裝飾角標(biāo)無處安放用Stack做邏輯就非常清晰。SizedBox( width: 52, height: 52, child: Stack( alignment: Alignment.center, clipBehavior: Clip.none, children: [ // 圓形背景 Container( width: 52, height: 52, decoration: BoxDecoration( shape: BoxShape.circle, gradient: LinearGradient( colors: [Color(0xFF4A6FFF), Color(0xFF7B5FFF)], ), ), ), // 居中圖標(biāo) Icon(Icons.qr_code_scanner, color: Colors.white, size: 26), // 右小角裝飾框 Positioned( right: 1, bottom: 1, child: Container( width: 14, height: 14, decoration: BoxDecoration( color: Colors.white, borderRadius: BorderRadius.circular(4), ), child: Icon(Icons.check, size: 10, color: Color(0xFF4A6FFF)), ), ), ], ), )這段代碼里Stack承擔(dān)了三層結(jié)構(gòu)背景層、圖標(biāo)層、裝飾層。alignment: Alignment.center讓圖標(biāo)自動居中Positioned負(fù)責(zé)把裝飾角標(biāo)釘在右下角。如果換成Row或Column右下角的裝飾框幾乎不可能這么干凈地實(shí)現(xiàn)。3.2 視覺進(jìn)階漸變、描邊、高光和多層紋理疊加基礎(chǔ)結(jié)構(gòu)確定之后按鈕質(zhì)感的提升主要靠疊加視覺層。你可以把Stack里的內(nèi)容想象成PS里的圖層底層放漸變中間放圖形紋理上層放圖標(biāo)和文字最上面偶爾還得加一道高光。下面這個(gè)是“圖標(biāo)在文本上方”的進(jìn)階版本適合做鴻蒙應(yīng)用的功能宮格按鈕Container( width: 96, height: 88, decoration: BoxDecoration( borderRadius: BorderRadius.circular(16), color: Colors.white, boxShadow: [ BoxShadow( color: Color(0x1A000000), blurRadius: 8, offset: Offset(0, 4), ), ], ), child: Stack( children: [ Positioned.fill( child: ClipRRect( borderRadius: BorderRadius.circular(16), child: Container( decoration: BoxDecoration( gradient: LinearGradient( begin: Alignment.topLeft, end: Alignment.bottomRight, colors: [ Colors.white, Color(0xFFF3F5FA), ], ), ), ), ), ), // 裝飾性半透明圓環(huán) Positioned( top: -18, right: -18, child: Container( width: 50, height: 50, decoration: BoxDecoration( shape: BoxShape.circle, border: Border.all(color: Color(0x22FFFFFF), width: 6), ), ), ), Column( mainAxisAlignment: MainAxisAlignment.center, children: [ Icon(Icons.grid_view, color: Color(0xFF4A6FFF), size: 26), SizedBox(height: 8), Text(應(yīng)用中心, style: TextStyle(fontSize: 12, color: Color(0xFF222222))), ], ), ], ), )這里用了Positioned.fill鋪滿漸變背景再疊一個(gè)右上角的半透明裝飾圓環(huán)最后用普通Column承載圖標(biāo)和文本。高光質(zhì)感來自那個(gè)半透明白色圓環(huán)它并不影響點(diǎn)擊區(qū)域只是視覺上多了一層光暈讓按鈕在深色背景下也不會顯得死板。在鴻蒙設(shè)備上做這類按鈕時(shí)顏色值和陰影的Opacity值要保守一點(diǎn)。鴻蒙部分版本的Flutter渲染引擎對BoxShadow的模糊半徑處理偏重陰影過濃會顯得很臟。我的建議是blurRadius從6開始試顏色透明度控制在0x14到0x24之間比默認(rèn)值清透很多。3.3 交互細(xì)節(jié)點(diǎn)擊穿透、水波紋和禁用態(tài)按鈕做得再好看交互不對也是白搭。用Stack堆疊按鈕時(shí)最容易出的問題就是“上層組件擋住了點(diǎn)擊事件”。舉個(gè)例子上面的高光裝飾圓環(huán)如果直接放在Positioned里而沒有處理點(diǎn)擊穿透它會天然攔截手勢事件。這會給用戶帶來一種“我明明點(diǎn)了按鈕沒反應(yīng)”的糟糕體驗(yàn)因?yàn)辄c(diǎn)擊事件被無意義的裝飾層吃掉了。解決思路有三種用IgnorePointer包裹裝飾層讓手勢直接穿透到下方的按鈕主體。把裝飾層的Color設(shè)置成透明色或用Opacity同時(shí)確保它不參與命中測試。在裝飾層內(nèi)部加上GestureDetector或InkWell處理自己對應(yīng)的事件。我最常用的是第一種IgnorePointer語義清晰也不會意外影響其他繪制行為。水波紋效果方面Flutter自帶InkWell但把它直接用在Stack里時(shí)要注意InkWell需要放在Material組件之上才能顯示水波紋。如果你自己用Container繪背景再在InkWell外包一層水波紋可能被背景蓋住。正確姿勢是把InkWell放在Stack的最上層并讓它的尺寸和按鈕背景層保持一致這樣點(diǎn)擊反饋才可見。禁用態(tài)也要用Stack層級一起控制。我習(xí)慣的做法是在Stack最上層放一個(gè)Visibility包裹的半透明遮罩配合IgnorePointer一起用而不是在多個(gè)子組件里各自判斷onPressed。這樣邏輯集中禁用時(shí)整個(gè)按鈕統(tǒng)一置灰、統(tǒng)一不可點(diǎn)后續(xù)維護(hù)成本也低。4. 帶徽章的圖標(biāo)角標(biāo)定位本質(zhì)上是個(gè)數(shù)學(xué)題4.1 紅點(diǎn)、數(shù)字角標(biāo)、自定義徽章的分層實(shí)現(xiàn)帶徽章的圖標(biāo)在鴻蒙應(yīng)用里最典型的場景是消息Tab、設(shè)置項(xiàng)的狀態(tài)標(biāo)識、購物車入口等?;照骂愋涂梢圆鸪扇惣t點(diǎn)只看有無狀態(tài)、數(shù)字角標(biāo)看數(shù)量、自定義徽章展示時(shí)間、新、熱等文本標(biāo)簽。這三類實(shí)現(xiàn)上并沒有本質(zhì)區(qū)別核心都是Stack Positioned差異只在于徽章內(nèi)部的Widget內(nèi)容。一個(gè)通用模板是這樣的class BadgeIcon extends StatelessWidget { final Widget icon; final bool showBadge; final String? badgeText; final Color badgeColor; final double badgeSize; const BadgeIcon({ super.key, required this.icon, this.showBadge false, this.badgeText, this.badgeColor Colors.red, this.badgeSize 16, }); override Widget build(BuildContext context) { return Stack( clipBehavior: Clip.none, children: [ icon, if (showBadge) Positioned( top: -badgeSize * 0.4, right: -badgeSize * 0.4, child: Container( width: badgeSize, height: badgeSize, decoration: BoxDecoration( color: badgeColor, borderRadius: BorderRadius.circular(badgeSize / 2), border: Border.all(color: Colors.white, width: 1.5), ), alignment: Alignment.center, child: badgeText null ? null : Text( badgeText!, style: TextStyle( color: Colors.white, fontSize: badgeSize * 0.5, fontWeight: FontWeight.w600, ), ), ), ), ], ); } }這里有三個(gè)值得深挖的細(xì)節(jié)。第一個(gè)是clipBehavior: Clip.none如果不設(shè)置負(fù)偏移的徽章會被裁剪這個(gè)問題前面提過但在這個(gè)組件里尤其重要因?yàn)榛照聨缀醣厝灰鰣D標(biāo)邊界。第二個(gè)是Border.all白邊。這個(gè)白邊不是裝飾而是為了在圖標(biāo)背景復(fù)雜時(shí)保證角標(biāo)依然清晰可辨。鴻蒙端有部分頁面背景是漸變色紅點(diǎn)直接懟上去會被背景吃掉加一條和背景同色的描邊是最廉價(jià)也最有效的解決方式。第三個(gè)是badgeText為null時(shí)代表紅點(diǎn)有值時(shí)代表數(shù)字角標(biāo)或文字徽章。通過同一個(gè)showBadge開關(guān)控制展示組件外部不需要關(guān)心內(nèi)部細(xì)節(jié)。4.2 徽章自適應(yīng)折疊和定位偏移的計(jì)算邏輯數(shù)字角標(biāo)最大的痛點(diǎn)是數(shù)量從個(gè)位數(shù)變成三位數(shù)時(shí)方形角標(biāo)如果還是固定寬度文字就會被壓縮或溢出。我的處理邏輯是用IntrinsicWidth或ConstrainedBox讓角標(biāo)寬度隨內(nèi)容伸縮同時(shí)限制最大寬度。Positioned( top: -10, right: -10, child: ConstrainedBox( constraints: BoxConstraints(minWidth: 18, maxWidth: 32), child: Container( padding: EdgeInsets.symmetric(horizontal: 4), height: 18, decoration: BoxDecoration( color: Colors.red, borderRadius: BorderRadius.circular(9), ), alignment: Alignment.center, child: Text( count 99 ? 99 : $count, style: TextStyle(color: Colors.white, fontSize: 10), ), ), ), )偏移量這塊我之前一直用固定值后來發(fā)現(xiàn)不同圖標(biāo)的視覺重心不一樣有的圖標(biāo)自帶較大的透明邊距比如Material風(fēng)格的通知鈴鐺有的圖標(biāo)是實(shí)心方形同樣的top: -10, right: -10在不同圖標(biāo)上視覺偏移差異很大。更穩(wěn)妥的做法是讓角標(biāo)偏移量和圖標(biāo)尺寸聯(lián)動。簡單公式是偏移量 角標(biāo)尺寸 * 0.4比如圖標(biāo)尺寸32角標(biāo)尺寸20時(shí)右上偏移為8視覺上角標(biāo)正好騎在圖標(biāo)的右上角外側(cè)。具體數(shù)值根據(jù)圖標(biāo)形狀微調(diào)這對于圓形或倒角方形的圖標(biāo)很有效。把偏移關(guān)系寫成計(jì)算公式而不是寫死常量是組件可復(fù)用的關(guān)鍵一步。4.3 可拖動消除的徽章Stack配合手勢的進(jìn)階玩法鴻蒙端產(chǎn)品設(shè)計(jì)里“帶角標(biāo)的圖標(biāo)配合下拉/上滑消除”這個(gè)交互越來越多見比如消息已讀、清除未讀狀態(tài)。Stack配合手勢做拖拽消除是這類交互的基礎(chǔ)實(shí)現(xiàn)方案?;舅悸肥前袮nimatedPositioned包在徽章外層配合GestureDetector監(jiān)聽拖拽手勢當(dāng)拖拽距離超過閾值時(shí)觸發(fā)消除動畫。Stack( clipBehavior: Clip.none, children: [ icon, if (showBadge) GestureDetector( onPanUpdate: (details) { setState(() { offsetX details.delta.dx; offsetY details.delta.dy; }); }, onPanEnd: (details) { if (offsetX.abs() 50 || offsetY.abs() 50) { setState(() { showBadge false; offsetX 0; offsetY 0; }); } else { setState(() { offsetX 0; offsetY 0; }); } }, child: AnimatedPositioned( duration: Duration(milliseconds: 200), left: originalLeft offsetX, top: originalTop offsetY, child: badgeWidget, ), ), ], )這段代碼實(shí)現(xiàn)了一個(gè)很常見的交互徽章被拖走后松手超過閾值就消失否則彈回原位。重點(diǎn)在于AnimatedPositioned的動畫要和setState的狀態(tài)更新同步否則會出現(xiàn)拖拽后徽章瞬移的割裂感。不過要提醒一句拖拽消除的徽章不能用Positioned直接包在GestureDetector外面因?yàn)镻ositioned不是一個(gè)能響應(yīng)手勢的組件必須把GestureDetector放在定位組件內(nèi)部。4.4 不同尺寸圖標(biāo)的角標(biāo)適配鴻蒙應(yīng)用的底部導(dǎo)航欄圖標(biāo)尺寸通常在24到28之間內(nèi)容區(qū)圖標(biāo)可能是32到48列表里的小圖標(biāo)可能只有16到20。一個(gè)寫死偏移量和徽章尺寸的組件換到不同場景立刻就開始變形。最合理的做法是把圖標(biāo)尺寸作為組件的一個(gè)輸入?yún)?shù)角標(biāo)尺寸和偏移量都基于它計(jì)算final double iconSize; final double badgeSize; double get _offset badgeSize * 0.35; Positioned( top: iconSize * 0.5 - badgeSize - _offset, right: iconSize * 0.5 - badgeSize - _offset, ... )這個(gè)公式的語義是角標(biāo)中心落在圖標(biāo)右上角的扇形區(qū)域外側(cè)。iconSize * 0.5是圖標(biāo)半徑減去角標(biāo)尺寸的一半再減去一個(gè)偏移量角標(biāo)正好騎在邊緣上。這樣無論圖標(biāo)是20還是48組件的視覺比例都能保持統(tǒng)一。5. 卡片疊加效果封面堆疊、交錯(cuò)卡片與拖拽反饋5.1 三層卡片交錯(cuò)展示Transform.rotate與Stack的組合卡片疊加是堆疊布局最出效果的應(yīng)用場景之一。鴻蒙端的“錢包卡片”“票券列表”“相冊封面”都適合用交錯(cuò)卡片來增強(qiáng)視覺層次感。最基礎(chǔ)的三層交錯(cuò)效果核心是三張卡片底層兩張分別做小角度的旋轉(zhuǎn)偏移頂層卡片正常展示整體疊成一個(gè)扇形Stack( alignment: Alignment.center, children: [ Positioned( left: 20, top: 24, child: Transform.rotate( angle: -0.06, child: buildCard(color: Color(0xFFE8EAEE), width: 280, height: 160), ), ), Positioned( right: 20, top: 12, child: Transform.rotate( angle: 0.045, child: buildCard(color: Color(0xFFD5D9E2), width: 280, height: 160), ), ), buildCard( color: Colors.white, width: 300, height: 180, shadow: BoxShadow( color: Color(0x1F000000), blurRadius: 16, offset: Offset(0, 8), ), ), ], )這里的關(guān)鍵參數(shù)是angle。弧度值-0.06大約等于3.4度用于頂層卡片的視覺差異已經(jīng)足夠。角度大于0.1時(shí)卡片間的層疊感會過強(qiáng)內(nèi)容容易互相遮擋不太適合承載文字類信息。Transform.rotate的旋轉(zhuǎn)中心默認(rèn)是坐標(biāo)原點(diǎn)也就是卡片的左上角。如果你希望卡片圍繞中心旋轉(zhuǎn)需要給Transform.rotate設(shè)置alignment: Alignment.center或者在Transform外層包一個(gè)Center。這個(gè)細(xì)節(jié)會讓交錯(cuò)卡片的手感完全不同。5.2 封面堆疊與詳情展開點(diǎn)擊展開當(dāng)前卡片交錯(cuò)卡片解決了“展示多張卡片”的問題但用戶點(diǎn)擊某張卡片后如何展開詳情又涉及到動畫和布局權(quán)重的轉(zhuǎn)換。我常用的做法是用AnimatedContainer替代靜態(tài)的卡片尺寸讓頂層卡片在被選中后變成大尺寸容器同時(shí)把兩側(cè)裝飾卡片逐漸移出。AnimatedContainer( duration: Duration(milliseconds: 250), curve: Curves.easeOut, width: selected ? 320 : 280, height: selected ? 200 : 160, decoration: BoxDecoration( color: Colors.white, borderRadius: BorderRadius.circular(20), boxShadow: [...], ), child: selected ? buildDetailContent() : buildSummaryContent(), )展開過程中要注意ClipRRect和圓角的一致性??ㄆ归_后如果內(nèi)部有圖片或漸變背景圓角裁剪必須在最外層Container的decoration里完成或者用ClipRRect包住所有子內(nèi)容否則展開瞬間會看到直角穿幫。鴻蒙的觸摸響應(yīng)相對靈敏展開動畫的時(shí)長建議控制在200到300毫秒之間配合Curves.easeOut體感更接近原生卡片交互。5.3 拖拽反饋?zhàn)尶ㄆ忠苿涌ㄆB加的另一個(gè)高頻交互是按層級拖拽用戶可以把頂層卡片拖走露出下一張卡片。這種場景常見于“卡片堆疊滑動”模塊。Stack配合Transform.translate做拖拽反饋要比直接改動Positioned坐標(biāo)更平滑。Transform.translate( offset: Offset(dragOffset.dx, dragOffset.dy), child: Transform.rotate( angle: dragOffset.dx * 0.002, child: buildCard(...), ), )拖拽時(shí)給卡片加上一個(gè)和水平位移量成正比的旋轉(zhuǎn)角卡片就會呈現(xiàn)“被拿走”的自然傾斜感。這個(gè)比例系數(shù)0.002是我反復(fù)調(diào)試出來的太小沒感覺太大整個(gè)卡片會歪得過分。dx100時(shí)角度約0.2弧度大約11.5度視覺上剛好。當(dāng)卡片被拖離屏幕中心區(qū)域時(shí)觸發(fā)動畫移除卡片下一張卡片自動進(jìn)入Stack頂層。拖拽類的交互對觸摸采樣的要求較高。如果卡片內(nèi)還嵌有ListView或ScrollView手勢沖突會比較復(fù)雜建議用GestureDetector的onVerticalDrag和onHorizontalDrag做區(qū)分避免上下滑動時(shí)誤觸發(fā)卡片拖拽。5.4 卡片層級的動態(tài)管理Stack的children順序決定了繪制層級下標(biāo)越大的組件繪制在越上層。在做卡片疊加時(shí)如果你需要動態(tài)改變當(dāng)前顯示的卡片不要寫死children盡量用一個(gè)List.generate構(gòu)建卡片列表再把當(dāng)前卡片放到列表末尾。Stack( children: [ ...cards.asMap().entries.map((entry) { final index entry.key; final card entry.value; if (index currentIndex) return card; return Positioned( left: 16.0 * (index - currentIndex), top: 12.0 * (index - currentIndex), child: card, ); }).toList(), ], )這里把非當(dāng)前卡片都包進(jìn)Positioned并根據(jù)序號產(chǎn)生位移錯(cuò)層讓視覺上保持“下面一摞卡片”的效果。每次數(shù)據(jù)變化時(shí)把cards列表重新排列當(dāng)前卡片放在最后它的下標(biāo)就是最大的繪制在頂層。這個(gè)方案避免了對Stack.children的頻繁增刪狀態(tài)管理也更清晰。6. 常見問題與性能排查實(shí)錄6.1 典型布局異?,F(xiàn)象速查表在鴻蒙端調(diào)試堆疊布局我先后遇到過不少奇奇怪怪的問題這里整理成一張速查表遇到類似情況可以直接對照。現(xiàn)象可能原因解決辦法角標(biāo)被裁掉一半Stack的clipBehavior為默認(rèn)的hardEdge設(shè)置clipBehavior: Clip.noneStack整體尺寸為0內(nèi)部只有Positioned子組件添加SizedBox.expand或尺寸明確的占位子組件點(diǎn)擊按鈕無反應(yīng)上層裝飾層攔截了手勢事件用IgnorePointer包裹裝飾層或把GestureDetector移到最上層水波紋看不到InkWell被Container背景覆蓋把InkWell放在Stack最上層或改用MaterialInk結(jié)構(gòu)卡片交錯(cuò)時(shí)文字被遮擋Transform.rotate旋轉(zhuǎn)后內(nèi)容互相覆蓋降低旋轉(zhuǎn)角度或給卡片增加Transform.translate錯(cuò)開拖拽卡片回彈卡頓AnimatedPositioned動畫時(shí)長與拖拽幀率不匹配改用Transform.translate并加短時(shí)長的AnimatedContainer數(shù)字角標(biāo)文字溢出角標(biāo)容器寬度固定改用ConstrainedBoxpadding自適應(yīng)寬度熱重載后布局錯(cuò)位鴻蒙調(diào)試模式下熱重載偶發(fā)重啟Run或改用hot restart6.2 渲染性能優(yōu)化RepaintBoundary、shouldRepaint、setState范圍堆疊布局組件多、層級深在鴻蒙中低端設(shè)備上容易遇到掉幀。這幾個(gè)優(yōu)化點(diǎn)是我親測有效的。第一把頻繁變化的角標(biāo)內(nèi)容用RepaintBoundary包裹。RepaintBoundary會把內(nèi)部內(nèi)容緩存成獨(dú)立位圖防止父級重繪時(shí)整個(gè)Stack都跟著重畫。在帶徽章圖標(biāo)、卡片拖拽場景中這個(gè)優(yōu)化收益非常明顯。RepaintBoundary( child: BadgeIcon( icon: Icon(Icons.notifications), showBadge: _hasUnread, ), )第二自定義繪制組件時(shí)重寫shouldRepaint。如果你在做印章、紋理或自定義徽章時(shí)用了CustomPainter一定要根據(jù)數(shù)據(jù)變化返回true/false否則每次父級setState都觸發(fā)重繪性能消耗很大。第三減少setState的粒度。比如拖拽卡片時(shí)如果把整個(gè)頁面所有組件都包在同一個(gè)setState里頁面里無關(guān)的圖標(biāo)、文字會全部重建鴻蒙端的卡頓會很直觀。更優(yōu)的做法是只把拖拽位移量交給指定組件的State對象管理或者用ValueNotifierValueListenableBuilder隔離更新。6.3 鴻蒙平臺適配的幾個(gè)細(xì)節(jié)堆疊布局本身沒有任何平臺差異但鴻蒙真機(jī)上有幾個(gè)細(xì)節(jié)會影響你做的組件表現(xiàn)。首先是字體大小和屏幕圓角。鴻蒙設(shè)備普遍采用大圓角屏幕如果你的Stack里有負(fù)偏移的角標(biāo)或卡片頂部圓角區(qū)域很可能會被系統(tǒng)手勢條遮擋。建議頂層內(nèi)容保留至少16到20的左右安全邊距或者用SafeArea包裹。其次是紋理縮放。鴻蒙部分設(shè)備的屏幕像素密度偏高如果卡片背景里用了位圖紋理尺寸不夠大時(shí)會模糊。直接用純色、漸變色或者ShaderMask可以減少這類問題。然后是PlatformView的坑。如果堆疊布局里嵌入了鴻蒙原生View比如原生地圖、原生視頻PlatformView和Flutter的層疊排序偶發(fā)會出現(xiàn)原生視圖蓋住Flutter組件的情況。我記得熱詞里也出現(xiàn)了flutter platformview相關(guān)的搜索說明這個(gè)點(diǎn)大家都會遇到。遇到時(shí)優(yōu)先調(diào)整hybridStacking的層級策略或把原生視圖放到Flutter布局底層。再說一個(gè)調(diào)試期高頻報(bào)錯(cuò)就是開頭提過的Dart VM initializer相關(guān)日志以及熱詞里出現(xiàn)的flutter main gradle plugin報(bào)錯(cuò)。前者在鴻蒙Flutter調(diào)試時(shí)是連接層不穩(wěn)定導(dǎo)致的很多情況重置DevEco的連接或重啟Flutter daemon即可后者通常來自于Android構(gòu)建相關(guān)配置殘留和鴻蒙平臺適配關(guān)系不大注意把Gradle相關(guān)文件里不必要的Android插件移除就行。6.4 關(guān)于渲染后端和異常性能的補(bǔ)充熱詞里還反復(fù)出現(xiàn)flutter impeller說明大家也在關(guān)注Flutter渲染后端升級對鴻蒙的影響。Imppelr是Flutter新一代渲染引擎主要改善圖形渲染穩(wěn)定性和幀率但鴻蒙端適配分支目前對Impeller的支持成熟度參差不齊。如果你在某些鴻蒙設(shè)備上遇到詭異的花屏、紋理錯(cuò)亂但代碼邏輯看起來完全沒問題可以先看一眼渲染后端是否開啟了Impeller必要時(shí)切回Skia驗(yàn)證。這個(gè)問題和堆疊布局本身無關(guān)但堆疊布局層級深、涉及陰影和裁剪多一旦和渲染后端兼容出問題癥狀會被放大排查起來容易誤判成“布局寫錯(cuò)了”。7. 一點(diǎn)沉淀封裝組件前的三個(gè)習(xí)慣除了技術(shù)細(xì)節(jié)最后分享三個(gè)我在實(shí)際項(xiàng)目里養(yǎng)成的習(xí)慣它們直接決定這套堆疊布局方案能不能在團(tuán)隊(duì)里順暢復(fù)用。第一個(gè)習(xí)慣是任何堆疊布局組件先寫一個(gè)獨(dú)立demo驗(yàn)證再抽象。尤其是角標(biāo)偏移、卡片旋轉(zhuǎn)這種帶視覺比例的內(nèi)容直接在真機(jī)上調(diào)整到滿意再封裝成帶輸入?yún)?shù)的組件。否則容易把不合理的固定值帶進(jìn)組件庫后續(xù)維護(hù)成本陡增。第二個(gè)習(xí)慣是clipBehavior和fit兩個(gè)參數(shù)永遠(yuǎn)顯式寫在組件代碼里不要依賴默認(rèn)值。這是我在鴻蒙平臺踩過最多坑的地方顯式寫出值等于給后來讀代碼的人留了一張“此處裁剪策略刻意如此”的提示牌。第三個(gè)習(xí)慣是組件名里帶上層級語義。比如BadgeIcon、CardStack、IconActionButton比CustomButton01這種名字好維護(hù)得多。尤其是項(xiàng)目變大后堆疊布局的組件往往有多個(gè)變體命名一旦模糊后排查的人會非常痛苦。說實(shí)話Flutter做鴻蒙應(yīng)用沒有想象中的順利平臺適配和工具鏈都還在快速迭代期但UI表達(dá)層的思路是完全相通的。堆疊布局這一套東西從Android到iOS再到鴻蒙底層邏輯沒變過變的只是環(huán)境配置和偶爾冒出來的平臺特性。把Stack、Positioned、Transform這幾個(gè)核心工具用熟再摸清鴻蒙端的裁切、性能和調(diào)試習(xí)慣后面再復(fù)雜的UI需求心里基本都有底。
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
91久精品| 天天爽天天操| 精品一区二区三区四区外站| 亚洲无套久久嗯嗯| 婷婷久久五月| 蜜乳AV一区二区三区四| 水多多映视AV| 精品人妻视频一区二区在线播放| 97人妻色| 欧美综合区| 日韩免费福利在线观看| 亚洲日韩人妻中文字幕一区| 五月天婷婷社区| 欧美黑人极品高潮喷吹熟女黑人性暴力日韩在线欧美极品一区二区老师 | 日少妇视频| 屌妞视频久久久久久久| 91色艳| 国产AV超爽| 色狠狠 - 百度| 99re免费| 99热| 2017av无码免费无线播| 欧美性暴力猛交| 学生妹天天看| 天堂射| 97精品综合久久网| 国产精品久久久九九九| 国产精品一区二区麻豆| 免看60秒涩涩视频| 综合伊人激情| 日韩欧美国产一区二区三区四区 | 天美AV片| 五月天激情小说网| 色色婷| 探花精品视频| 狠狠干综合| 操人妻少妇中文| 色综合色色| 国产精品午夜高潮呻吟久久av| 国模不卡| 亚洲制服欧美另类内射| 人人扣人人操| 97舔舔| 91啪9色| 一区麻豆 高清中文字幕| 亚洲图片欧美91N| 精品一区二区三区蜜桃臀赵总| 91精品黄在线观看| 操久久久久久| 97国产精品国| 国产精品久久久久久久久久久久| 亚洲日韩人妻中文字幕一区| xxxx网站亚洲精品| 黄色高清无码无码破解免费暗网| 国产欧美一区激情交| 91人妻Pr| 91人人爽人人爽| 成人老鸭窝人人在线视频| 亚洲AV资源| 久久m| 久久精品噜噜噜成人看免欧美大片| 999久久久久久久久| 国产精品农村妇女| 91福利网在线观看| 午夜无码精品免费看性色| 一级性爱aaaa| 女一区二区| 欧美 亚洲 91| 五月婷亚洲精品天堂| 午夜操逼不卡| 久久丁香五月天| 麻豆AV一区二区| 青青草字幕AV| 国产一级内射高清视频| A片 AV一级在线播放观看免费 | julia ann久久| 色原狠狠天天天| 五月亭亭六月丁香| 亚洲人妻av| 伊人色综合超碰| 久久是精品| 国产精品乱码久久久久| 丰满人妻无码一区二区三区| 黑丝少妇| 人澡逼| 色牛aV| 多毛小伙内射老太婆| 五月丁香六月婷| SS久久| 一区二区视频在看| 国产一区二区av综合| 久妇网| 日本一久是| 国产丝袜美女在线一区| 中文字幕视频免费| 无码日韩人妻av一| 天天看高清麻豆| 神马久久久久久| 青娱乐久久艹| 亚洲视频二区| 国产精品自拍xxxx| 91欧美情色| 十八禁的黄污污免费网站| 日韩专区数据列表-第3230页-精品国产一区二区三区香蕉 久久99熟女人妻中文字 | 激情久久久| 一区二区视频你懂的| 日本影视久久免费| 哈哈操电影AV| 立川理惠被中出无码| 玖玖婷婷五月天| 欧美夜夜骑视频| 精品久久久av无码免费| 91成人在线| 自拍六区| 午夜精品久久久久久久男人的天堂 | 久肏视频字幕| 爆操无码| 综合大香蕉美。| 草草影院最新网址| 亚洲和欧美裸体美女双飞视频| 91综合熟女| 丁香九月激情| 欧美日韩中文字幕人妻| 又大又白奶子| 在线免费观看高清无码视频| 日韩无码嘿咻黑热久| 大香久久| 亚洲、日韩、综合、另类| 91女日逼| 可乐操在线| 午夜精品视频777| 欧美综合综合| 蜜桃精品一区二区三区ww| 亚洲网站一区二区在线| 91精品婷婷国产综合久久竹菊| 久久久久亚洲熟妇熟女| 国产后入内射| 亚洲五月丁香花狠狠干一区二区三区 | 欧美爱三级日韩久久| 91久久久视| 波多野42部无码喷潮在线观看 | 中国AV美女| 日本精品国产视频| 人人操,操人人| 精品日韩产品在线,日韩在线不卡视频,欧美日韩免费专区/久, | 久久黄人人爽视频| 嗯嗯嗯不要不要免费视频| 日韩操逼性鲍| 天天爽入口| 六月婷婷激情| 亚洲古典另类欧美在线| 欧美综合第一页| 亚洲图片欧美制度| 色优久久| 久久久久9999妇女| 色诱中文字幕| 99青草| 亚洲熟女一区| 天天插天天操| 久久av色| 日韩少妇一区二区三区| 男人综合网| 玖玖蜜臀资源网| 岛国视频一二三区| 欧美 亚洲| 婷婷五月天无码 | 中日高清无码操逼视频| 中国一级αV| 亚洲丝袜制服国产91_国语字幕免费观看完整版下载第5集_ | 国产精品扒开腿做爽爽爽视频| 人妻精品一区二区全免费| 婷婷激情五月天小说网| 老司机午夜精品视频| 亚洲人人夜夜澡人人爽| 日日骚 av| 97久久精品亚洲| 日韩熟女乱伦中出| 国产精品不卡一区二区三区av| 国产乱青青草久久| 亚洲色图加勒比| 婷婷五月丁香五月| 日韩中文字幕在线视频观看| 久久大香蕉手机高清| 亚洲 国产 精品一区| 亚洲成人精品在线一区| 欧洲精品一级二级精品综合视频综合 | 久久αⅴ| 大香蕉一人| 九九九九九九视频| 伊人久久大香线蕉亚洲五月天,青草青草欧美日本一区二区,欧美日产欧美日产国产 | 少妇熟女一区二区三区| 呻吟 欧美 日本 中出| 色眯眯射| 欧美亚洲丝袜美女电影| 婷婷国产精品九区| 日日橹狠狠爱欧美超碰| 久久伊人青青草| 国产精品久久久视频| 久久精品小视频| 色情五月丁香| 欧美性爱另类综合| 偷看洗澡一二三区美女| 亚洲日韩成人性爱视频| 亚洲欧洲日韩国产自在线| 牛牛操视频逼| 变态乱伦伪娘灌肠一区二区| 欧 美 自 拍 偷 拍| 免费观看网黄| 国产精品久久久久亚洲av| 福利视频香蕉免费一区二区在线| 中文字幕欧美日韩三级| 亚洲九九九| 色综合加勒比| 92性色国产午夜福利在线661| 国产欧美在线观看免费观看| 亚洲精品天天影视综合网| 午夜精品久久久久久久男人的天堂 | 少妇被玩视频二三区| 天天干少妇| 欧美成人9797| 人妻精品4K4K4K4K4| 日日橹狠狠爱欧美超碰| 日韩中文字幕2020| www.av不卡中文字幕| 日韩成人人妻网站| 91狠狠| 国产毛片毛片4p懂色| 午夜国产成人精品视频| 色网在线视频观看免费| 欧美一级做a爰片免费视频| 国产超碰人人操| 99热综合| 一区二区不卡| 懂色AV网| 国产精品蜜臀久久久久无码AV| 国产多人在线观看视频| 亚洲福利中文字幕在线| 麻豆性爱视频在线播放| 国产麻豆一区二三区| 99re6在线视频播放免费精品| 国产午夜在线观看| 亚洲蜜桃V妇女| 色婷婷综合网| 91日日| 国产精品夜夜夜| 亚洲情色视频| 成人麻豆av电影网站| 一本大道青青| 国产一区二区在线播放量| 伊人激情五月天一区二区| 激情九月婷婷| 蜜臀99999| 人伦四五区| 富女玩鸭子一级毛片| 1769一区二区| 国产精品。| 欧美色交| 国产AV久久野战精品| 色播五月婷婷| 亚洲在钱| 日韩av不卡在线看| 久操99| 久久久96精品| 高潮的A片激情扒开一区| 91|九色|国产熟女| 日韩成人人妻网站| 国语精品内射在线观看| 日本免费不卡二区| 久操频道免费在线呗看| 国产精品熟女乱伦| 色综合久久夜色精品国产天堂| 女生久久网| 无码精品蜜桃一区二区三区ww| 亚洲图片欧美91N| 91精品人妻五十路| jizzjizz欧美| 日韩不卡一二三四| 啪啪AV导航| 男人的天堂.com| 日韩大香蕉| 亚洲自拍小说| 白嫩国模丰满一二三区| 免费亚洲国产精品久久一区| 欧美性爱第一区| 美女淫穴| 天天摸夜夜添无码小视频| 欧美日韩国产传媒在线精品| 亚洲丝袜诱惑| 久久99国产综合精品女同| 国产熟女一区二区| 天天综合91在线| 天天干嫩逼网| 亚洲日韩肥臀视频在线观看| 综合网天天| 精品一区二区三区蜜桃臀赵总| 97人人夜| 婷婷五月天福利| 日韩精品三级| 色av中文字| 久久9久| 欧美亚洲玖玖玖| 天天做天天爱| 日本一区99| 欧美日韩*字幕一区| 2025亚洲男人天堂| 国产日韩在线播放av| 日韩美女高潮喷水视频| 国产小u女在线观看| 精品人妻视频一区二区在线播放| 九九精品热| 校园春色五月天| 亚洲、日韩、综合、另类| 国产精品白丝在线播放| 天堂综合| 色综合色色| 蜜臀99久久精品久久久懂爱| 97se综合| 欧美综合站| 国产乱伦搜索结果91P| 少妇极品熟妇人妻无码| 欧美亚洲中文字幕| 蜜桃狠狠色伊人亚洲综合网站| 亚洲AV乱码专区国产噜噜亚洲| 欧美亚洲素人制服精品| 99热线麻豆 | 欧美成人综合| 亚洲综合小说另类图欧美视频激情小说色五月天 | 日韩一级欧美一级国产一级台湾| 桃色人妻在线视频| 午夜免费视频1000| av在线一区二区三区| 精品美女少妇一区二区| 色爱欲亚洲| 殴美大黄片| 视频不卡中文字幕| 91久久久久久久| 志村玲子视频一区二区| 操逼www.| 四虎精品永久在线播放| 久久精品成人| 裸模AV女优| 大香蕉人妻| 超碰色男人操熟女| 久久久久99999| 黄久在线| 欧美永久激情一区二区| 五月婷婷激情网| 欧美一区二区三区入口| 亚洲日韩国产精品| 久久精品国产97欧美精品亚洲 | 热热色色综合| 国产a级精品| 欧美日韩91| 日韩精品在线视频在线观看| 试看60秒 爽| 伊人在线大香蕉视频久久| 黄色成品网站| 国产欧美一区二区| 国产久久一区二区午夜| 99热最新网址| 久色网| 五月天黄色激情视频| 午夜福利一区二区影院| 国产日韩无码一区二区三区久久区| 无码二级三级| 色欲天香天天综合网-成年人三级片网站-欧美乱妇狂野-日韩国产专区-久久久久久 | 超碰伊人在线| 青青欧洲黑| 欧美日韩理论一区| 97综合在线观看| 亚洲色久| 99热免费| 97国伦国色| ′ !γ}丶。。久久精品欧美一区二区三区| 在线无码操| 操逼www.| 日本一区二区三区四区免费观看| 久操com| 伊人精品久久网站| 黄片com.| 精品人人插人人操| 天天操天天舔| 亚洲图片欧美在线视频| 日韩精品99999| 色婷五月| 精品国产乱码久久久久久久久1| 五月丁香综合| 天无日色综合| 中文字幕在在线观看网站| 97免费在线视频在线观看| 欧美大香蕉卡久久| 欧美大香蕉97| 加勒比伊人综合| 超碰 国产熟女精品一区| 久久噜| 精品少妇一区二区三区| 亚洲无码日韩电影| a级免费在线观看| 人人干黄色| 欧美激情性爱视频网站| 午夜精品久久久久久久99蜜桃一| 操99| 日日骚 av| 超碰久久精品| 欧美激情区| 国产操逼网站亚洲一级黄色| 97在线视频观看网站| 日韩国产乱子伦App| 久9视频| 97色五月天完| 欧美日韩青操| 中国91AV| 午夜一区二区三区国产| 亚洲精品男人的天堂| 999久久久久久久精| 亚洲激情天堂网| 日韩电影免费网站麻豆视频| 日本天天干天天操一区| 亚洲精品国产熟女| 日韩一级二级| 五月天亚洲网| 亚洲网站一区二区在线| 亚洲图片欧洲图片aⅴ| 色噜噜婷婷| 日韩激情视频| 一区二区三区四区理论片| 内射老妇BBWX0C0CK| 国产精品一区二区 尿失禁| 热久久这里只有精品| AV天堂男人的天堂| 国产97视频| 国内毛片婷婷六月色| 狠狠色丁香| 天堂伊人久久| 午夜福利国产欧美日韩夜夜| 五月婷婷性爱| 劲爆欧美人妖三区91| 中文字幕三四区| 中文字幕一区日韩精| 91视频成人福利网站在线一区 | 无码伊人久久大杳蕉中文无码| 综合国产97| 欧美桃色网| 高潮毛片无遮挡高清免费| 91碰碰碰| 色婷婷一区二区三区久久午夜成人不| 国产乱伦亚洲色图高清无码| 五月天久久久| 久久亚洲日韩国产欧| 国产精品爱欲| 99九九久久| 蜜臀99久久精品久久久懂爱| 女人高潮抽搐喷水视频网站| 久久久久久久久9| 18禁网站在线播放| 欧美夜夜骑视频| 香蕉欧美| 综合国产97| 天天肏天天干| 亚洲国产欧美日韩人妻日中文| 久久久涩| 久久久激情| 男人天堂导航| 99色色网| 网友自拍第一页| 红杏大香蕉| 熟女91网站| 99色热| 国产成人网站在线观看| 色一区二区三区综合| 无码av永久免费专区网站| 十八禁黄色成人网站观看| av激情亚洲五月天| n1038 一二三区| 国产日韩无码一区二区三区久久区| 亚洲 欧美 中文 日韩超碰| 97超碰美女| 日韩亚洲美女一区久久| 午夜国产综合视频在线观看| 天堂麻豆天美| 国产精品自拍xxxx| 亚洲在线观看| 91一区二区| 国产精品女aA片爽爽视频| 97网址www| 日本人妻中文字幕精品| www.acm成人黄色毛片| 九九综合久久| 久久精品国产亚洲AV先锋| 色狠狠综合噜一二三区| 精品国产91av一区二区三区| 9久9久9久9久视频网站| 91oumei| 久久黄片国产一区二区| 91亚洲欧美综合高清在线| 免费视频a级毛片免费视频| 99999亚洲| 欧美亚男人的天堂| 国产高清在线观看欧美| 欧美性爱一区二区三区| 日本97久久久精品| 久草大| 激情小说亚洲| 久久久久久久久久精| 啊视频在线| 日韩免费簧片| 色狠狠一区二区三区香蕉| 国内精品久久国产,www香蕉久久五月丁香,亚洲欧美日韩精品永久在线,日本精品一 | 激情文学 国产一二三aV| 中文字幕乱码人妻二区三区| 亚洲色欧| 少妇人妻精品| 婷婷五月天在线观看| 翔田千里AⅤHD无码| 噜噜噜亚洲精| 色色综合97| 五月婷婷色| 国产一级不卡在线观看| 午夜毛片亚洲精品片国产久久久| 97视频在线视频| 99这里有精品| 国产 三级自拍| 天天夜躁日日躁狠狠2002| 96精品久久久| 欧洲亚洲天堂精品| 欧美性区| 日本不卡卡一区| 成人午夜视频免费播放| 2017人人操,人人摸| 91熟女在线| 亚洲色棕合| 啊好爽快点-国产一区二区三区撒尿在线-成人AV| 黄色片大香蕉| 精品亚洲国产成人av网站| 精品国产乱码久久| rion磁力链接| 97亚洲综合在线| 久久久国产精品亚洲精品| 国产老熟女| 69精品少妇一区二区三区蜜桃| 午夜高清成人在线视频| 亚洲AV噜噜狠狠网址蜜桃动漫| 国产精品女aA片爽爽视频| 欧美色综合网| 久久久久久久久久久精| 99热8| 久久伦理视频久久大香蕉视频| 91原创在线观看| 天天日天天插| 精品一区二区三区蜜桃臀赵总 | 国产毛片在线| 大学生口爆吞精| 91视频伊人| 黑人免费福利视频| 国产精品免费久久久久久久久久| 国产99热| 91香蕉国产尤物视频| 欧美天天干| 激情一区二区| 日韩精品在线观看网站| 午夜福利视频在线一区| 亚洲精品一区二区日本| 久久6热精品99视频| 日韩啪啪啪视频| 一区中文字幕二区日韩| 后入人妻一区| 日韩国产十八禁| juliaann丝袜大战黑鬼| 亚洲一二三| 天天综合麻豆视频| 男人天堂无码| 亚洲图片91| 成人久久久| 一中国女人毛片水真多| 日本操逼aaaaa| 女同女同恋久久级三级| 26uuu国产日韩综合在线观看| 欧美国产精品| 亚洲第一在线视频| 中文无码一二三区| 亚州久久9| 亚洲综合色在线| 精品一区二区三区18| 中日韓欧美高清| 无码高清操逼网址| 黄色高清无码无码破解免费暗网| 九九在线精品| 91爰爱欧美| 精品二区久久| 精品人妻中文字幕高清| 中文字幕亚洲热播人妻| 玖玖色综合| 夜夜狼人妻| 日韩精品电影| 91熟女丨老女人| 综合激情二| 国产热RE99久久6国产精品首| 大香蕉97久久| 97超碰中文| 97干97色| 亚洲最新a在线观看| 大香交伊人网| 亚洲清纯唯美| 午夜男女爽爽大片免费观看| 国产精品久久成人免费| 天天干天天日天天射黄色| 伊人久久亚洲色欲综合网站 | 久久久久久久久久久久黄色 | 综合网久久| 国产麻豆91欧美一区二区久久婷婷国产精品 | 99色网| 操逼无码一区| 超碰午夜在线| 91久久婷婷| 中文字幕亚洲热播人妻| 一个人在线看的黄色电影网站| 高清孕妇孕交 交孕妇| 国产日韩精品suv| 五月天精品| 欧美亚洲国产日本在线,久久精品国产| 一区二区三区四区理论片| 综合操逼| 一区二区不卡| 五月天我淫我色av| 天综合网| 中文字幕乱亚洲美女精品一区| 亚洲成熟国产精品美女| 美女主播色欲91抠b在线播放| 91啪啪| 97久久精品亚洲| 国产精品禁久久久精品| 欧美色图私拍91| 美女久久久久久久久久久| 蜜乳AV色欲AVAV无码| 九九九九九九九九九九九九九九九女| 国产品精品自在在线午夜免费| 婷婷导航| 九九九一二三| 超碰在线91| 久久久免费高清中文视频| 一区二区视频在线播放| 91视频综合在线| 韩国一级AAA| 国产乱码精品久久久久久| Sekablack无码一区| 日韩精品三区四区| 中国操逼无码| 78久久久| 国产精品爽爽v| 麻豆国产成人精品| 日韩欧美综合激情| 夜夜嗨免费视频| 欧美亚洲日本激情在线| av天堂加勒比| 这里有精品| 久久久久久9| 亚洲熟妇丝袜在线观看| 国产无码精品成人| 天天天天天天天天综合| 国产无马视频| 偷拍亚洲视频一区二区三区四区| 麻豆这里只有精品| 欧美 亚洲 在线| 欧美日韩人人精品| 精品成人无码| 精品一区二区2| 丁香六月婷| 国产精品懂色tv影视免费观看| 日日AV加勒比| 亚洲成?V人片在线观看福利| 男人天堂导航| 射丝袜高跟鞋99| 国产理论视频在线播放| 蜜区区视频79| 成年男人的天堂| 天天干人人干天天日97| 久区视频| 久久深夜无码| 久伊人网78| 激情自拍 校园春色| 免费?级毛片无码?∨蜜芽试看| 欧美综合 站| 欧美操逼一二三区| 99re国产精品视频| 日本韩国五十路六十路七十路老熟女作爱视频网站 | 人人射人人操人人摸| 少妇无码999| 搞中出视频在线观看| www久久99| 国产婷婷综合在线观看| 少妇内射视频| 久久综合日韩亚洲欧美| 午夜精品探花| 强奸乱伦 亚洲一区| 亚洲情色综合网| 高清不卡国产| 超碰成人免费| 欧美aa一级片| 久久色网| 5252色欧美在线男人的天堂| 裸模AV女优| 激情丁香五月| 激情综合网五月婷婷五月天| 91操熟女| 欧美亚洲首页| 台湾佬中文娱乐网久久久久久久久久com | 亚洲色图 欧美热图 清纯唯美 另类自拍 | 欧美性高潮| 男人的天堂在线| 女人天堂AV五区在线| 丰满人妻一区二区三区大胸懂色 | 久草视频制服诱惑| 激情五月天网站| 亚洲蜜桃V妇女| 99久久久无码精品国产人| 性色亚洲| 亚洲男人天堂手机版| 欧美一品道| 久久大陆| 欧美精品 - 91爱爱| 超碰超碰欧美| 亚洲Av诱惑| 日韩中文字幕精品一二三事国产精品| 精久久久91| 嗯嗯嗯啊啊啊操的我好爽| 加勒比大香蕉视频在线| 麻豆国产免费影片| 亚洲成A∨人影院在线欢看| 婷婷av在线中文字幕| 日韩少妇无码| 久久系列| 午夜超碰| 91视频综合| 亚洲图片欧美色| 欧美综合亚洲综合| 91色插| 日日不卡av| 2017天天插| 日本媚薬中文字幕在线| 少妇无码999| 亚洲精品少妇| 91精品人| 性色av大全| 精品九九国产无码| 国产亚洲美日韩Aⅴ中文字幕无码成人| 一区二区免费电影久久| av一区二区三区四区| 国产黄色影片在线观看| 国产野战露脸在线播放| 93人人操人人| 每日更新AV| 欧美一区二区亚洲天堂| 婷婷月色| 久久久久久久久久久久久9999| 麻豆区99999| 欧美 日韩 另类 亚洲| 91天射| 欧美九一精品久久久熟妇| 清纯唯美综合亚洲| 久久啊啊啊| 婷婷伊人五月| 熟女五十路一区二区三| 国产成人www免费人成看片| 91|九色|国产熟女| 欧美制服另类丝袜| 欧美亚洲美少妇一区二区| 国产精品午夜福利视频| 91精品国| 国产精品白领在线观看 | 中文字幕一区 二区三四五 区日 日骚| 欧亚洲精品有视频| 久久综合女优| 男人天堂最新手机版在线青青草| 91精品人妻一区二区三区蜜臀| 欧美性爽xyxOOOO| 日韩激情小说一区二区| 六月激情网| 男人的天堂欧美| 在线观看啊啊啊啊啊| 狠狠爱综合网| 亚洲欧美国产成人综合不卡| 天堂精品在线| 日日夜夜模| 熟女人妻一区二区三区| 国产精品视频麻豆入口| 丁香五月综合| 男人的天堂日本东京热| 国产97视频| 综合在线导航一区| 欧美嫩性色| 92大香蕉| 精品国产无码中文| 婷婷六月天| 97精品在线| 日本成a人v网站在线观看| 日韩av不卡在线观看| 国产一区二区三区不卡手机在线| 欧美精品,四区。五区| 青娱乐休闲视频在线观看| 精品国产久热在线观看| 久草毛片电影怡| 婷婷爽人人婷婷爽视频| 亚洲97久久精品亚洲| 亚洲美女精品| 久久久久久久| 午夜精品久久久久久久99蜜桃一| 欧美日韩国产电影| 日韩欧美加勒比| 国产乱伦性爱AV| 国产一区二区在线播放,久久亚洲精品中文字幕第一区,亚洲精品在线中文字幕视频 | 极品色社| 91丝袜人妻| 8050无码八戒| 欧美久久久| 午夜无遮挡男女啪啪视频| 色综合美国| 外国免费性情大片| 亚洲古典另类欧美在线| 91天天爱| 亚洲精品成人动漫在线| 不卡超碰护士AV在线免费播放| 亚洲自拍小说| 日韩在线观看中文字幕视频| 亚洲九九视频在线观看| 国产免费操逼| 亚洲天堂日本| 国产av波波国产精品| 亚洲大色堂| 人人贴人人摸| 色制服丝袜夫妻av一区| 中文字幕,人妻,日韩| 久久久婷| 黄色av网站在线播放| 伊人久久大香线综合无码| 搡老熟女免费视频| 午夜精品久久久99| 大香蕉www.超碰| 亚洲人妖网| 午夜男人av| 日韩欧美中文字| 免费作爱一级视频| 久久九九热| 伊人激情| 91色综合| 日本999精品视频| 天天插夜夜操| 欧美高清在线| 精品婷婷| 亚洲欧美小说| 精品十三区| 中文字幕亚洲永久精品| 男人天堂久久精品不卡| 久久人人看| 久久久久久久久久9| 四虎影库国产精品免费| 日本羞羞的视频在线播放| 1二区9| 国产第25页在线观看| 四虎免费在线播放| 97精品一二区| 日韩欧美成人午夜福利| 蜜桃狠狠色伊人亚洲综合| 丁香五月天激情网站| 国产精品第一页国产大屁股视频免费区 | 日本欧美m v精品网站加| 亚洲超碰AV| 国产精品农村妇女| 综合久欧洲| 欧日a| 99re这里只有精品9| 国产乱弄免费在线视频。| 欧美午夜一区二区三区| 熟女精品日韩一区二区三区| 白丝jkav| 婷婷丁香五月综合| A级毛片在线看免费| 天天日熟妇| av优播| 芊芊操逼视频无码| 伊人超碰97| 在线亚洲精品久久久| 九九香蕉网| 欧美性爱18观看| 老熟女综合网 | 精品中文字幕第一页| 色区97| 97色涩| 亚洲,欧美,春色,另类| 五月婷婷六月丁香网址| 天堂成人网| 天综合网欧美| 国产精品小视频一区二区三区| 特级丰满少妇一级AAAA爱毛片| 97在线免费观看视频| 欧美天天在线| 日韩成人午夜精品久久高潮| 人妻av在线| 噜噜噜在线视频| 懂色aV一区二区天美传媒| 男女香蕉一区二区| 熟女自慰久久久| 在线观看一卡二卡| 秋霞欧美性爰视频| 性爱视频啪啪啪啪| 国产熟女精品一区二区| 麻豆天天躁天天揉揉AV| 中文字幕AV片| 91亚州欧美| 久久熟女人| 成人精品在线观看| 国产美女高潮叫床视频| 天天操天天射天天日| 日韩三级伦理中文字幕| 亚洲性天堂| 97久久超碰亚洲| 丰满人妻一区二区中文| 青青草视频导航官网| 国模限制级电影| 99精品视频在线观看| 操逼操操操91| 俺去俺来也在线www| 欧美人与性动交a美精品| 女人与公拘交酡2020视频| 亚洲欧美黄| 日韩猛交| 亚洲天堂男人网| 四虎免费在线观看| 青娱乐妇女性生活| 懂色Av一区二区三区| 少妇贴图| 97超碰超| 久久久久久久久999| 日本506070| 97亚洲精品| 日本一道在线播放高清| 探花视频免费观看国产专区| 91超碰在线| 男女啪啪网站免费视频| 国产主播福利| 精品国产乱码| 美女尤物人人操| 天堂中文日本在线观看| 性色av网站| 立川理惠加勒比无码| 免费一级视频特黄色大片| 婷婷丁香在线| 91neishe| 成人色女网| 综合av影片| 亚欧操逼片在线观看 | 国产精品久久久久久久AV大片 | 啊啊啊好疼| 欧美成人贴图| 久久久久九九九| 欧美日韩*字幕一区| 日本一级婬片试看三分钟| 日人妻视频91| a网站免费观看| 丝袜内射| 亚洲涩图欧美| 免费视频97| 亚洲日韩在线a不卡99精品| 亚洲av综合色区图片亚洲| 美國A片| 男人的天堂亚洲| 日韩精品熟妇| 久久精品一区一起草| 加勒比综合| 国产一级137片内射麻豆| 日韩去日本高清在| 日韩三级久久久| 日韩中文字幕2020| 欧美92| av一区二区三区四区| 亚洲国产欧美中文永久| 亚洲国产综合久久天堂| 亚洲日韩XXX| 欧美天天搞| 一本大道不卡一二三区| 五月丁香在线| 一直超碰| 密臀在线一区尤物| 亚洲中文字幕久久人妻| 99无码精品| 熟女欧美日韩综合婷婷| 校园春色亚洲色图| 一级黄色视频网| 开心五月婷婷| 超碰日韩美妻| 激情五月天中文字幕色| 免费黄色A片| 青青青青草av在线观看| 午夜传煤十二区精品| 亚洲第一免费视频| 91无人区卡一卡二卡三乱码入口最新版:能让用户有更多选择的选择-经典说说-爱 | 久久这里只有精品9| 91艹B视频| 国产久久视频| 97这里有精品| 无码国产精品久久久久| 天天综合网在线| 欧美性91| 国产免费永久精品无码| 欧美 熟女 日韩| 亚洲无码视频免费在线观看网址!| 日本操BAV| 超碰在线97国产| 欧美视频一| 日韩免费人妻色情网站| www.久久超碰| 亚洲砖码砖专无区2023| 青青草国产盗摄一二三区| 亚洲九九九| 久久麻豆一区二区| 中文字幕免费在线观看| 亚洲最大成人a毛毛片| 久久九九一区二区三区成人| 国产97亚洲| 久久怡红院| 97色欧洲| 国产成人自拍视频在线| 中文久久96| 性久久| 亚洲精品1区| 1人人看人人摸人人操| 成人网欧美风情| 色综合av综合久久| 亚洲欧美校园另类春色| 日本欧美不卡| 亚洲黑丝在线| 91亚洲人| 欧美一区91大爱| 草草草草视频| 欧美综合骚| 热99这里有精品综合久久| 乱精品一区字幕二区| 久久国产精品m码| 九九综合| 欧美色就是色| 人妻在线臀日韩| 性爱视频免费网址| 情色五月天久久久| 欧美的性爱网站免费| 操操操操网黑人| 欧美性爱第一区| 97精品中文字幕| 看日韩操逼| 欧美韩日精品99综合| 欧洲色色| 欧美日韩在线小说| 老熟女91av| 精品国产91内射久久| 亚洲限制级| 狠狠色噜噜狠狠狠狠狠色综合久久| 亚州大图综合色图| 91精品黄在线观看| 色欧洲| 91夜色chaopeng| 国产一区二区精品久久99| 超碰欧美在线欧美| 亚洲人妻AV| 国产精品免费久久久久久久久久| 美女高潮视频91| 天天色,天天干,天天干| 色97综合中文字幕| 玖玖视频在线资源一区二区三区| 一二三区操逼国产91| 婷婷另类小说| 天天色综合天天操| 国产农村妇女精品| 亚洲情色在线| 久久久成人国产精品无码| 91日韩国产欧美亚洲另类精盘州至城都| 91久热这里只有精品| 日韩综合无码色欲vv| 亚州,欧美在线| 蜜桃臀 后入 一区 二区 三区 在线| 在线观看无码三级少妇| 久久黄黄黄| 大香蕉色网| 岛国片在线观看视频亚洲| 久久久97| 91日日夜夜| 久操B网| 日韩欧美一级特黄大片| 97超碰色色| 久久久噜噜噜久久人妻| 欧美三级不卡| 精品黑人一区二区| 91精品国产91久久青草| 青青草玖玖爱| 欧美激情总合网| 亚洲二区精品在线观看| 97精品视频| 中文字幕无码不卡啪啪| 日欧美色| 桃色五月天| 日逼国产| 中文字幕日韩专区精品系列| 国产日韩美女小穴视频网站不卡| 亚洲精品欧美专业| 久久一二三四五六七八九区区区| 久久黄色视频一区二区三区| 九九九精品美女| 日本免费一区二区不卡| 综合干干干av久久久综合网 | 91视频综合网| 啊啊啊操死我了| 伊人精品视频| 亚洲 中文 女同| 99精品在线播放| 国产精品一区二区三区,亚洲综合 性开放中文AV高清无码免费看 | 久久9精品网站| 国产精品高潮久久AV| 国产四虎在线| 日本免费中文一区二区三区四区| 天天视频综合在线观看视频| 久久久久久久九九九九九九| 色图综合网| 97色色色| 91老司机视频| 久久久999国产| 麻豆区久久久久亚| 精品九九九九九九九九九| 91扒丝袜综合在线| 超碰久久性爱| 精品一区二区三区蜜桃臀赵总 | 欧美日韩中文视频播放| 日本韩国五十路六十路七十路老熟女作爱视频网站 | 色女综合| 91丝袜| 五月天日日操夜夜操| 啊啊啊啊啊啊啊啊啊在线观看| 99热精品国产| 亚洲瓯美色图| 亚洲第一页欧美| 伊人国产av| 9999伦理视频| 日少妇亚洲版| 91成人在线| 激情欧美日韩女同久久| 日逼五月天| 久久久不卡区一区二区三区久久久| 嫩草 人人网精品| 老师充足的奶水小说| 亚洲精品国产AV天美传媒| 精彩国产视频播放1区2区| 2025亚洲男人天堂| 久久亚洲不卡一区二区三区| 在线 亚洲 网爆 自拍| 香蕉久久精品| 国产一区二区久久| 偷拍片久久| 欧美综合综合| 欧美乱欲| 亚洲97成人在线观看| 中文字幕美女91| 亚洲图片日本AⅤ欧美在线| 免费一级特黄特色大片在线观看看 | 黄色视频60分钟|