精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

移動開發新利器 | 一文深入了解 Flutter 界面開發

新聞 Android
談到移動端開發,大家心中肯定會涌現出一系列名詞:iOS、Android、Weex,H5... 那為何還使用 Flutter?其實,Flutter 通過自建繪制引擎,具備與 Native 媲美的性能指數,且有很好的兩端一致性,因此 Flutter 提供了一種新的可選項。

 [[232114]]

  阿里妹導讀:談到移動端開發,大家心中肯定會涌現出一系列名詞:iOS、Android、Weex,H5... 那為何還使用 Flutter?其實,Flutter 通過自建繪制引擎,具備與 Native 媲美的性能指數,且有很好的兩端一致性,因此 Flutter 提供了一種新的可選項。閑魚寶貝詳情頁實踐上線也證明了這點,可以在性能無損前提下降低 iOS&Android 開發成本。

  本文由閑魚技術團隊出品。它將為你深入介紹 Flutter framework 關于視圖樹的創建與管理機制、布局、渲染的原理,以及 Flutter 布局與渲染相關性能優化的設計思路的文章。同時介紹在使用 Flutter 開發過程中,遇到的一些坑和相應的解決方案。

  Flutter 框架簡介

  1. 跨平臺應用的框架,沒有使用 WebView 或者系統平臺自帶的控件,使用自身的高性能渲染引擎(Skia)自繪。

  2. 界面開發語言使用 dart,底層渲染引擎使用C, C++。

  3. 組合大于繼承,控件本身通常由許多小型、單用途的控件組成,結合起來產生強大的效果,類的層次結構是扁平的,以***化可能的組合數量。

  Rendering Pipeline

  本文主要介紹 build、layout、paint 的三個階段。

  視圖樹

  Widget&Element&RenderObject

  Flutter 視圖樹包含了三種樹,上圖只是介紹了三顆樹的基礎 class 的對應關系和功能介紹。

  創建樹

  1. 創建 widget 樹

  2. 調用 runApp (rootWidget),將 rootWidget 傳給 rootElement,做為 rootElement 的子節點,生成 Element 樹,由 Element 樹生成 Render 樹

  • Widget:存放渲染內容、視圖布局信息,widget 的屬性***都是 immutable (如何更新數據呢?查看后續內容)

  • Element:存放上下文,通過 Element 遍歷視圖樹,Element 同時持有 Widget 和 RenderObject

  • RenderObject:根據 Widget 的布局屬性進行 layout,paint Widget 傳人的內容

  更新樹

  ★為什么 widget 都是 immutable?

  Flutter 界面開發是一種響應式編程,主張 simple is fast,Flutter 設計的初衷希望數據變更時發送通知到對應的可變更節點(可能是一個 StatefullWidget 子節點,也可以是 rootWidget),由上到下重新 create widget 樹進行刷新,這種思路比較簡單,不用關心數據變更會影響到哪些節點。

  ★widget 重新創建,element 樹和 renderObject 樹是否也重新創建?

  widget 只是一個配置數據結構,創建是非常輕量的,加上 Flutter 團隊對 widget 的創建/銷毀做了優化,不用擔心整個 widget 樹重新創建所帶來的性能問題,但是 renderobject 就不一樣了,renderobject 涉及到 layout、paint 等復雜操作,是一個真正渲染的 view,整個 view 樹重新創建開銷就比較大,所以答案是否定的?! ?strong> 

  ★樹的更新規則

  1. 找到 widget 對應的 element 節點,設置 element 為 dirty,觸發 drawframe, drawframe 會調用 element 的 performRebuild ()進行樹重建

  2. widget.build () == null, deactive element.child,刪除子樹,流程結束

  3. element.child.widget == NULL, mount 的新子樹,流程結束

  4. element.child.widget == widget.build () 無需重建,否則進入流程5

  5. Widget.canUpdate (element.child.widget, newWidget) == true,更新 child 的 slot,element.child.update (newWidget)(如果 child 還有子節點,則遞歸上面的流程進行子樹更新),流程結束,否則轉6

  6. Widget.canUpdate (element.child.widget, newWidget) != true(widget 的 classtype 或者 key 不相等),deactivew element.child,mount 新子樹

  注意事項:

  1. element.child.widget == widget.build (),不會觸發子樹的 update,當觸發 update 的時候,如果沒有生效,要注意 widget 是否使用舊 widget,沒有 new widget,導致 update 流程走到該 widget 就停止了。

  2. 子樹的深度變化,會引起子樹重建,如果子樹是一個復雜度很高的樹,可以使用 GlobalKey 做為子樹 widget 的 key。GlobalKey 具有緩存功能。

  ★如何觸發樹更新

  1. 全局更新:調用 runApp (rootWidget),一般 flutter 啟動時調用后不再會調用。

  2. 局部子樹更新, 將該子樹做 StatefullWidget 的一個子 widget,并創建對應的 State 類實例,通過調用 state.setState () 觸發該子樹的刷新。

  Widget

  StatefullWidget vs StatelessWidget

  1. StatelessWidget:無中間狀態變化的 widget,需要更新展示內容就得通過重新 new,Flutter 推薦盡量使用 StatelessWidget。

  2. StatefullWidget:存在中間狀態變化,那么問題來了,widget 不是都 immutable 的,狀態變化存儲在哪里?Flutter 引入 state 的類用于存放中間態,通過調用 state.setState ()進行此節點及以下的整個子樹更新。

  State 生命周期  

  1. initState (): state create 之后被 insert 到 tree 時調用的

  2. didUpdateWidget (newWidget):祖先節點 rebuild widget 時調用

  3. deactivate ():widget 被 remove 的時候調用,一個 widget 從 tree 中 remove 掉,可以在 dispose 接口被調用前,重新 instert 到一個新 tree 中

  4. didChangeDependencies ():

  5. 初始化時,在 initState ()之后立刻調用

  6. 當依賴的 InheritedWidget rebuild,會觸發此接口被調用

  7. build ():

  8. After calling [initState].

  9. After calling [didUpdateWidget].

  10. After receiving a call to [setState].

  11. After a dependency of this [State] object changes (e.g., an[InheritedWidget] referenced by the previous [build] changes).

  12. After calling [deactivate] and then reinserting the [State] object into the tree at another location.

  13. dispose ():Widget 徹底銷毀時調用

  14. reassemble (): hot reload 調用

  注意事項:

  1. A頁面 push 一個新的頁面B,A頁面的 widget 樹中的所有 state 會依次調用 deactivate (), didUpdateWidget (newWidget)、build ()(這里懷疑是 bug,A頁面 push 一個新頁面,理論上并沒有將A頁面進行 remove 操作),當然從功能上,沒有看出來有什么異常。

  2. 當 ListView 中的 item 滾動出可顯示區域的時候,item 會被從樹中 remove 掉,此 item 子樹中所有的 state 都會被 dispose,state 記錄的數據都會銷毀,item 滾動回可顯示區域時,會重新創建全新的 state、element、renderobject。

  3. 使用 hot reload 功能時,要特別注意 state 實例是沒有重新創建的,如果該 state 中存在一下復雜的資源更新需要重新加載才能生效,那么需要在 reassemble ()添加處理,不然當你使用 hot reload 時候可能會出現一些意想不到的結果,例如,要將顯示本地文件的內容到屏幕上,當你開發過程中,替換了文件中的內容,但是 hot reload 沒有觸發重新讀取文件內容,頁面顯示還是原來的舊內容。

  數據流轉

  ★從上往下

  數據從根往下傳數據,常規做法是一層層往下,當深度變大,數據的傳輸變的困難,Flutter 提供 InheritedWidget 用于子節點向祖先節點獲取數據的機制,如下例子:

  child 及其以下的節點可以通過調用下面的接口讀取 color 數據:

  說明:BuildContext 就是 Element 的一個接口類

  context.inheritFromWidgetOfExactType (FrogColor)其實是通過 context/element 往上遍歷樹,查找到***個 FrogColor 的祖先節點,取該節點的 widget 對象。

  ★從下往上

  子節點狀態變更,向上上報通過發送通知的方式

  • 定義通知類,繼承至 Notification

  • 父節點使用 NotificationListener 進行監聽捕獲通知

  • 子節點有數據變更調用下面接口進行數據上報

  ★閑魚 Flutter 的界面框架設計

  

   

  Layout   

  ★Size 計算

  parent 傳入約束條件,在 dramframe 的 layout 階段,child 根據自身的渲染內容返回 size。

  問題:在 build ()階段獲取不到 size,很多時候需要提前知道部分 widget size 來進行布局,解決方案當 widget 在對應 renderobject 的 layout 階段之后,發送一個 LayoutChangeNotification,參考 SizeChangedLayoutNotifier class,但是 SizeChangedLayoutNotifier 沒有上報 init layout size,可以自己參考這個實現封裝一個 Notifier。

  ★Offset 計算

  1. renderObject 拿到計算好的 size,再加上一些布局屬性(align、paddig)等,計算 child 相對 parent 的 offset。

  2. offset 存放在每個 child renderObject 的 BoxParentData 中。

  3. 當 parent 擁有 mutil children 時,BoxParentData 還用來存 children 兄弟節點之間的遍歷順序?! ?strong> 

  ★Relayout boundary

  renderObject 在 layout 階段做了 Relayout boundary 的優化,當子樹進行 relayout 時,滿足下面三種中的一種:

  • parentUsesSize == false

  • sizedByParent == true

  • constraints.isTight

  那么該 renderObject 設置為 Relayout boundary,也就是該 renderObject 的重新 layout 不觸發 parent 的 layout,一般情況下開發人員不需要關心 Relayout boundary,除非是使用 CustomMultiChildLayout。

  Paint

  ★Layer

  iOS 的每一個 UIView 都有一個 layer,Flutter 的 render object 不一定存在 layer,一般情況下一個 renderObject 子樹都渲染在一個 layer 上,那么什么 renderObject 具有 layer,子 renderObject 怎么渲染到這個 layer?

  1. 當一個 renderObject 的
