日韩精品一区二区三区在线视频放-无码中文字幕V?一区二区-成年片免费观看视频-国内少妇人妻丰满av-国产精品中文字幕免费观看-亚洲成人久久一区二区三区-国内少妇偷人精品视频无缓冲-一区二区国产精品日本一区二区三区在线网

ARTICLE DETAIL

資訊詳情

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

Flutter跨端導(dǎo)航框架在OpenHarmony學(xué)生獎(jiǎng)懲系統(tǒng)中的落地實(shí)踐

Flutter跨端導(dǎo)航框架在OpenHarmony學(xué)生獎(jiǎng)懲系統(tǒng)中的落地實(shí)踐 做學(xué)生獎(jiǎng)懲管理系統(tǒng)的時(shí)候我原本只打算寫一個(gè)常規(guī)的單端 Flutter 應(yīng)用。后來設(shè)備側(cè)的規(guī)劃里出現(xiàn)了 OpenHarmony需求就變成了同一個(gè)導(dǎo)航框架要同時(shí)跑在傳統(tǒng)移動(dòng)端和 OpenHarmony 設(shè)備上。項(xiàng)目里的“功能導(dǎo)航模塊”聽起來最不起眼實(shí)際卻是整個(gè)獎(jiǎng)懲系統(tǒng)最容易被低估的部分它決定用戶從哪個(gè)入口進(jìn)入加分申請(qǐng)、從哪個(gè)入口查看扣分明細(xì)、又從哪里回到學(xué)期匯總頁。這篇記錄一下我在這個(gè)模塊上的方案選型、跨端實(shí)現(xiàn)過程以及真機(jī)階段踩過的坑。適合正在用 Flutter 做多端項(xiàng)目、或者準(zhǔn)備把手頭應(yīng)用遷移到 OpenHarmony 的同學(xué)參考里面的代碼片段可以直接抄踩坑記錄應(yīng)該也能幫你省不少時(shí)間。1. 項(xiàng)目背景與跨端方案選型1.1 獎(jiǎng)懲管理系統(tǒng)到底要解決什么問題學(xué)生獎(jiǎng)懲管理系統(tǒng)看著像個(gè)普通的后臺(tái)管理項(xiàng)目但實(shí)際業(yè)務(wù)鏈條比想象中長(zhǎng)老師錄入加分扣分事件德育處做審批班主任要隨時(shí)看班級(jí)排名期末還要一鍵導(dǎo)出學(xué)期匯總。這個(gè)系統(tǒng)不是給人“看看而已”的它是每天都會(huì)被反復(fù)打開的工具型應(yīng)用。業(yè)務(wù)場(chǎng)景大致劃分成四塊工作臺(tái)當(dāng)天待辦、班級(jí)考核排名、最新審批動(dòng)態(tài)、學(xué)生檔案按班級(jí)、學(xué)號(hào)、姓名檢索學(xué)生查看個(gè)人獎(jiǎng)懲時(shí)間線、獎(jiǎng)懲記錄錄入加分項(xiàng)和扣分項(xiàng)提交審批、個(gè)人中心登錄賬號(hào)、學(xué)期切換、數(shù)據(jù)導(dǎo)出入口。這四個(gè)入口對(duì)應(yīng)的就是底部導(dǎo)航的四個(gè) Tab整個(gè)應(yīng)用的骨架都由這棵導(dǎo)航樹撐起來。導(dǎo)航模塊在這種系統(tǒng)里的特殊性在于大多數(shù)頁面都不是靜態(tài)的。工作臺(tái)要輪詢待辦數(shù)量學(xué)生檔案頁要維持篩選條件獎(jiǎng)懲記錄頁可能有正在編輯但未提交的草稿。如果切換 Tab 時(shí)把這些狀態(tài)全部清掉用戶每次回來都得重新找一遍這種體驗(yàn)在評(píng)分系統(tǒng)里會(huì)被放大成很嚴(yán)重的輿情問題。所以跨端方案首先要保證的就是狀態(tài)穩(wěn)定。1.2 為什么是 Flutter 加 OpenHarmony最早團(tuán)隊(duì)討論技術(shù)方案的時(shí)候有人提過直接用 OpenHarmony 的原生能力重寫一套界面。這個(gè)方案不是不行但我們當(dāng)時(shí)的處境是Android 等傳統(tǒng)移動(dòng)端已經(jīng)有了一套成熟的 Flutter 代碼業(yè)務(wù)邏輯、接口封裝、數(shù)據(jù)模型都已經(jīng)沉淀下來了如果為了適配 OpenHarmony 再重寫一套等于同時(shí)維護(hù)兩套代碼人員成本直接翻倍。Flutter 的優(yōu)勢(shì)在于它的自繪引擎UI 渲染不依賴系統(tǒng)原生控件所以在不同平臺(tái)上渲染效果一致性極高。這一點(diǎn)對(duì)獎(jiǎng)懲系統(tǒng)很關(guān)鍵同一個(gè)配色體系、同一套圓角卡片、同一種 tab 切換動(dòng)畫在傳統(tǒng)移動(dòng)端和 OpenHarmony 設(shè)備上應(yīng)該看起來一模一樣而不是各自被系統(tǒng)控件“本地化”。代價(jià)當(dāng)然也有。OpenHarmony 上跑 Flutter 需要用到社區(qū)適配的 Flutter SDK原生能力調(diào)用要自己封裝平臺(tái)通道比如狀態(tài)欄高度讀取、震動(dòng)反饋、消息角標(biāo)這類系統(tǒng)交互都得在側(cè)平臺(tái)注冊(cè)對(duì)應(yīng)方法。但對(duì)我們這種以 UI 和狀態(tài)管理為主的業(yè)務(wù)模塊來說跨端收益遠(yuǎn)大于額外適配成本。1.3 導(dǎo)航模塊在整個(gè)項(xiàng)目里的角色做這個(gè)項(xiàng)目之前我一直覺得導(dǎo)航模塊就是“底部幾個(gè)按鈕 路由?!睕]什么好設(shè)計(jì)的。真正動(dòng)手才發(fā)現(xiàn)導(dǎo)航層決定了整個(gè)應(yīng)用的生命周期管理方式、頁面狀態(tài)恢復(fù)策略、甚至埋點(diǎn)數(shù)據(jù)的準(zhǔn)確性。舉例來說獎(jiǎng)懲詳情頁會(huì)從三個(gè)入口進(jìn)入工作臺(tái)的待辦列表、學(xué)生檔案里的學(xué)生時(shí)間線、獎(jiǎng)懲記錄里的歷史明細(xì)。三個(gè)入口傳遞的參數(shù)不一樣詳情頁的返回行為也不一樣。如果不把導(dǎo)航模塊設(shè)計(jì)成一個(gè)獨(dú)立的架構(gòu)層而是每個(gè)頁面自己處理跳轉(zhuǎn)邏輯后期每加一個(gè)入口就要改一遍所有相關(guān)頁面。我把導(dǎo)航模塊定義成“路由中樞 頁面容器 狀態(tài)管家”三個(gè)職責(zé)業(yè)務(wù)頁面只關(guān)心自己接收什么參數(shù)不關(guān)心誰跳過來的。這為跨端實(shí)現(xiàn)打下了基礎(chǔ)。2. 功能導(dǎo)航模塊的架構(gòu)設(shè)計(jì)2.1 路由框架選擇先別急著上第三方Flutter 生態(tài)里路由方案很多。go_router、auto_route、beamer 這些框架功能確實(shí)強(qiáng)大支持深鏈、重定向、動(dòng)態(tài)路由過濾。但在這個(gè)項(xiàng)目里我最終還是選了 Navigator 1.0 加 onGenerateRoute 的純?cè)桨冈蛴腥5谝华?jiǎng)懲系統(tǒng)的導(dǎo)航層級(jí)很淺。底層四個(gè) Tab每個(gè) Tab 下面最多再推兩層業(yè)務(wù)頁面列表頁進(jìn)詳情頁。這種深度用 Navigator 自己的棧管理完全夠用上第三方框架反而要多維護(hù)一套路由配置。第二第三方路由框架對(duì) OpenHarmony 的兼容性沒有經(jīng)過大規(guī)模驗(yàn)證像深鏈這種依賴系統(tǒng) intent 的能力在 OpenHarmony 上的行為未必跟傳統(tǒng)移動(dòng)端一致我不想在導(dǎo)航這個(gè)基礎(chǔ)模塊上賭這個(gè)兼容性。第三項(xiàng)目里需要自定義統(tǒng)一轉(zhuǎn)場(chǎng)動(dòng)畫Navigator 的 PageRouteBuilder 已經(jīng)能完全控制轉(zhuǎn)場(chǎng)過程。實(shí)際用下來這套輕量方案反而讓問題排查變得非常簡(jiǎn)單。哪個(gè)頁面崩了直接看路由注冊(cè)表就能定位到是哪個(gè) builder 出的問題不需要經(jīng)過框架層轉(zhuǎn)發(fā)。2.2 底部導(dǎo)航的結(jié)構(gòu)設(shè)計(jì)與頁面?;钏膫€(gè) Tab 頁之間的切換涉及一個(gè)核心問題要不要保留頁面狀態(tài)。最簡(jiǎn)單的做法是每次切換都 push 一個(gè)新頁面但這樣工作臺(tái)的滾動(dòng)位置、學(xué)生頁的篩選條件、記錄頁的編輯草稿全部會(huì)丟失。我采用了IndexedStack加懶加載的結(jié)合方案。IndexedStack的原理是所有子頁面都會(huì)被構(gòu)建但只有當(dāng)前索引對(duì)應(yīng)的頁面可見其余頁面通過 Offstage 隱藏起來。這種方式能讓每個(gè) Tab 頁的 State 一直存活切回來時(shí)頁面還在原地。但它的一個(gè)潛在問題是四個(gè) Tab 頁會(huì)在啟動(dòng)時(shí)一次性全部 build如果每個(gè)頁面初始化都發(fā)接口請(qǐng)求啟動(dòng)時(shí)并發(fā)請(qǐng)求會(huì)很多。為了平衡啟動(dòng)性能我寫了一個(gè)LazyIndexedStack核心邏輯是首頁初始化時(shí)只 build 第一個(gè) Tab其他 Tab 直到第一次被點(diǎn)擊時(shí)才真正構(gòu)建之后進(jìn)入緩存列表不再銷毀。代碼不復(fù)雜class LazyIndexedStack extends StatefulWidget { const LazyIndexedStack({ super.key, required this.index, required this.children, }); final int index; final ListWidget children; override StateLazyIndexedStack createState() _LazyIndexedStackState(); } class _LazyIndexedStackState extends StateLazyIndexedStack { final Setint _builtIndexes {0}; override void didUpdateWidget(LazyIndexedStack oldWidget) { super.didUpdateWidget(oldWidget); if (widget.index ! oldWidget.index !_builtIndexes.contains(widget.index)) { setState(() _builtIndexes.add(widget.index)); } } override Widget build(BuildContext context) { final children ListWidget.generate(widget.children.length, (i) { return _builtIndexes.contains(i) ? widget.children[i] : const SizedBox.shrink(); }); return IndexedStack(index: widget.index, children: children); } }這個(gè)方案既保證了頁面狀態(tài)不丟又避免了一啟動(dòng)就瘋狂請(qǐng)求接口的問題。實(shí)測(cè)下來冷啟動(dòng)時(shí)間比單純使用IndexedStack降低了百分之二十左右而且后續(xù) Tab 切換也不卡頓。2.3 路由表與業(yè)務(wù)模塊解耦我把所有頁面的路由統(tǒng)一收斂到一個(gè)集中管理的路由表中業(yè)務(wù)頁面模塊只負(fù)責(zé)注冊(cè)自己的 builder不處理具體 Navigator 調(diào)用。這樣做的好處是導(dǎo)航層不依賴具體頁面類后續(xù)新增一個(gè)“消息通知”Tab只需要在路由表里加一條映射然后在底部導(dǎo)航配置里加一個(gè)入口其他頁面零改動(dòng)。路由表的組織方式如下class AppRouter { static const String workbench /workbench; static const String studentList /student/list; static const String studentDetail /student/detail; static const String recordList /record/list; static const String recordDetail /record/detail; static const String profile /profile; static const String notFound /404; static final MapString, WidgetBuilder _routes { workbench: (_) const WorkbenchPage(), studentList: (_) const StudentListPage(), studentDetail: (_) const StudentDetailPage(), recordList: (_) const RecordListPage(), recordDetail: (context) { final args ModalRoute.of(context)!.settings.arguments as RecordDetailArgs; return RecordDetailPage(args: args); }, profile: (_) const ProfilePage(), notFound: (_) const NotFoundPage(), }; static Routedynamic onGenerateRoute(RouteSettings settings) { final builder _routes[settings.name]; if (builder null) { return MaterialPageRoute( settings: settings, builder: (_) const NotFoundPage(), ); } return PageRouteBuilder( settings: settings, pageBuilder: (context, animation, secondaryAnimation) builder(context), transitionDuration: const Duration(milliseconds: 220), transitionsBuilder: (context, animation, secondaryAnimation, child) { return FadeTransition( opacity: animation, child: SlideTransition( position: TweenOffset( begin: const Offset(0, 0.03), end: Offset.zero, ).animate(CurvedAnimation(parent: animation, curve: Curves.easeOut)), child: child, ), ); }, ); } }這里有一個(gè)細(xì)節(jié)詳情頁這種需要參數(shù)的路由我用ModalRoute.of(context)去拿settings.arguments比在 builder 外部強(qiáng)制轉(zhuǎn)類型要穩(wěn)妥。因?yàn)?Navigator 在創(chuàng)建路由的時(shí)候settings 是同一個(gè)對(duì)象只有在頁面真正 build 時(shí)才能確保拿到參數(shù)。統(tǒng)一轉(zhuǎn)場(chǎng)動(dòng)畫也在這里處理兩個(gè)端都會(huì)走同樣的一段淡入加輕微上滑視覺上一致性好很多。3. 跨端實(shí)現(xiàn)的關(guān)鍵細(xì)節(jié)3.1 OpenHarmony 上跑 Flutter 的運(yùn)行環(huán)境準(zhǔn)備OpenHarmony 系統(tǒng)本身不提供 Flutter 引擎需要在編譯階段使用社區(qū)適配的 Flutter SDK。這一步是整個(gè)跨端改造環(huán)境準(zhǔn)備里最核心的部分SDK 版本不匹配后續(xù)所有編譯和真機(jī)調(diào)試都會(huì)出問題。實(shí)際操作上我把本機(jī)的 Flutter 工具鏈切換到適配 OpenHarmony 的分支然后用 IDE 工具創(chuàng)建工程模板時(shí)選擇對(duì)應(yīng)的設(shè)備類型。環(huán)境變量里需要配置 OpenHarmony SDK 的路徑構(gòu)建產(chǎn)物是 hap 包而不是傳統(tǒng)的 apk。第一次構(gòu)建的時(shí)候IDE 工具會(huì)提示需要配置簽名我在項(xiàng)目設(shè)置里開啟了自動(dòng)簽名生成本地調(diào)試證書這樣真機(jī)安裝環(huán)節(jié)基本不會(huì)卡殼。這個(gè)環(huán)境配置過程大概折騰了兩天。最容易踩的坑是版本對(duì)應(yīng)關(guān)系OpenHarmony SDK 版本和 Flutter 適配分支之間存在一一對(duì)應(yīng)用錯(cuò)一個(gè)版本輕則編譯報(bào)錯(cuò)重則頁面白屏但沒有任何日志輸出。我現(xiàn)在習(xí)慣在項(xiàng)目根目錄建一個(gè)environment.md文件把本機(jī)用的 SDK 版本范圍、Flutter 分支 commit 都寫下來方便團(tuán)隊(duì)成員對(duì)齊環(huán)境。3.2 安全區(qū)域、狀態(tài)欄與系統(tǒng)字體適配Flutter 在傳統(tǒng)移動(dòng)端上有一套成熟的安全區(qū)域處理機(jī)制MediaQuery.of(context).padding直接拿頂部狀態(tài)欄高度。但在 OpenHarmony 真機(jī)上我第一次跑起來的時(shí)候發(fā)現(xiàn)頂部 padding 返回的是 0頁面內(nèi)容直接頂?shù)狡聊蛔钌厦鎸?dǎo)航欄標(biāo)題和狀態(tài)欄圖標(biāo)重疊在一起。排查后發(fā)現(xiàn)是 OpenHarmony 的窗口注入時(shí)機(jī)跟傳統(tǒng)移動(dòng)端不一樣Flutter 引擎拿到窗口 insets 的時(shí)機(jī)偏晚甚至在某些場(chǎng)景下根本沒上報(bào)。我采用的方案是在 OpenHarmony 側(cè)通過平臺(tái)通道主動(dòng)讀取一次狀態(tài)欄高度緩存在全局變量里供所有頁面使用。Dart 側(cè)注冊(cè)一個(gè)方法class PlatformMetrics { static const MethodChannel _channel MethodChannel(app/navigation/metrics); static Futuredouble getStatusBarHeight() async { try { final double? value await _channel.invokeMethoddouble(statusBarHeight); return value ?? 0.0; } catch (_) { return MediaQueryData.fromView(View.of(navigatorKey.currentContext!)).padding.top; } } }OpenHarmony 側(cè)收到statusBarHeight調(diào)用后把 WindowInsets 的可視區(qū)域頂部高度返回即可。這個(gè)值拿到后我在MaterialApp.builder里通過MediaQuery.copyWith注入讓全應(yīng)用都能用到一個(gè)可靠的 padding 值。同理底部導(dǎo)航欄也用SafeArea包裹避免在帶手勢(shì)條的設(shè)備上被遮擋。字體方面也有兼容問題。OpenHarmony 的默認(rèn)中文字體跟傳統(tǒng)移動(dòng)端不一定一致如果 Flutter 頁面里指定了某個(gè)具體字體族在 OpenHarmony 上沒有對(duì)應(yīng)字體時(shí)中文可能顯示成方塊。我在全局ThemeData里配置了字體回退鏈ThemeData( fontFamily: Roboto, fontFamilyFallback: const [sans-serif, Noto Sans SC, Source Han Sans CN], )這里優(yōu)先用系統(tǒng)字體回退再指定常見中文字體。實(shí)測(cè)下來OpenHarmony 設(shè)備會(huì)優(yōu)先匹配到自己系統(tǒng)里有的中文字體顯示效果不會(huì)出現(xiàn)方塊。3.3 導(dǎo)航切換動(dòng)畫與觸摸反饋的一致性Flutter 在不同平臺(tái)上的默認(rèn)頁面過渡動(dòng)畫不一樣Android 系統(tǒng)是縮放加淡入iOS 系統(tǒng)是側(cè)滑。OpenHarmony 上默認(rèn)行為可能又會(huì)變。為了讓兩個(gè)端觀感統(tǒng)一我像前面代碼里那樣自定義了PageRouteBuilder統(tǒng)一使用 220 毫秒的淡入加 0.03 倍高度輕微上滑效果。這個(gè)動(dòng)畫時(shí)長(zhǎng)很關(guān)鍵太短顯得生硬太長(zhǎng)會(huì)拉低操作效率220 毫秒是我實(shí)測(cè)下來比較舒服的值。Tab 切換時(shí)的觸摸反饋也踩過坑。傳統(tǒng)移動(dòng)端上調(diào)用HapticFeedback.mediumImpact()會(huì)有明顯的震動(dòng)在 OpenHarmony 真機(jī)上這個(gè)方法默認(rèn)可能沒有任何效果需要自己在側(cè)平臺(tái)實(shí)現(xiàn)震動(dòng)接口。后來我干脆把 Tab 點(diǎn)擊的震動(dòng)反饋?zhàn)龀梢粋€(gè)可選配置默認(rèn)關(guān)閉。原因很簡(jiǎn)單導(dǎo)航切換本身已經(jīng)有視覺反饋震動(dòng)在這個(gè)場(chǎng)景里不是剛需與其花時(shí)間調(diào)平臺(tái)差異不如去掉這個(gè)不可控因素。底部導(dǎo)航的自定義動(dòng)畫也需要注意性能。切換 Tab 時(shí)我做了兩件事圖標(biāo)位置的輕微上移和顏色漸變。圖標(biāo)位移幅度控制在 3 個(gè)邏輯像素以內(nèi)配合 150 毫秒的AnimatedSlide效果自然而且不會(huì)引發(fā)布局抖動(dòng)。位移大了會(huì)顯得輕浮幅度小了沒有反饋感3 像素是反復(fù)調(diào)出來的值。3.4 頁面參數(shù)的序列化約定跨端實(shí)現(xiàn)里最容易被忽略的是頁面間傳參的方式。團(tuán)隊(duì)早期習(xí)慣直接塞MapString, dynamic在單一端上沒出過問題但到了跨端場(chǎng)景Map 里的類型信息在路由轉(zhuǎn)發(fā)過程中很容易丟失。比如學(xué)生詳情頁需要studentId字符串和fromSource整數(shù)如果傳參時(shí)把 fromSource 寫成字符串頁面內(nèi)部判斷就會(huì)出錯(cuò)而且這種錯(cuò)誤在編譯期完全暴露不出來。我的做法是對(duì)所有需要跨頁傳遞的數(shù)據(jù)定義強(qiáng)類型參數(shù)類。前期可能覺得多寫幾個(gè)類很繁瑣但后期維護(hù)時(shí)收益明顯編譯器能檢查類型錯(cuò)誤IDE 能自動(dòng)提示字段名重構(gòu)時(shí)也不會(huì)因?yàn)楦牧俗侄蚊麑?dǎo)致運(yùn)行時(shí)崩潰。學(xué)生詳情頁的鏈路就是典型例子。工作臺(tái)入口傳WorkbenchStudentArgs學(xué)生列表入口傳StudentListArgs兩者都包含基礎(chǔ)的學(xué)生標(biāo)識(shí)但來源信息不同。詳情頁根據(jù)來源決定返回時(shí)是否要刷新上一頁數(shù)據(jù)。導(dǎo)航層不感知這些差異只需要原樣透?jìng)鲄?shù)具體解析邏輯留在頁面內(nèi)部處理。4. 實(shí)操過程把導(dǎo)航模塊落地到兩端4.1 初始化 OpenHarmony 側(cè) Flutter 工程整個(gè)實(shí)操過程踩得最多的坑集中在工程初始化和真機(jī)安裝階段。第一次創(chuàng)建工程時(shí)我沒選對(duì)設(shè)備類型模板構(gòu)建出來的包在 OpenHarmony 設(shè)備上直接無法安裝。后來重新照著官方模板走了一遍流程才跑通。我記錄的標(biāo)準(zhǔn)化流程是這樣的第一步確認(rèn)本機(jī) Flutter 版本處于適配分支執(zhí)行flutter doctor檢查環(huán)境第二步創(chuàng)建 Flutter 工程注意工程名要符合命名規(guī)范包名不能帶連字符第三步在 IDE 工具里配置 OpenHarmony SDK 路徑選擇自動(dòng)簽名生成調(diào)試證書第四步構(gòu)建 hap 包并在真機(jī)上安裝。最容易被忽略的是工程里的build-profile.json5配置。這個(gè)文件里聲明了簽名證書和模塊信息如果配置有問題真機(jī)安裝會(huì)提示簽名錯(cuò)誤但日志信息并不直觀。我建議第一次跑通后馬上備份一份可用的配置文件后續(xù)重新初始化時(shí)直接復(fù)用省去重復(fù)排查的時(shí)間。4.2 自定義底部導(dǎo)航欄的實(shí)現(xiàn)思路我沒有直接用 Material 的NavigationBar組件原因是獎(jiǎng)懲系統(tǒng)的底部導(dǎo)航需要支持未讀角標(biāo)和特定的紅點(diǎn)提示NavigationBar的擴(kuò)展能力在這些細(xì)節(jié)上不夠靈活強(qiáng)行自定義反而要寫一堆樣式覆蓋代碼。自研底部導(dǎo)航欄的結(jié)構(gòu)是一個(gè)Container加SafeArea內(nèi)部用Row均分四個(gè)按鈕每個(gè)按鈕由InkWell包裹配合AnimatedContainer實(shí)現(xiàn)狀態(tài)切換。核心代碼大致是Scaffold( bottomNavigationBar: Container( decoration: BoxDecoration( color: Theme.of(context).scaffoldBackgroundColor, boxShadow: const [ BoxShadow( color: Color(0x14000000), blurRadius: 8, offset: Offset(0, -2), ), ], ), child: SafeArea( top: false, child: Row( children: [ for (final item in _navItems) Expanded( child: _NavItem( label: item.label, icon: item.icon, selected: _currentIndex item.index, onTap: () _onSwitchTab(item.index), ), ), ], ), ), ), body: LazyIndexedStack( index: _currentIndex, children: _pages, ), )_NavItem內(nèi)部處理選中態(tài)圖標(biāo)和文字顏色用AnimatedSwitcher切換圖標(biāo)位置用AnimatedSlide做 3 像素的上浮。角標(biāo)部分我在圖標(biāo)右上角疊加了一個(gè)自定義Positioned控件讀取全局待辦數(shù)量有值時(shí)顯示紅色原點(diǎn)沒有值時(shí)不渲染避免出現(xiàn)空白占位。切 Tab 的邏輯統(tǒng)一走_(dá)onSwitchTab這里會(huì)做三件事更新_currentIndex、觸發(fā)LazyIndexedStack的懶加載、告知路由觀察器當(dāng)前頁面位置。為什么要告知路由觀察器因?yàn)槿绻脩粼谀硞€(gè) Tab 內(nèi) push 了二級(jí)頁面然后按 Home 鍵退出 App再恢復(fù)進(jìn)來時(shí)我們希望路由棧能回到當(dāng)時(shí)的位置而不是App啟動(dòng)時(shí)的工作臺(tái)頁面。4.3 用 IndexedStack 做頁面保活的完整流程頁面?;畹耐暾溌肥沁@樣的用戶點(diǎn)開學(xué)生管理 Tab學(xué)生列表頁被LazyIndexedStack構(gòu)建頁面里的initState只執(zhí)行一次接口請(qǐng)求也只在首次進(jìn)入時(shí)觸發(fā)。之后切到獎(jiǎng)懲記錄 Tab再切回學(xué)生管理頁面 State 沒有銷毀滾動(dòng)位置、篩選條件都還在。但這里有個(gè)細(xì)節(jié)要注意如果學(xué)生列表頁內(nèi)部用Navigator.push到詳情頁詳情頁返回后列表頁是正常的但如果用戶正在詳情頁時(shí)直接切底部 TabFlutter 默認(rèn)行為有可能把整個(gè)根 navigator 的頁面棧重置。我通過RouteObserver做了一層保護(hù)記錄每個(gè) Tab 頁內(nèi)的當(dāng)前子路由切 Tab 時(shí)不下發(fā)重置指令返回 Tab 時(shí)再把子路由恢復(fù)回去。實(shí)際操作里我給每個(gè) Tab 頁分配了一個(gè)GlobalKeyNavigatorState四個(gè) Tab 內(nèi)部各自維護(hù)自己的導(dǎo)航?;ハ嗖桓蓴_。外層導(dǎo)航只負(fù)責(zé)切換 Tab內(nèi)層導(dǎo)航負(fù)責(zé)各自業(yè)務(wù)流的頁面堆疊。這樣從工作臺(tái)進(jìn)獎(jiǎng)懲審批流再從審批流跳到學(xué)生詳情兩個(gè) Tab 的導(dǎo)航棧互不影響返回行為完全符合用戶預(yù)期。5. 真機(jī)調(diào)試中的典型問題與排查實(shí)錄5.1 安裝運(yùn)行階段的問題OpenHarmony 真機(jī)調(diào)試階段我遇到的最常見問題是安裝失敗。癥狀是 hap 包拷貝到設(shè)備后安裝進(jìn)度條一閃而過然后提示“安裝失敗”具體原因在設(shè)備日志里也不明顯。排查步驟是先確認(rèn)簽名證書有沒有過期再看工程包名和簽名配置里的包名是否一致最后檢查設(shè)備系統(tǒng)版本和編譯 SDK 版本范圍的匹配關(guān)系。第二次遇到的怪問題是頁面啟動(dòng)后白屏沒有任何異常日志。后來發(fā)現(xiàn)是 Flutter 引擎版本和 OpenHarmony 系統(tǒng)的圖形棧不兼容需要升級(jí) Flutter 適配分支版本。這個(gè)問題在傳統(tǒng)移動(dòng)端上幾乎不會(huì)出現(xiàn)因?yàn)?Android 的圖形棧相對(duì)統(tǒng)一OpenHarmony 的自研圖形棧對(duì) Flutter 引擎的版本要求更嚴(yán)格。升級(jí)后白屏問題徹底消失。還有一個(gè)體驗(yàn)上的坑在 OpenHarmony 真機(jī)上熱重載hot reload是不可用的。在傳統(tǒng)移動(dòng)端上我習(xí)慣改完代碼馬上r一下看效果到了 OpenHarmony 上這個(gè)操作直接沒有響應(yīng)必須全量重新編譯構(gòu)建。這個(gè)差異很影響調(diào)試節(jié)奏我后來把導(dǎo)航欄樣式相關(guān)的常量全部抽到配置文件里改數(shù)值不用重新編譯業(yè)務(wù)代碼才算解決了頻繁重啟的問題。5.2 路由棧與頁面狀態(tài)異常路由棧最典型的問題是二級(jí)頁面切換 Tab 后返回行為錯(cuò)亂。場(chǎng)景是這樣的在工作臺(tái)點(diǎn)開一條審批記錄進(jìn)入審批詳情頁然后直接點(diǎn)擊底部導(dǎo)航切到學(xué)生管理 Tab。理想情況下再切回工作臺(tái)時(shí)應(yīng)該還停留在審批詳情頁方便用戶繼續(xù)處理。但如果不做內(nèi)層導(dǎo)航棧隔離外層 Navigator 的棧會(huì)被整個(gè)重置切回來時(shí)直接回到工作臺(tái)首頁審批詳情頁的填寫內(nèi)容全部丟失。這個(gè)問題我花了兩個(gè)晚上才想明白根因Navigator 的棧是全局的底部 Tab 切換不會(huì)自動(dòng)保存某個(gè) Tab 的導(dǎo)航棧深度。內(nèi)層GlobalKeyNavigatorState的方案就是為了解決這個(gè)問題。每個(gè) Tab 頁用自己的 Navigator 管理子路由這樣 Tab 切換時(shí)內(nèi)層棧天然不會(huì)被外層 Navigator 處理。如果你的項(xiàng)目已經(jīng)開始用 go_router這個(gè)問題可以通過StatefulShellRoute的配置解決本質(zhì)上也是為每個(gè)分支維護(hù)獨(dú)立導(dǎo)航棧。但用 Navigator 1.0 配合多個(gè) NavigatorState邏輯更直接更可控。5.3 跨端差異導(dǎo)致的 UI 異常比較頭疼的一類問題是同一個(gè)布局代碼在兩個(gè)端顯示效果不同。我遇到過一個(gè)案例工作臺(tái)頁面的頂部標(biāo)題欄傳統(tǒng)移動(dòng)端上高度剛好 88 邏輯像素到了 OpenHarmony 上標(biāo)題欄被拉高了 30 多像素。排查后發(fā)現(xiàn)是 OpenHarmony 系統(tǒng)對(duì)文字默認(rèn)行高和字體度量的處理不同加上中文字體 fallback 之后又引入額外的行高導(dǎo)致高度計(jì)算不一致。這個(gè)問題不能靠硬編碼高度解決不同設(shè)備、不同字體設(shè)置下高度偏差都不一樣。我在標(biāo)題欄的構(gòu)建邏輯里改成用FittedBox約束文字區(qū)域并且設(shè)置textScaleFactor上限避免系統(tǒng)字體縮放導(dǎo)致標(biāo)題溢出。同時(shí)給標(biāo)題欄設(shè)置了最小高度保證在字體差異較大的設(shè)備上也不會(huì)縮得看不見。另一個(gè)常見問題是狀態(tài)欄圖標(biāo)顏色的設(shè)置。傳統(tǒng)移動(dòng)端上通過SystemChrome.setSystemUIOverlayStyle可以方便地控制狀態(tài)欄圖標(biāo)是深色還是淺色。OpenHarmony 上這個(gè)方法部分版本不生效圖標(biāo)顏色和導(dǎo)航欄背景色撞了之后狀態(tài)欄內(nèi)容幾乎看不清。我的處理是默認(rèn)情況下使用深色背景加深色圖標(biāo)不依賴系統(tǒng)狀態(tài)欄的固有樣式如果業(yè)務(wù)頁面需要沉浸式背景就在側(cè)平臺(tái)通道里額外傳入一個(gè)圖標(biāo)顏色參數(shù)。5.4 常見問題速查表現(xiàn)象可能原因排查方法解決方案hap 安裝失敗簽名證書過期或包名不一致核對(duì)工程包名與簽名配置重新生成自動(dòng)簽名證書頁面啟動(dòng)白屏Flutter 引擎與 OpenHarmony 圖形棧不兼容查看設(shè)備側(cè)日志升級(jí) Flutter 適配分支版本狀態(tài)欄高度返回 0WindowInsets 上報(bào)時(shí)機(jī)異常打印 MediaQuery 數(shù)據(jù)通過平臺(tái)通道讀取真實(shí) statusBarHeight切換 Tab 后頁面狀態(tài)丟失未使用 IndexedStack 或頁面被重建檢查頁面是否被 dispose使用 LazyIndexedStack 保持狀態(tài)二級(jí)頁面跟隨 Tab 重置外層導(dǎo)航棧被重置檢查導(dǎo)航棧層級(jí)每個(gè) Tab 維護(hù)獨(dú)立 NavigatorState中文顯示方塊字體回退鏈缺失檢查系統(tǒng)字體列表配置 fontFamilyFallback熱重載不生效OpenHarmony 暫不支持當(dāng)前熱重載觀察編譯輸出改為全量編譯抽出配置常量寫在最后的幾點(diǎn)體會(huì)這個(gè)項(xiàng)目最讓我意外的事情是導(dǎo)航模塊在傳統(tǒng)移動(dòng)端跑得穩(wěn)穩(wěn)當(dāng)當(dāng)?shù)搅?OpenHarmony 上各種“小問題”全冒出來了——狀態(tài)欄高度、字體回退、觸摸反饋、熱重載不可用每一樣都很瑣碎但每一樣都可能讓你卡上一整天??缍朔桨笍膩聿皇恰皩懸淮巍⑴芩小倍恰皩懸淮?、適配每個(gè)端”。我現(xiàn)在特別后悔的一件事是沒有在一開始就把平臺(tái)差異相關(guān)的代碼收斂到一個(gè)獨(dú)立的適配層里。當(dāng)時(shí)圖省事狀態(tài)欄高度直接散布在頁面各處結(jié)果 OpenHarmony 真機(jī)一跑到處是padding.top失效的黑洞。如果后面這個(gè)項(xiàng)目還要再接入新的設(shè)備形態(tài)我會(huì)把所有MediaQuery讀取、平臺(tái)通道調(diào)用、字體配置統(tǒng)一收進(jìn)一個(gè)navigation_patch.dart文件里給上層業(yè)務(wù)暴露穩(wěn)定的接口不讓任何平臺(tái)差異滲透到頁面層。最后再分享一個(gè)調(diào)試習(xí)慣跨端調(diào)試一定要盡早借到真機(jī)模擬器只能信一半。我在模擬器上驗(yàn)證了很多次導(dǎo)航動(dòng)畫和狀態(tài)保存邏輯都沒有問題一到真機(jī)就暴露了簽名、圖形棧、狀態(tài)欄高度等一系列環(huán)境相關(guān)的問題。真機(jī)調(diào)試雖然麻煩但它能把那些在模擬器上隱藏得很好的問題提前暴露出來省下的時(shí)間遠(yuǎn)不止調(diào)試那點(diǎn)功夫。
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
中文字幕精品一区二区精| 国产高潮AA片免费看| 久热伊人99re| 97国产精选| 能看的av| 91美女片在线| 亚洲欧美日韩国产丝袜自拍中文| 无码操逼视频一下| 97中文超碰| 青青草原成人| 中文字幕奈奈美被公侵犯| 国产精品小视频一区二区三区| 97干综合网| 日韩激情啪啪啪| 大香蕉99热| 桃花色综合影院| 99久久久无码| 女性91网站| 久99| 青青操在线视频| 性暴力欧美猛交在线直播| 俺去也婷婷| 日日碰视频网| 国产 日韩 欧美高清| 蜜桃视频一区二区三区在线观看| TS人妖另类精品视频系列| 99色在线视频| 精品无码一区二区三区色欲| 超碰在线974| 天天综合网站| 动漫片子网站3黄| 国产在线播放成人免费| 性欧美天天| 国产无码久久高清| 91久久伊人婷婷青青草| 久久久久久久极品香蕉视频| 青青草公开在线免费不卡视频| 精品久久久久久无码| 97色爱| 国产又粗又大硬免费色网视频| 久久久久精| 日本中文熟女视频| 欧美激情欧美精品| 亚洲精品亚洲人成在线麻豆| 亚洲清纯综合| 国内精品999| 欧美亚洲中文| 久久精9| 熟妇的味道HD中文字幕| 骚货操死你| 久久婷婷视频| 国产嫩草精品A88AV| 国产激情视频在线观看| 久久久久久久9| www四虎| 人人贴人人摸| 精品九九九| AV老汉| 亚洲精品无码成人久久久99| 后入人妻无码| 欧美日韩大陆黑人少妇99| 伊人网综合在线视频| 97精品全部| 嗯嗯啊啊亚欧精品| 亚洲成av人片色午夜乱码| 亚洲一级黄色毛片| 免费成人在线熟妇网| 99热18| 嗯嗯啊啊好爽| 秋霞鲁丝午夜无码一区二区三| 爱我干综合| 亚洲无线观看久久| 老鸭窝黄色视频网站| 强奸乱伦av电影| 日本媚薬中文字幕在线| 亚洲综合骚逼| 欧美日韩夜夜| 亚洲精品久久久久久久蜜桃臀| 日本一级特级毛片视频| 夜夜无码| 大香蕉综合在线| 超碰人人妻| 日韩久久.一级黄色片| 综合五月天| 国产肏屁眼视频| 国产精品久久久无码AV网站| 久久国产AⅤ| 天天综合~91| 丁香婷婷激情五月天无毒不卡 | 偷拍偷窥与盗摄视频专区| 中文字幕、久久精品国产2020、久久综合久久自在自线精品自、亚洲 | 91亚洲人电影| 蜜乳AV一区二区三区四| 精品丝袜无码一区二区三APP| 国产精品69久久久久久久| 成人熟女视频一区二区三区| 九九热男人天堂| 综合色啪| 亚洲精品久久久久久久久豆丁网| 欧美日韩性爱视屏免费看了| 狠狠中文字幕| AⅤ片水多多| 97在线免费视频观看| 国产九九九九九九| 熟女高潮合集-永久久久-成人AV| 九一综合网| 久久久久久大| 国产嫩草精品A88AV在线| 激情啪啪拍91| 国产乱人伦AVA麻豆软件.| 国产日韩区| 国产91精品在线免费| 国语精品av| 天天日骚逼熟女| 亚洲天堂日本| 久久久草草精品| 欧美亚洲厕所精品偷拍91 | 91久久堂| 九九免费影片| 欧美色吧综合| 97欧美精品| 亚洲欧美在线丝袜| 啊啊啊啊啊啊啊啊视频| 色婷婷一区二区三区久久午夜成人不| 毛片99-全集电影手机免费观看完整-B029AV | 九九久久玖玖| 超碰在线一区二区三区| 欧美啪啪色吧在线| 东京热毛片177b2viP| 蜜臀久久99精品久久久久久酒店 | 福利在线视频一区二区| 久射吧| 欧美日韩一二三| 亚州欧美在线| 激情综合网亚洲| 国产精品一区二区三区免费视频| 色欧洲| 好吊色青靑草| 色视频蜜乳| 熟女五十路一区二区三| 五月婷婷性爱| 91在线综合网| av东京热男人的天堂| 日韩特一级久久| 久久激情四射婷婷丁香五月天| 91热| 久久毛卡| 亚洲另类综合欧美| 夜夜国产一区| 极品出轨视频网站| 日韩极品无码B| 五月天久久综合网| 凸凹视频在线观看| 97色插| 黄色十八禁| 欧美+日产+中文| 99久久久无码国产精品性啊聊| 大香蕉视频一二三区| 超碰成人最新最好看| 长长久久曰曰夜夜成人网| 婷婷啪啪| 色九九综合AV| 精品九九九| 久久午夜鲁丝片| 日本视频一区二区三区| 综合亚洲情色| 天天躁日日躁狠狠狠躁| 免费啪啪av| www.久久| 职场同事知名国产国产精品久久欧美日韩 | 色爱欲亚洲| 另类成人首页一区| av中亚| 无码免费精品高清| 97日视频| 91av一区二区在线观看| 五月天伊人| 日韩 成人 有码| 香港久久久| 久久精品国产AV一区二区三区| 影音先锋国产精品| 日本久久综合| 免费少妇一区二区| GVH-003 母子姦 青木玲-麻豆视频,麻豆视传媒短视频网站入口,麻豆视传媒官网直 | 91爱做| 丰满人妻一区二区三区免费 | 日影院久久婷婷夜夜网| 国产精品操| 亚洲成人福利电影免费| 97天天做| 久久五月天婷婷丁香中文字幕| 开心五月激情网| jiujiujiujingpin| 欧美成年人性爱视频免费观看| 色五月综合| 欧美日韩国产电影| 四虎午夜影院| 久久9亚洲| 91美女视频| 秋霞欧美性爰视频| 欧美日韩亚洲国产中文永久天天看| 国产又粗又大硬免费色网视频| 激情综合婷婷| 天天澡天天爽日日AV| 色五月婷婷五月天| 后入人妻无码| 色婷婷激情| 秘书高跟黑色丝袜国产91在线| 日韩免费大片一级播放| 日日干夜夜骑| 欧美人人AAA| 久久草视频污视频| 免费啪啪一级视频| 欧美亚州综合网图片| 99热99色| 久久精品一区二区三区蜜桃臀| 欧美精品成人一区二区在线观看 | 精品中文字幕第一页| 涩爱AV在线| 91综合网| 国产地址二三| 婷婷另类小说| 午夜乱轮操逼视频免费看| 亚洲天堂色图| 国产亚洲性生活视频播放| 欧美爆操91| 久久综合国产精品国产| 欧美人人天天网| 高跟丝袜AV专区国产| 男人天堂免费| 七久久久| 亚洲字幕一区二区| 安微少妇操BBB| 久久久久婷婷| 亚洲综合影院| 综合网97| 日本99热| 国产精品久久久久久久久久久久久久吹| 全球成人中文在线| 91在线欧美| 美日韩一卡二卡三卡免费人妻精品| 热99这里有精品综合久久| 亚洲城人男人的天堂| 操b在线观看| 久久久内射良家| 久久久婷婷| 欧美视频在线第3页| 大二网站亚洲| 国产熟女无套内射| 啊啊啊好舒服视频在线观看| 操逼网站地址| 日韩免费高清大片在线| 久久精品女同亚洲女同13| 920日本午夜免费| 两女互慰AV高潮喷水在线观看| 天天操天天日青青草超碰av| 欧苏综合色综合| 国产乱色国产精品免费视| 夜夜国自区| 五月开心网| 欧美性爱第一区| 大粗鳼巴久久久久| 欧美激情久| 国产毛片精品一区二区色欲黄A片| 欧美日韩1234| 精品丰满熟妇人妻一区| 97人人爱人人做人人乐| 免费观看啪视频| a片在线播放| 欧美草草高清日韩视频| 久久婷婷一区二| 日本高清_区二区三区| 91亚洲人| 欧美伊人电影| 欧美综合狠| 高树玛利亚无码流出| 国产日本久久免费精品| 激情抓乳插进去啪啪啪日韩 | 久久精品三级影视| 成在线人在线观看视频| 亚洲欧美日韩偷拍色图| 欧美成人精品欧美一级乱黄一区二… | 性爱视频无打码在线观看| 成人日本片久久久蜜桃| 少妇三P| 亚洲人成网www| av网页一区二区三区| 最新日本中文字幕| 精品视频久久| 99最新日韩偷拍视频| 日韩一级二级| 国产熟女少妇一区| oumeisetu综合| 亚洲综合激情五月久久| 婷婷丁香五月激情啪啪| 1禁看欧美黄片免费看| 欧美中文字幕日韩在线| 日本一级特级毛片视频| 强奸抽插av| 人妻天天爽天天爽三区| 超碰97久久| 人妻人久久精品中文字幕| 天天草AV| 是还免费视频1727我| 区二区亚洲婷| 草久久久| 久久同城AV| 久久亚洲色图中文字幕| 欧美性生活内射| 欧美综合色站| 日韩三级在线观看mp4| 婷婷丁香五月综合| 艳美熟妇先锋一二三区| 97精品一二区| 日韩久久超碰色| 亚州色站 日韩电影| 午夜久久一区二区无码中出| 久久发布国产伦子伦精品| 又黄又爽在线观看视频| 啊啊啊好湿久久| 少妇与黑人高潮在线| 老熟女熟妇| 一本大道综合伊人精品热热| 亚洲天天影视色综合| 国产精品久久久九九九| 亚洲清纯综合| 日韩另类色图| 黄色大片一区二区密桃丝袜| 综合97亚洲| 天天搞欧美| 白嫩91在线亚洲| 日韩15p| 97精品一区二区视频| 国产午夜福利专区综合| 久久久久亚洲Aⅴ无码| 在线无码操| 久9热| 丝袜夫妻自拍| 中文字幕乱偷人妻久久艾草网| 日本一级不卡一二区| 天天欲望网| 精品一区二区国产日韩| 探花激情视频| 婷婷三区| 老色鬼成人精品视频下载大在线观看| 蜜臀中文无码午夜| 一个人免费视频观看在线WWW| 最新岛国大片| 中文字幕日韩综合| 精品久久久av| 国产中文字幕在线| 超碰成人人人爽人人爽| 国产99久久99热这里只有精品15| 人人操av| 曰本特级特黄特色黄色A级网站高清在线免费看 | 黄片色区软件| 天天操女人| 中国黄色特级精品一区二区三区片| 97久久国产精品| 久久专区| 国产成人网站在线观看| 久久一区,青青青青草视频在线播放| 9精品久久| 亚洲久9| 亚洲图片色图欧美另类| 婷婷伊人綜合中文字幕小说| 国产精品在线一区二区| 强奸乱伦AV网站| 日韩射图| 97国产高清视频在线观看| 色综合20p| 亚洲国产尤物yw在线观看| 欧美精品亚洲精品日韩传电影| 久操大香蕉手机视频在线看| 亚洲 另类 丝袜 自拍 动漫| 九九九九九九九九九九九免费国产| 岛国免费视频在线| 亚洲国产91精品一区二区久久| 九九玖玖精品| 国产丝袜高跟美女av免费观看| 国产兽交视频在线播放| 无码视频一区二区| 亚洲无码超碰免费| 91欧美丨精品丨入口| 午夜寂寞欧美| 亚洲夜夜欢无码一区二区| 麻豆国产尤物AV| 色噜噜人妻av 中文字幕| 97免费在线观看| 精精夜夜| 夜夜免费视频| 日本人妻最新在线中| 国产久久天堂资源| 日韩欧美大力操| 一区二区三区四区色图| 91A欧美电影网站| 六十路日本| 国产免费内射视频| 人人操人人叉人人插人人| 蜜色网色哟哟| 天天狠操| 亚洲极品| 久热超碰| 国产成人亚洲精品无| 色婷婷狠狠| 91丝袜美女视频| 男人亚洲91首页在线| 亚洲欧美日韩偷拍色图| 九九热在线精品视频| 国产欧美岛国精品一区| 另类欧美色| 欧美亚洲激情小说| 狠狠色噜噜狠狠狠狠狠色综合久久| 另类专区加勒比| 思思热在线视频精品| 亚洲啪啪综合?v一区综合精品区| m欧洲一级午老| 免费一级视频特黄色大片| 秋霞午夜成人福利片片| 蜜桃臀一区二区三区久久| 亚洲综合在线视频| 色综合久久av| 天天天肏屄肏屄肏屄欧美欧美| 国产精品久久久视频| 成人激情无码在线视频| 人人妻人人爱人人玩| 老熟女中文字幕高清| 亚洲色五月| 国产成人拍国产亚洲精品| 欧美线天码中字| 亚洲激情网一二三四区| 看一级特黄a大一片| 香蕉人欧美综合| 亚洲欧美综合网站| 91视频成人福利网站在线一区 | 嗯嗯嗯啊啊啊操的我好爽| 色色色色色色色色色色色色色色综合 | 久久中出在线| 久久a久久| 国产浮力影院第1页| 夜夜爽夜夜| 欧美性第1页| 啊灬快c我灬啊灬用力灬啊灬-国产精品性做久久久久久-成人AV | 天天综合欧美综合| 亚洲情色1区| 亚洲激情av| 激情国产乱伦Av| 91露脸熟女专区| 国产精品午夜AV完会免费| 亚洲 欧美综合| 嗯嗯嗯啊啊在线观看| 亚洲丝袜制服国产91_国语字幕免费观看完整版下载第5集_ | 色综合一本| 好色综合| 亚州熟女乱伦| 在线岛| 蜜臀AV秘一区翔田千里| 一区操逼| 美女熟妇色| 97碰| 人人操人人摸avav| 370p日韩欧美亚洲精品| 国产精品99精品视频网站| 2017天天插| 日韩激情毛片一级久久久| 91人人| 啪啪性爱免费视频| 黄人人操人人操| 国产隔壁老王影院在线| 少妇啪啪自拍| 日本岛国黄色网址| 青青操青娱乐| 激情露脸爱| 九九热精彩视频| 91网站在线播放| 东京热毛片177b2viP| 3PAV乱伦视频| 亚洲日韩美女中文字幕乱| 欧亚免费视频| www.婷婷| 超碰97欧美日韩| 天天综合青苹果| 无码不卡亚洲成?人片| 91操熟女| 先锋色眉乱伦资源| 91色情黑丝搞鸡在线观看一区二区三区三州| 色五月婷婷五月天| 91久久久老司机| 美欧色综合| 青娱乐欧美激情一区二区| 99爱精品| 国产精品乱码久久久久久久| 最新日本中文字幕| 久热大香蕉| 黄网站黄视频网站进入口| 久久影视二区三区行押| 久久久久九九九九| 亚洲五月婷| 校园春色宗合网| 丝袜美腿av女优在线| 全免费a敌肛交毛片免费| 第四色色综合91| 91 亚欧| 精品综合久久久久久五月天| 狠狠操夜夜操蜜桃视频三区| 超碰69| 黄片视频,下载| 99re6久热只有精品6在线直播| 欧美激情黑人| 日韩不卡在线一区二区| 东北女人| 人人爱人人乐人人操| 九九在线视频| 欧美性夜| 丁香五月色情| 91女色| 日本三级日本三级99| 少妇蹲下买菜露大唇0| 强奸乱伦大香蕉| 久久久久网站-538在线视频-欧美永久乱码| 日夜伊人网| http://qxhbdz.com| 亚洲熟妇A V黑人| 国产后入精品| 国产精品999aaa| 久久男人网| 97在线精品观看视频| 久九干| 亚洲AV无码秘 蜜桃臀国精产品| 色av中文字| 久久久96| 大香蕉欧美日韩| 九九干| 性九九九九九九| 亚洲精品影视老司机| 91网站18在线| 日本岛国黄色网址| 外国免费性情大片| 五月天综合网| 精品伊人久久久大香线蕉小说| 男人的天堂Va| 日韩一区二区熟女| 老熟女乱子伦中文字幕一区二区| 98福利在线视频| 91操人| 亚洲免费成人在线高清无码视频| 欧美亚洲综合999| 狠狠综合网| 韩美日操逼| 综合亚洲网| 国产免费大片| av资源在线播放天堂| 乱欲视频| 日本二三四区| 亚洲色图 综合| 日韩三级久久久| 成人三一级一片aaa| 青青草好吊色| 色五月AV在线| 97色97好| 亚洲综合性感在线| 丁香五月影院| 久久久夜夜嗨免费视频| 两女互慰AV高潮喷水在线观看| 午夜经典| 人人操超碰在线| 蜜臀久久在线视频| 97综合在线观看| 99操视频| 亚洲精品无码久久AV| 2021国产成人精品久久| 91五十路| 性感美女91影视| 天天日熟妇| 欧美亚洲宗合色性图| 啊啊啊不要啊啊受不了了视频在线 | 91痴汉| 中文字幕诱惑制服人妻丝袜美丝袜美| 69视频入口| 熟女一区二区| 亚洲性爱无码乱伦av| 永久免费观看的毛片的网站| 狠狠操夜夜| 蜜乳视频网站| 一二三区精品视频| 97综合激情| 色色九区| 综合久久97| 殴美大黄片| 第45页一区二区| 激情av| 欧美日韩99| 园内精品自拍视频在线播放| 视频在线观看免费一区二区三区| 欧美性爱免费短视频| 免费公开人人操| 国产中文精品一区二区在线观看 | 在线观看十八禁| 久久精品亚洲东京热色播| 加勒比在线视频| 5252色欧美在线| 制服中出中文人人精品| 日本免费二区三区| 97精品久久| 午夜.DJ高清在线观看免费7 | 国产精品电影大全| 久久久亚洲高清不打码| 99色在线视频| 97超久碰| 亚洲无码日韩电影| 国产精品久久久久久久久久梁医生| 亚洲欧洲自拍图片专区满春格| 26uuu欧美日韩| 美国一区二区免费视频| 九九色婷婷| 伊人97色天使| 青青草影视蜜久久| 亚洲精品一区二区精华| 五月婷婷激情综合| 夜草欧美| 亚洲九九九| www.色操逼| 天天香香欲综合| 国产日产欧产美韩系列麻豆免费| 欧美裸体美女日麻屄| 久久久无码国精品无码三区三区| 国产精品2020| 中文字幕丰满子伦无码专区在线视频最新| 中文字幕亚洲永久精品| 91亚洲不卡一区| 精品美女少妇一区二区| 国产精品无码在线| 超碰人妻中文在线| 肏逼视频日本| http://qxhbdz.com| KK色在线影院| 欧美视频在线视频免费va| 少妇内射www在线观看视频| 久久一二三四| 久久熟女人| 国产福利合集| 成年女人一区| 精品国产无码中文| 91美女视频在线免费观看| 亚洲自拍天堂| 色哟哟国产精品免费网址| 色姑娘综合网| 大香蕉AV丝袜| 人妻9117c| 91在线美女| 91狠狠综合| 超碰97网址| 懂色天天爱天天日天天射天天澡| 国产亚洲精品美女| 亚洲高清无码AAA久久久精品| 97干天天| 大香蕉免费乱伦视频| 日韩少妇无吗| 欧美刺激色黄片免费看| 男人的天堂1024| 色av中文字| 久久久久久电影| 精品9999| 丁香五月综合| 日韩强奸av| 在线小说视频一区| 欧美激情亚洲色图| 91强热人妻| 亚洲欧美综合| 国产欧美日产一区二区三区 - 国产欧美日| 曰韩av中文字幕专区| 亚洲91射| 久久人人妻| 国产Aα| 东京热大香蕉| 操死我了啊啊啊| 综合色图亚洲欧美| 国产精品自拍xxxx| 欧美色图色综合| 秋霞福利网| 日本一二区免费| 5278欧美一区二区三区| 蜜乳Av成人片网站| 亚洲啪AⅤ永久无码| 校园春色亚洲| 亚洲天天在线| 易易A毛视频| 亚洲欧美国产精品久久久久久久| 学生妹天天看| 久久亚洲熟妇在线视频| 夜夜久久| 国产丰满熟夫69mpp| 嗯嗯嗯啊啊啊操的我好爽| 亚洲欧美大| 天天操夜夜操| 蜜臀久久99精品久久综合| 天天综合精品| 狠狠久久亚洲欧美专区| 97舔舔| 人人爱夜夜爱| 国产精品久久久久久久久久久久久久久久久久 | 干B视频伊人网| 极品一区二区三区免费| 97天天在线| 一区二区三区四区色图| 欧洲熟妇xxXx欧美老妇裸体| 水澄无码AV| 五月天社区| 婷婷五月天社区| 激情小说五月天| 亚洲综合小说另类图欧美视频激情小说色五月天| 日韩久久.一级黄色片| 啪啪免费| 成年人网站在线免费观看| 日韩中文字幕2020| 330Dv国产女人终合视频极品人与兽| 色鬼在线综合| 日噜夜夜夜夜夜夜夜夜夜夜爽爽爽爽爽爽爽爽爽爽爽爽 | 一类av片在线看| 亚洲一卡2卡3卡4卡乱码网站 | 国产隔壁老王影院在线| 久久黄色性爱视频| 99操碰| 荡小穴在线观看| 天堂射| 伊人91| 无码精品久久久天天影视| 破处bbq| 精品国产乱码久久久| 狠狠久久手机视频精品| 国产家庭乱伦网址| 精品无吗久久| 麻豆天美在线| 久久久久久精品免费看A级| 91xingse| 美女黄色91| 黄片免费看的| 6080yy午夜理论三级一区二区三区无码| 国产原创精品| 久久黄黄黄| av天堂天堂av日韩| 日本不卡码黄色| 欧美色图电影| 新版天堂中文资源8在线| 久久久久亚洲精品| 日韩欧美亚洲自拍偷拍| 国产免费一区二区三区最新不卡| 91男人天堂网| 亚洲国产精品有声| 成人天天看站长推荐| 大学生美女口爆| 加勒比大香蕉视频在线| 深爱伊人影院| 国内三级自拍小视频在线观看| 97免费视频网| 国产一区二区三区白丝| 丝袜狠狠草尤物人妻av91| 国产综合久久久麻桃个| 啪啪综合网| 91中文字幕在线观看| 51一区二区三区| 熟女高潮合集-永久久久-成人AV| 13小男生GAY自慰脱裤子| 水澄无码AV| 欧美一区二区三区不卡高清视频| 日韩三级久久久| 97超碰超碰| 青青草十区九区爱夜| 俺去啦俺来也久久综合| 成人精品视频一区二区| 国产成人91一区二区三区| 超碰97在线 欧美 国产| A级毛片在线看免费| 日本精品性生活久久久| 性爱免费视频成人| 安微少妇操BBB| 久久精彩视频| 国产精品点击进入在线影院高清| 欧美精品双插| 天天躁日日躁XXXXYY| 欧美96精品在线| 91亚洲欧美色图| 日本一区二区做爱的视频| 婷婷10月天青娱乐| 射丝袜高跟鞋99| 老司机老司机午夜影院| 黑人性暴力毛片| 亚洲城人男人的天堂| 精品国产91av一区二区三区| www.久久超碰| 蜜臀久久99精品久久久久免费观| 制度丝袜99| 亚洲激情视频| 超碰97在线中文| 天天舔天天 | 青青欧洲黑| 九九在线视频| 成年人性爱日韩| 亚洲无码 国产无码| 中文字幕精品三级久久久| 美女露胸露奶头| 美熟女逼导航AV操逼| 99操碰| 国产高清在线观看欧美| 欧美亚洲综合高清在线| 欧美国产操逼| 蜜臀av中字字幕网站| 成人性爱电影网| 午夜超爽| 青娱乐福利99| 97欧美精品| 精品成人久久久人人亚洲| 久9久9精品| 麻豆AV一区二区| 欧美超碰9798| 免费视频无码| 97久久超碰| 欧美一级做a爰片免费视频| 久久久久亚洲AV无码专区少妇| 久久久久久九九九九| 东北老熟女| 96一区二区三区| 精品高清牛人盗摄一区二区三区中文字幕A片免费在线观看 | 97手机日韩| 国产又粗又长的视频| 国产不卡的视频| Aa东京男人的天堂| 国产妇女精品视频青青草| 加勒比日本在线| 伊人久久亚洲中文字幕不卡| 日韩精品9999| 乱码人妻一区二区三区| 日本最新1区2区3区| 9999亚洲精品| 97草草| 天天综合网在线91| 亚洲综合97| 久9re热视频这里只有精品| 男女性无套 免费九一| 日韩欧美性吧婷婷乱伦大香蕉 | 久久久久久久性爱| 天天综合91| 久久无码一区二区二三区性色| 国产婷婷综合在线观看| 日韩黄片视频试看| 艹比视频国产精品| 99热这里都是精品| 亚熟在线| 国产精品69久久久久久久| 青青草大香蕉视频| 100啪啪视频大全| 88xx成人精品视频| 国产精品久久久久久久毛片1| 在线v中文字幕一区二区三区| 欧美日韩91| 97硬碰| 97亚洲自在精品在线观看| 囯产精品久久久久久久久久梁医生 | www.高清无码诱惑一区.com | 亚洲资源站| 人人操人人干网页| 亚洲欧洲偷拍一区| 九九九精品一区二区无码| 一区二区视频在看| 国产操伦| 毛片中心9视频99| 99re在线视频国产| 日韩免费在线观看不卡| 在线观看精品国产免费| 亚洲AV高潮| 殴美色网| 久久精品国产亚洲AV高级北京| 亚洲国产综合久久天堂| 骚货操死你| 二男一女成人A片| 欧美亚洲20p| 夜夜嗨视频| 国产动漫操逼视频| 丰满人妻一区二区中文| 欧美人与动性人交a| 九九黄色网| 毛片麻豆91糖心精品毛情片| 69XX一中文字幕人妻91| 91爱综合| 97超碰人妻| 欧美乱色| 国产AV中文| 久久,精品一二三| 久久久啊啊啊| 婷婷丁香五月综合| 人妻丰满熟妇av无码区蜜桃| 日韩 欧美 视频 在线 一区| 四虎884a| 久久夜黄色无码A级大片| 啊啊啊不要啊啊受不了了视频在线 | 欧美日韩人妻精品一区二区三区| 国产精品一级片在线看| 96精品一区| 日韩成人性爱电影在线播放| 九九热午夜欧亚国产视频| 欧美日韩操操操| 最新9久久久9免费视频| 韩国一级婬片A片AAAAA| 清纯唯美激情| 久久精品亚洲婷婷| 天天射天天| 欧美性生活内射| 色婷婷五月综合激情中文字幕| 久久久免费高清中文视频| 久久激情网| 97干在线| 亚洲美女 晚间男人天堂| 国产AV无码AV| 97久久久久| 丝袜喷水在线| 丰满少妇乱子伦精品无| 熟女精品日韩一区二区三区| 青青草九九九九九| av网页一区二区三区| 丝袜美腿丝袜| 操一区| 99无码| 日韩 欧美 另类 人妻| 欧美肥臀在线| 中文字幕片| 男女真人网18| 日本色色色| 欧美亚洲高清晰| 国产乱婷婷精品二区三区| 午夜福利视频在线一区| 欧美一区二区三区不卡高清视频| 91超碰在线播放| 射丝袜高跟鞋99| 国产成人网| 久久久久国产精品喷潮免费观看臀| 亚洲色人阁| 精品成人久久久人人亚洲| 国产精品午夜福利| 中亚av| 隔壁邻居波多野结衣中文字幕| 操狠狠| 黑人精品欧美一区二区蜜桃| 浪人综合网| 欧美精品97| 亚洲欧美日韩有码| 天天搞在线综合网| 日韩电影在线观看网址| 日本97久久| 校园春色综合色| 国产馆极品诱惑| 性一交一乱一交A片久久四色| 无码丰满熟妇一区二区浪潮AV| 亚洲色91| 久久久日本电影| 人人澡人人干| 国产亚热在线久久| av麻豆啪啪| 97久久精品国产| 78综合网| 日本不卡高清免v欧美日韩在线观看| 在线啊v一区| 国产福利av精彩对白| 久久综合亚洲色1080p| 国产黄色剧情影片麻豆免费播放| 精品国产乱码久久久| 久湿久久| 曰本特级特黄特色黄色A级网站高清在线免费看| 91激情综合| 超碰在线97国产| 久草精品一区 | 成人亚欧免费视频| 欧美性爱www免费版| 午夜寂寞欧美| 静品嫩模一区二区| 色五月婷婷色| 91色鬼| 久久九七| 大香蕉92| 少妇色欲综合网2| 99中文字幕| 日本性爱视频一级| 国产中文字幕在线点播| 欧美黑人精品在线播放| 99操碰| 午夜天堂精品久久| 欧美黑人极品高潮喷吹熟女黑人性暴力日韩在线欧美极品一区二区老师 | 91激情国产| 91成人无码| 日韩欧美成人性爱在线| 久久鲁干| 91AV老熟女视频| 黄久在线| 亚洲毛片基地专区| 乱伦一区二区三区‘| 99在线观看| 亚洲欧美另类少妇精品| 蜜桃臀一区二区aV| 亚洲欧美另类激情小说| 亚洲 国产 精品一区| 亚洲aw毛茸茸在线| 蜜桃臀一区二区三区久久| 久久专区| 日本三级大片| 天天看特黄的免费网站| 精品人妻一区二区三区不卡断| 久久日韩精品一区二区| 高清国产av无码| 91老熟女老女人国产老太| 免费一二区| 超碰在线成人| 亚洲图片欧美另类综合免费视频大大香| 亚洲中文字幕熟女| 六九九九| 91情色在线| 日本污ww视频网站| 伊人久久亚洲中文字幕不卡| 人人操人人摸人人骑| 九九色逼| 91操熟女视频| 婷婷丁香五月激情啪啪| 国产精品久久久久999| 色网在线视频观看免费| 欧亚第一综合网| 日韩无码极品| 刺激性视频黄页| 家庭乱伦麻豆| 91在线限制级| 久久成人国产精品| 蜜臀久久久国产| 欧美日韩免费性爱| 超碰69| 亚洲欧洲综合视频在线| 67914在线兔费成人视频| 插欧洲美女欧美精品| 91熟女视频网| 99久视频| 视频不卡中文字幕| 青青草亚洲一区| 国产家庭乱伦表演| 久草精品一区| 91|九色|国产熟女| 97精品一区二区三区免费| WWW4虎| 奇米狠999| 欧美96在线|欧| 久久9精品视频| xxxx网站亚洲精品| 国产精品禁久久久精品| 女色视频社区| 久插综合| 午夜国产成人福利视频| 91熟女在线| 国产人妻一区二区三区欧美毛片| 人人看欧美性爱| 深夜视频| SUV一区二区在线看| 大香蕉久久| 亚洲av综合伊人久久| 成年在线视频日本亚洲在线视频区精品江靖宇公司| 亚洲欧美成人在线| 国产精品爱欲| 欧美色图亚洲色| 啊啊啊不要嗯嗯在线观看| 青青草日本无码| 欧美久久伊人| 秋霞网—男女啪啪亚洲免费体验区 | 午夜色婷婷| 日本操逼视频不卡直接放| 精人妻一区二区三区| 亚洲色图 图片| 天天干2区3区| 亚 欧 美 综合| 日本片日本片祼观看网站在线看中文版网页在线看 | 亚洲色图美腿丝袜| 麻豆国产尤物AV| 手机看片1024你懂的国产| 欧美老妇曰批的视频| 中国熟女老妇仑乱一区二区三区| 一本大道青青| 伊人宅男大香蕉| 日本精品加勒比海一区| 午夜精品久久久久久久99| 亚州久久9| 久9久9精品| 天天综合网入口~91| 裸体女人草逼视频播放一区,二区,三区,四区,五区 | 欧美日韩国内不卡| 精品国产丝袜一区二区三区乱码| 九九精品无码专区免费| 香蕉黄色一级视频| 午夜操逼不卡| 中文精品一区二去| 香蕉99秘 一区精品蜜桃臀| 国产91美女视频| 人妻精品一区二区| 热99re69精品8在线播放| 欧美人妻少妇| 中国操逼无码| 色色香蕉| 色综合色欲色综合色综合色综合| 黄色欧美性爱视频| 秋霞一级视频在线观看免费| www成人啪啪18秘 免费| 久久久国产成人一区二区三区在线| 国产精品久久久三级无码| 色999五月色| 97天天爽| 精品一区二区三区四区外站| 久久精品一区二区三区蜜桃臀| 色综九九九一区| 韩国一级做a久久久久| 国产av强奸美女| 成人欧美一区二区三区黑人一| 欧美综合97www| 天天操天天谢| 人妻丝袜美腿中文字幕| 大学生口爆吞精| 99在线免费观看| 另类图片亚洲加勒比另类图片亚洲加勒比另类图片亚洲加勒比 | 久久久涩| 91视频综合在线| 97在线视频免费| 国产白嫩漂亮KTV在线| 激情五月婷婷综合| 啊啊啊啊啊啊啊啊啊啊在线观看| 中文字幕av片| 青娱乐福利99| 色婷婷电影网| 日韩 女同 综合| 乱伦熟妇一区二区| 99re视频在线观看这里只有精品| 欧美伦乱爱| 尤物av网站免费在线播放| 国产18精品亚洲精品| 人妻大相焦在线| 午夜操一操| 丁香六月激情| 99国产精品自在自在| 成年人黄色视频免费| 亚洲,欧美,春色,另类| 精品丰满熟妇人妻一区| 日日日日做夜夜夜夜无码| 九久9热| 色五月AV| 91丨九色丨东北熟女| 欧美日本视频一区| 51一区二区三区| 97精品久久久久中文字幕| 一区二区三区高清天码| 欧中日成人免费影视| 搡老女人911熟妇老熟女| 国产在线不卡导航| 三久久久四久久久久| 亚州精品一区二区三区香中文字幕在线| 久久国产精品视频| 免费啪啪啪网站18岁| 中文字幕黄色一起草| 正在播放:深夜激情大战,自带黑丝袜全力输出骚穴 | 国厂麻豆77q4| 精品国产丝袜一区二区三区乱码|