或者


,renderOject 會有對應的 compositing layer。

  2. 子 renderObject 會對目標 layer 返回對應的 offsetLayer, 目標 compositing layer 再根據 offset 合成一個渲染的紋理 buffer。

  ★Repaint Boundary

  類似 Relayout boundary,Paint 階段也有 Repaint Boundary,目的和 layout 一樣,就是對應子樹的 paint 不會導致外部的 repaint,但是 Relayout boundary 需要開發人員自己設置,使用 RepaintBoundary widget 進行設置,ListView 在渲染的 item 默認都是使用了 RepaintBoundary,顯而易見 ListView 的 children 之間都是相互獨立的。Flutter 建議復雜的 image 渲染使用 RepaintBoundary,image 的渲染需要 io 操作,然后解碼,***渲染,使用 RepaintBoundary 可以進行 gpu 的緩存,但是不一定就會緩存,engine 會判斷這個 image 是否足夠復雜,畢竟 gpu 緩存還是非常珍貴的,同時 RepaintBoundary 還會對一些反復渲染的 layer 進行緩存處理(反復渲染 3 次及以上,這個是 Flutter 的視頻中提到的)。

  結語

  Flutter 還處于 Beta 階段,有些界面編程的接口設計還不夠成熟,相比 iOS 和安卓生態還很不成熟,需要我們共同的創建,Flutter 提供的調試工具相比一開始接觸的時候,已經完善很多,讓我們給 Flutter 更多的耐心和包容,期待 Flutter 越來越完善。

  參考資料

責任編輯:張燕妮 來源: 阿里技術
相關推薦

2021-01-27 11:10:49

JVM性能調優

2019-11-28 09:33:08

Redis架構互聯網

2019-07-09 08:29:51

TCPIP協議

2018-04-25 10:13:30

Redis內存模型

2019-11-20 10:07:07

Redis數據系統

2022-02-28 10:30:03

架構代碼Native

2023-03-31 08:16:53

Flutter優化內存管理

2020-09-18 06:42:14

正則表達式程序

2024-04-30 11:11:33

aiohttp模塊編程

2015-10-21 10:42:33

技術周刊

2020-08-27 07:34:50

Zookeeper數據結構

2023-12-08 17:59:55

工具Git LFS管理

2010-06-23 20:31:54

2010-11-19 16:22:14

Oracle事務

2010-07-13 09:36:25

2020-09-21 09:53:04

FlexCSS開發

2022-08-26 13:48:40

EPUBLinux

2009-08-25 16:27:10

Mscomm控件

2020-07-20 06:35:55

BashLinux

2023-11-20 08:18:49

Netty服務器
點贊
收藏

51CTO技術棧公眾號

亚洲精品久久久久久久久久久| 日韩高清中文字幕一区| 欧美tk—视频vk| 极品粉嫩国产18尤物| 奇米影视888狠狠狠777不卡| 日本免费在线视频不卡一不卡二| 久久夜精品va视频免费观看| 日韩av无码一区二区三区不卡| 成人av免费电影网站| 亚洲三级小视频| 成人xxxxx色| 超碰在线免费97| 国内一区二区三区| 粉嫩久久久久久久极品| 午夜精品视频在线观看| 日韩欧美亚洲区| 国产成人三级在线播放| 国产日韩欧美三级| 不卡av电影在线观看| 欧美日韩国产精品一区二区三区 | 国产毛片av在线| 国产一二精品视频| 欧美在线一区二区三区四| 婷婷在线精品视频| 欧美日韩国产一区二区三区不卡| 欧美一区二区三区久久精品茉莉花 | av中文字幕av| 成人在线免费观看| 暴力调教一区二区三区| 国产在线精品一区免费香蕉 | 国产精品一区二区不卡视频| 一区精品在线观看| 媚黑女一区二区| 97高清免费视频| 青青操国产视频| 国产精品国产一区| 色老头一区二区三区| 亚洲精品国产一区黑色丝袜| 人人精品视频| 亚洲国产精品人人爽夜夜爽| xxxx国产视频| 精品国产一区二区三区2021| 欧美日韩高清一区| 色无极影院亚洲| 五月婷中文字幕| 国产福利91精品一区二区三区| 国产精品久久久久免费a∨| 亚洲精品www久久久久久| 欧美fxxxxxx另类| 久久艳片www.17c.com| 91视频免费进入| 99热国产在线观看| 激情视频一区二区三区| 久久99久久久久久久噜噜| 亚洲一级二级片| 99久久夜色精品国产亚洲狼| 色狠狠久久aa北条麻妃 | 久久免费美女视频| 欧美成人免费在线| 国自产拍在线网站网址视频| 久久久久久久久久电影| 日韩精品不卡| 成全电影播放在线观看国语| 国产欧美精品一区二区三区四区| 日本一区二区在线| 一级毛片视频在线观看| 日韩色在线观看| 日本视频一区在线观看| 免费av在线电影| www激情久久| 欧美亚洲爱爱另类综合| 国产视频网站在线| 国产精品毛片高清在线完整版| 精品国产91洋老外米糕| 日韩福利视频在线| 久久69成人| 欧美一三区三区四区免费在线看| 国产九九九视频| 精品淫伦v久久水蜜桃| 精品偷拍各种wc美女嘘嘘| 国产精久久一区二区三区| 欧美艳星介绍134位艳星| 国产精品久久久久9999| 毛片毛片毛片毛片毛| 亚洲超碰在线观看| 亚洲精品久久久久久久久久久| 少妇真人直播免费视频| 四虎成人av| 欧美高清激情视频| 久久久久久91亚洲精品中文字幕| 日本精品专区| 91免费在线播放| 五月天色一区| 日本片在线观看| 日韩欧美成人网| 亚洲国产午夜精品| 另类春色校园亚洲| 精品国偷自产在线| 天天操天天摸天天干| 久久99精品久久久久婷婷| 国产青春久久久国产毛片| eeuss影院在线观看| 亚洲成人av一区二区| 亚洲精品视频导航| 精品国产一区二区三区成人影院 | 国产精品视频导航| 丰满熟妇人妻中文字幕| 国产精品欧美精品| 欧美成人一区二区在线观看| 99国产精品99久久久久久粉嫩| 欧美日韩aaaaa| 精品国产免费久久久久久婷婷| 亚洲最大在线| 欧美成人全部免费| 国产情侣免费视频| 99re这里只有精品6| 福利网在线观看| 成人av集中营| 亚洲美女动态图120秒| 久久免费黄色网址| 精品一区二区三区久久| 日韩精品国内| 成人短视频app| 亚洲精品国产精品久久清纯直播| 538精品在线观看| 老司机免费视频一区二区三区| 久久99精品久久久久久三级 | 欧美激情国产高清| 一级黄色片在线播放| 久久精品视频在线看| 日本少妇高潮喷水视频| av成人资源网| 2019日本中文字幕| 久久久老熟女一区二区三区91| 久久免费大视频| 日韩美女免费视频| 天堂在线一二区| 亚洲.国产.中文慕字在线| 中国老熟女重囗味hdxx| 亚洲人metart人体| 成人乱人伦精品视频在线观看| 大胆av不用播放器在线播放| 日本丶国产丶欧美色综合| 黄色正能量网站| 日韩一区二区久久| 久久亚洲精品欧美| 欧洲亚洲两性| 在线观看亚洲视频| 日韩欧美国产另类| 国产精品日产欧美久久久久| 久久久久久久久久久久91| 激情综合网五月| 国产精品三级美女白浆呻吟 | 中文字幕日韩欧美精品在线观看| 无码人妻一区二区三区线 | 亚洲一区二区三区777| 日韩porn| 色婷婷国产精品综合在线观看| 五月婷婷综合在线观看| 三级久久三级久久| 亚洲一卡二卡三卡四卡无卡网站在线看| 成人看片网站| 最新91在线视频| 99久久精品国产成人一区二区| 亚洲乱码中文字幕| 亚洲国产精品第一页| 亚洲三级色网| 青娱乐一区二区| 亚洲综合视频| 色综合男人天堂| 色噜噜一区二区三区| 天天操天天干天天综合网| 中文字幕一区二区人妻在线不卡| 丝袜美腿亚洲色图| 日韩最新中文字幕| 久久国产精品色av免费看| 日韩av电影在线免费播放| аⅴ资源新版在线天堂| 欧美一区二区三区啪啪| 精品少妇theporn| 国产日韩欧美高清在线| 亚洲综合av在线播放| 欧美日韩视频| 日韩av电影免费观看| 国产精品高清一区二区| 欧美精品第一页在线播放| 国产最新视频在线观看| 91麻豆精品国产91久久久久| 欧美三级韩国三级日本三斤在线观看| 久久综合九色综合欧美就去吻| 色婷婷一区二区三区av免费看| 韩国欧美一区| 日韩免费三级| 成人福利免费在线观看| 国产精品手机播放| 999av小视频在线| 少妇激情综合网| 神马午夜在线观看| 欧美高清精品3d| 国产一级精品视频| 亚洲欧洲中文日韩久久av乱码| 欧美无人区码suv| 精品一区二区三区视频| 日本中文字幕片| 黑丝一区二区| 亚洲第一综合| 天美av一区二区三区久久| 亚洲xxxxx性| 精品国产欧美日韩一区二区三区| 97在线免费观看视频| 国产在线69| 伊人男人综合视频网| 色欲av伊人久久大香线蕉影院| 欧美丰满美乳xxx高潮www| 伊人中文字幕在线观看| 亚洲国产欧美另类丝袜| 99久久精品久久亚洲精品| 91麻豆精品视频| 亚洲一区二区三区黄色| 极品少妇一区二区| 看欧美ab黄色大片视频免费| 国产一区二区三区久久久久久久久| 国产美女视频免费| 日韩一区二区三区免费播放| 欧美另类视频在线| 欧美网色网址| 国产免费一区二区三区| 欧美午夜网站| 成人免费黄色网| 九七电影院97理论片久久tvb| 国产成人亚洲综合91| 亚洲第一av| 8x拔播拔播x8国产精品| av色在线观看| 国内精久久久久久久久久人| 日韩成人伦理| 久久免费少妇高潮久久精品99| 天堂av最新在线| 欧美激情国产精品| 国产蜜臀av在线播放| 久久久久久久久久国产精品| 七七成人影院| 久久久久日韩精品久久久男男| 日本h片在线观看| 欧美激情一级欧美精品| 爱看av在线入口| 韩剧1988在线观看免费完整版| 黄网站在线观| 97热在线精品视频在线观看| 日本三级黄色网址| 国产精品国码视频| 国产片侵犯亲女视频播放| wwwxxx在线观看| av高清不卡在线| 韩国三级丰满少妇高潮| 国产精品一二三| 色婷婷狠狠18禁久久| heyzo一本久久综合| 亚洲av无码国产精品久久| 国产日韩欧美激情| 来吧亚洲综合网| 亚洲欧美aⅴ...| 美女毛片在线观看| 亚洲va韩国va欧美va精品| 久久亚洲精品国产| 欧美性一区二区| 国产成人av免费看| 亚洲高清久久网| 免费在线黄色电影| 日韩视频免费大全中文字幕| 天堂av最新在线| 午夜精品国产精品大乳美女| 暖暖成人免费视频| 91久久精品国产| 精品自拍偷拍| 亚洲国产欧美不卡在线观看| 亚洲精品网址| 国产99久久九九精品无码| 麻豆国产欧美一区二区三区| 久久久久久久久久毛片| 波多野结衣视频一区| 国产探花视频在线播放| 亚洲激情男女视频| 天码人妻一区二区三区在线看| 欧美精品日韩一区| 亚洲aⅴ乱码精品成人区| 一本色道久久综合亚洲精品小说| 影音先锋男人资源在线| 清纯唯美亚洲综合| 91精品亚洲一区在线观看| 精品久久久久久中文字幕动漫| 成人亚洲一区二区| 无码 制服 丝袜 国产 另类| 美女免费视频一区二区| 91丨porny丨对白| 18涩涩午夜精品.www| 亚洲天堂av片| 欧美v日韩v国产v| av电影在线网| 91爱视频在线| 国产精品亚洲欧美一级在线| 欧美日韩在线观看一区二区三区| 午夜精品婷婷| 天天干天天操天天做| 91麻豆精品视频| 九九九国产视频| 欧美精品777| 97超碰国产一区二区三区| 性日韩欧美在线视频| 91精品福利观看| 亚洲人成人77777线观看| 国产一级久久| 人妻av一区二区| 亚洲黄色性网站| 国产精品久久久久久久久久久久久久久久 | 日韩中文字幕国产| 免费亚洲电影| 久久艹中文字幕| 好看的日韩av电影| 日韩视频在线观看一区二区三区| 久久精品一区二区三区不卡牛牛| 久久精品亚洲无码| 日韩一区二区视频| 亚洲麻豆精品| 国产精品美乳在线观看| 女人av一区| 日韩a在线播放| 91一区二区三区在线观看| 国产性猛交普通话对白| 91精品国产高清一区二区三区| 色网站在线看| 国产欧美日韩免费| 欧美精品一区二区久久| 欧美少妇性生活视频| 久久网这里都是精品| 国产一级片毛片| 日韩成人激情在线| 在线天堂资源www在线污| 久久99久久99精品蜜柚传媒| 亚洲三级电影在线观看| 久久久久麻豆v国产精华液好用吗| 亚洲狠狠爱一区二区三区| 丰满少妇在线观看bd| 久久久这里只有精品视频| 国产厕拍一区| 天天夜碰日日摸日日澡性色av| av高清不卡在线| 无码人妻丰满熟妇奶水区码| 一区二区亚洲精品国产| 成人国产一区| 亚洲免费视频播放| 国产成人丝袜美腿| 日本黄色片视频| 亚洲欧美日韩精品| 久久69成人| 久久www视频| 97久久超碰国产精品| 亚洲不卡在线视频| 俺也去精品视频在线观看| 日本成人手机在线| 免费毛片网站在线观看| 久久亚洲捆绑美女| 中文字幕一级片| 欧美成人一二三| 国产精品美女在线观看直播| 国产91在线视频观看| 日本一区二区视频在线| 国产麻豆一精品一男同| 欧美精品久久久久| 神马久久一区二区三区| 精品国产乱码久久久久久1区二区| 一区2区3区在线看| 欧美xxx.com| 91久久久久久久一区二区| 亚洲高清免费| 国产精品情侣呻吟对白视频| 日韩一区二区三区电影| 九色porny丨入口在线| 翔田千里亚洲一二三区| 国产成人在线色| 中文字幕免费观看| 久久国产加勒比精品无码| 色吊丝一区二区| 成年网站免费在线观看| 午夜精品在线看| 看女生喷水的网站在线观看| 精品免费国产| 国产真实乱偷精品视频免| 久久黄色精品视频| 久久中文字幕视频| 自拍视频一区| 粗大的内捧猛烈进出视频| 色婷婷综合久久久中文一区二区 | 国产精品18久久久久久麻辣| 欧美国产专区| 怡红院一区二区三区| 精品国偷自产国产一区| 日本精品久久| 99热成人精品热久久66| 亚洲一区二区视频在线|