免费国产精品自在自线-91精品国产色综合久久久浪潮-99热久久免费频精品-国产精品国模在线观看-久久亚洲国产精品成人?V秋霞-久久国产一级A片免费播放-亚洲国产欧洲综合97久久-久久国产白嫩美女呻吟高潮

ARTICLE DETAIL

資訊詳情

深耕商務(wù)建站與企業(yè)官網(wǎng)運(yùn)營的一線實(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)入加分申請、從哪個(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ù)鏈條比想象中長老師錄入加分扣分事件德育處做審批班主任要隨時(shí)看班級(jí)排名期末還要一鍵導(dǎo)出學(xué)期匯總。這個(gè)系統(tǒng)不是給人“看看而已”的它是每天都會(huì)被反復(fù)打開的工具型應(yīng)用。業(yè)務(wù)場景大致劃分成四塊工作臺(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è)入口對應(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)勢在于它的自繪引擎UI 渲染不依賴系統(tǒng)原生控件所以在不同平臺(tái)上渲染效果一致性極高。這一點(diǎn)對獎(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)注冊對應(yīng)方法。但對我們這種以 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 的純原生方案原因有三。第一獎(jiǎng)懲系統(tǒng)的導(dǎo)航層級(jí)很淺。底層四個(gè) Tab每個(gè) Tab 下面最多再推兩層業(yè)務(wù)頁面列表頁進(jìn)詳情頁。這種深度用 Navigator 自己的棧管理完全夠用上第三方框架反而要多維護(hù)一套路由配置。第二第三方路由框架對 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)場動(dòng)畫Navigator 的 PageRouteBuilder 已經(jīng)能完全控制轉(zhuǎn)場過程。實(shí)際用下來這套輕量方案反而讓問題排查變得非常簡單。哪個(gè)頁面崩了直接看路由注冊表就能定位到是哪個(gè) builder 出的問題不需要經(jīng)過框架層轉(zhuǎn)發(fā)。2.2 底部導(dǎo)航的結(jié)構(gòu)設(shè)計(jì)與頁面?;钏膫€(gè) Tab 頁之間的切換涉及一個(gè)核心問題要不要保留頁面狀態(tài)。最簡單的做法是每次切換都 push 一個(gè)新頁面但這樣工作臺(tái)的滾動(dòng)位置、學(xué)生頁的篩選條件、記錄頁的編輯草稿全部會(huì)丟失。我采用了IndexedStack加懶加載的結(jié)合方案。IndexedStack的原理是所有子頁面都會(huì)被構(gòu)建但只有當(dāng)前索引對應(yīng)的頁面可見其余頁面通過 Offstage 隱藏起來。這種方式能讓每個(gè) Tab 頁的 State 一直存活切回來時(shí)頁面還在原地。但它的一個(gè)潛在問題是四個(gè) Tab 頁會(huì)在啟動(dòng)時(shí)一次性全部 build如果每個(gè)頁面初始化都發(fā)接口請求啟動(dòng)時(shí)并發(fā)請求會(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)就瘋狂請求接口的問題。實(shí)測下來冷啟動(dòng)時(shí)間比單純使用IndexedStack降低了百分之二十左右而且后續(xù) Tab 切換也不卡頓。2.3 路由表與業(yè)務(wù)模塊解耦我把所有頁面的路由統(tǒng)一收斂到一個(gè)集中管理的路由表中業(yè)務(wù)頁面模塊只負(fù)責(zé)注冊自己的 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è)對象只有在頁面真正 build 時(shí)才能確保拿到參數(shù)。統(tǒng)一轉(zhuǎn)場動(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í)選擇對應(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)境配置過程大概折騰了兩天。最容易踩的坑是版本對應(yīng)關(guān)系OpenHarmony SDK 版本和 Flutter 適配分支之間存在一一對應(yīng)用錯(cuò)一個(gè)版本輕則編譯報(bào)錯(cuò)重則頁面白屏但沒有任何日志輸出。我現(xiàn)在習(xí)慣在項(xiàng)目根目錄建一個(gè)environment.md文件把本機(jī)用的 SDK 版本范圍、Flutter 分支 commit 都寫下來方便團(tuán)隊(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ī)偏晚甚至在某些場景下根本沒上報(bào)。我采用的方案是在 OpenHarmony 側(cè)通過平臺(tái)通道主動(dòng)讀取一次狀態(tài)欄高度緩存在全局變量里供所有頁面使用。Dart 側(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è)備上被遮擋。字體方面也有兼容問題。OpenHarmony 的默認(rèn)中文字體跟傳統(tǒng)移動(dòng)端不一定一致如果 Flutter 頁面里指定了某個(gè)具體字體族在 OpenHarmony 上沒有對應(yīng)字體時(shí)中文可能顯示成方塊。我在全局ThemeData里配置了字體回退鏈ThemeData( fontFamily: Roboto, fontFamilyFallback: const [sans-serif, Noto Sans SC, Source Han Sans CN], )這里優(yōu)先用系統(tǒng)字體回退再指定常見中文字體。實(shí)測下來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í)長很關(guān)鍵太短顯得生硬太長會(huì)拉低操作效率220 毫秒是我實(shí)測下來比較舒服的值。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)閉。原因很簡單導(dǎo)航切換本身已經(jīng)有視覺反饋震動(dòng)在這個(gè)場景里不是剛需與其花時(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在單一端上沒出過問題但到了跨端場景Map 里的類型信息在路由轉(zhuǎn)發(fā)過程中很容易丟失。比如學(xué)生詳情頁需要studentId字符串和fromSource整數(shù)如果傳參時(shí)把 fromSource 寫成字符串頁面內(nèi)部判斷就會(huì)出錯(cuò)而且這種錯(cuò)誤在編譯期完全暴露不出來。我的做法是對所有需要跨頁傳遞的數(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)航層不感知這些差異只需要原樣透傳參數(shù)具體解析邏輯留在頁面內(nèi)部處理。4. 實(shí)操過程把導(dǎo)航模塊落地到兩端4.1 初始化 OpenHarmony 側(cè) Flutter 工程整個(gè)實(shí)操過程踩得最多的坑集中在工程初始化和真機(jī)安裝階段。第一次創(chuàng)建工程時(shí)我沒選對設(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í)行一次接口請求也只在首次進(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 的圖形棧相對統(tǒng)一OpenHarmony 的自研圖形棧對 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ò)亂。場景是這樣的在工作臺(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)對文字默認(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 安裝失敗簽名證書過期或包名不一致核對工程包名與簽名配置重新生成自動(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
返回資訊列表
夜夜干夜夜操| 国产97在线日韩亚洲女人被黑人巨大| 丁香五月综合网亚洲综合欧美狠狠| 五月婷婷丁香网| 天天日天天摸| 久久98| 丁香五月天激情小说| 久久总和99| 亚洲网综合在线| 久色激情| 大香蕉婷婷五月| 啪啪啪五月天| 激情五月色综合国产精品| 97干在线看| 欧美三级A做爰在线观看| 超碰色综合| 久热最新视频| 伊人深爱综合| 国产精品日韩十五区| 永久的网站AAAA| www.99操| 美国不卡视频| 超91在线视频| 嫩草视频观看| 4399伦理午夜| 日本不卡中文字幕| 日本精品在线噜噜噜| 九月婷婷综合在线| 久久电影4399| 狠狠色综合网| 妻久久久久| 婷婷在线播放av| 国产成人高清| 最新日本A片| 影音先锋毛片网站| 97人人射| 激情纯色婷婷五月天在线不卡视频| 97综合在线| 在线观看亚洲AV| 97婷婷五月| 日操熟女| 色五月超碰| 91ncm视频| 婷婷色五月天色| 五月天丁香花婷婷| 日本丁香久在线| 大香婷婷| 91丨九色丨东北熟女| 综合99视频| 97五月久久丁香婷婷| 青草青草久9视频在线视频| 99操九九网| 色五天综合| 六月成人网| 免费无码毛片一区二区A片 | 亚洲人成网站999久久久综合| 日韩一级一片内射视频4K| 色婷婷基地 | 国产乱子轮XXX农村| 国产激情综合| 97操碰在线97| 色婷婷五月天中文字幕| 99在线视频在线观看| 婷婷五月婷婷五月天| 天天色综合网1| 99日这里只有精品| 五月婷婷性爱| 91日在线视频| 久久精品9| 99免费综合网| 婷婷五月天欧美图片在线播放电驴| 婷婷丁香激情综合色情| 思思re99视频在线观看| 玖玖综合色区在线观看| VA色婷婷| 久久性爱视频久久性爱视频| 亚洲第一第二网站| 色色999三级片| 欧在线一区| 久久性刺激| 噜综合| 六月婷婷色宗合| 欧美性爱5月天天天看| 狠狠撸激情综合丁香五月天俺来啦| 狠狠草狠狠草| 亚洲妇女熟BBW| 在线超碰免费| 色婷婷精品小视频| 丁香花五月天激情| 性爱五月婷| 殴美激情综合网| 69堂午夜视频最新地址| 日本色久| 日本人妻操| 天天曰夜夜爽| 99热国产精品| 日韩xx在线| 丁香五月色情| 亚洲综合草草| 日韩大片艹艹| 天天碰夜夜爽| 波多婷婷久久| 97色伦另类图片小说视频| 婷婷五月婷| 五月丁香成人网| 国产成人亚洲综合亚洲| 婷婷五月图片小说视频| 人妻熟人中文字幕一区二区 | 六月丁香色色色| 开心六月丁香五月婷婷| 在线成人网站| 91凹凸在线| 开心五激情网| 夜夜穞天天穞狠狠穞AV美女按摩| 久久激情网| 播五月丁香六月| 天天日日夜夜| 中文精品久久久久人妻不| 夜夜干天天操| 丁香婷婷综合喷| 天天综合情| 丁香五月五月婷婷| 十二区无码| 五月婷婷 欧美| 久婷婷色| 久热中文字幕| 亚洲激情综合网| 人妻中文av| 色丁香五月综合网| 久草婷妨| 激情文学五月丁香六月婷婷| 色婷婷综合在线| 97色色色视频| av在线观看网址| 三十路磁力链接| 99九九在线| 婷婷五月天无码熟女| www..999热久| 国在线激情网| 99热这里有精品| 99自拍视频| 超碰99资源站| 四色永久成人网站| 色婷婷六月天| 婷婷之六月丁香| 99re6在线视频精品免费| www.五月婷婷久久.com| 五月丁香六月欧美综合网站| 丁香六月婷婷综合激情欧美 | 精品99视频| 青青草原爱爱网| 综合五月激情网| 五月婷婷操操| 五月天天久久香| WWW.久久99| 五月丁香六月婷婷视频| 久久五月天网| 久久亚洲激情五码| 蜜臀嫩草| 伊人九九热| 色婷婷成人| 超碰中文字幕在线| 五月丁香综合在线| 婷婷五月精品中文字幕| 久久久久人妻网址| 中文字幕人妻在线| 丰满少妇乱A片无码| 天天插天天干天天舔| 久久婷婷九月国产精品| 六月婷婷综合激情| 激情小说五月天中文字幕| 欧美色综合天天久久综合精品| www.婷婷五月天啪啪| 2025神马午夜福利| 婷婷六月综合基地| 天天草天天舔| 激情四射婷婷色色色| 99综合在线| 久久久妻人人人| 激情综合五月婷婷| 婷婷五月婷婷| 五月丁香综合激情在线观看| 99视频在线啪| 能看的AV| 在线天堂9| 综合五月草| 婷婷五月在线影院| 狠狠操综合| 五月天婷婷伊人| 婷婷综合av| 99久久久免费| 99视频在线精品免费观看2| 啪啪 综合网| 色综合久| AAA久久久| 人妻内射麻豆视频| 五月丁香啪啪综合| 91综合网| 婷婷五月欧美综合| 九九AV| 日韩一区二区三区无码| a九九热www| 丰满少妇猛烈A片免费看观看| 性色五月天| 激情综合网婷婷久久| 久久99免费视频| 99精品自拍视频| 五月的婷婷六月丁香| 26uuu日韩| 日韩色色网| 丁香亭亭激情四射| 国产一级视频a| 99热这里只有精品1025| 九九激情| 噜噜网免费视频| 六月亚洲婷婷6月中文字幕| 99干在线视频| 九九九九九九热| 国产精品色色| 九九99在线免费在线观看视频| 五月婷六月丁香| 久九色| 久久男人网婷婷| 五月天婷婷社区| 天天干夜晚夜操| 九九婷婷五月天影视| 色色色综合色| 婷婷五月电影| 丁香狠狠干| 91丨九色丨熟女高潮| 五月婷导航| 亚洲午夜AV| 伊人五月综合网| 丁香8月手机综合| 99爱在线视频| 久久婷五月天| 一点色成人网| 欧美性生交XXXXX无码小说| 婷婷久热| 丁香成人五月天| 综合色五月天| 激情综合无码| 天天激情5月天亚洲| 色婷婷色| 日本色色网站| 欧美久久婷婷| 欧亚洲在线高清视频| 国产.亚洲.欧洲视频在线| 五月丁香婷婷色播无码| 亭亭玉月丁香| 色激情综合| 国产97色在线| 欧美群妇大交乱婬网| 久久久com| 久久久久久激情| 五月婷婷九九热| 婷婷玖玖丁香| 97在线碰| 一本道综合网| 色婷婷久综合久久一本国产AV| 五月停停丁香| 色玖玖综合| 超碰国产在线观看| 五月天亭亭俺也| 性色五月天| 激情婷婷丁香| 色噜噜狠狠狠狠色综合久欧美| 日韩一级| www.婷婷五月| 99久久综合网| 天天日天天草| 色五月播五月| 五月丁香综合精品欧美| 丁香五月婷婷色偷偷| 老妇操B| 殴美日韩成人| 公的粗大挺进了我的密道| 日本少妇裸体做爰高潮片| 九九九九九九热| 九月婷婷在线观看| 99热只有精品在线播放| 操你av| 亚洲色在线观看| 操九色| 婷婷五月天影院| 9热网站| 中文字幕不卡网站| 99热欧美| 婷婷.com| 婷婷五月天成人| 综合久久十三| 色五月综合激情| 人人玩人人橾| 婷婷激情社区| 亚洲日本韩国| 久久久久激情| 激情五月天婷婷视频| 婷婷五月天堂| 国外亚洲成AV人片在线观看| 在线中文字幕av| 99热这里只有在线播放| 九九这里有精品| 91精品91久久久中77777| 一本色道久久88综合日韩精品| 操逼综合激情网| w婷婷五月婷婷w| 久久五月丁香伊人青草| 99热成人| 婷婷久久爱| 婷婷永久在线| 99热这里只有精品9| 五月婷婷综合网| 99re久热只有精品6在线直播| 婷婷丁香五月综合网上 | 成人丁香五月天Av| 亚洲中字AV电影在线网站| 欧美天天搞| 在线五月色播| 婷婷网五月天| 99热爱爱干干日| 色婷婷丁香五月天激情综合网| 97亚洲婷婷| 五月Huangsewang| 五月天激情影院| 天天综合影院| 色www99| 五月丁香激情片| 婷婷丁香五月色| 一起草AV入口| 婷婷之六月丁香| 热99在线| 任你艹| 激情第四色| 9久久狠狠的| 深爱五月月天| 六月丁香网| 五夜丁香| 色婷婷a v| www.9色色色| 久久久久99精品成人片| 亚洲成人AV电影在线| www.色婷婷| 欧美啪啪9| www.com在线操视频免费观看| 丁香五月婷婷呀| 色色网站| 亚洲五月天第一综合干| 久久xxxx| 婷婷久久国产视频| 亚洲精品久久久久久久久久吃药| 五月丁香六月婷婷综合免| 免费黄色片子| 五月婷婷综合网| 久99视频在线观看| 成人av免费观看| 丝袜激情网| 六月婷婷香蕉| 九九激情综合| 亚洲激情校园| 久草婷婷网 | 操你av| 久久婷婷五月天激情新地址| 婷婷免费无视频| 天堂无码人妻精品AV一区| 五月天无码| 色色色色热| 婷婷亚洲日本| 日韩性爱AV| 色宗合久久五月婷婷| 不卡在线中文字幕无| 色婷婷五月天堂资源| 亚洲激情四射色| 9久热这里只有精品| 久久婷婷艹| 五月天婷婷7米| 日韩在线成人电影| 色五月综合在线| 久久AAAA片一区二区| 国产成人片| 色了色综合| www.九九婷婷| 久久久婷| 五月婷婷我| 99热精品超碰| 日本丁香五月| 婷婷五月天在线一区| www.99日本| 狠狠爱综合| 色色色综合视频| 黄网在线免费观| 色五月婷婷五月天激情综合| 九九热这里只有精品5| 狠狠操狠狠爱| 99热精品中文字幕| 久鲁鲁色网| 操B无码视频国语| 国产精品色婷婷久久久精品| 丁香五月第九色| 日噜噜色| 天天射影院| 就爱射中文字幕资源网| 97人人干人人操| 国产FREESEXVIDEOS性中国| 日韩十国产极品久久| 五月婷久久草| 久久人人做人人妻人人玩精品va| 精品人妻在线| Jh7Uf088VHafNm| 五月丁香最新| 极品人妻VIDEOSSS人妻| 99视频久久| 亚洲五月婷天天操| 91干视频| Av免费网站在线| 五月婷婷六月丁香在线| 丁香五月激情婷婷婷婷在线观看| 天天日狠狠| 超碰高清在线| 五六月婷婷久久| 激情深爱五月天| 亚洲国产99| 米奇激情婷婷| 亚洲综合字幕色色| 五月婷婷婷综合网| 五月婷av| 久久大国产香蕉| 婷婷五月天精品| 亚洲第一精品成人999久久精品| 丁香五月天无码AV| 猫咪伊人久久| cao久久| 中文幕无线码中文字蜜桃| 日韩AV片| 五月天激情国产综合婷婷婷| 天天操天天日天天操| 亚洲性受XXXX五月丁香| 无码人妻电影| 9l视频自拍9l九色9l成人| 深夜婷婷 丁香| 五月丁香六月婷婷网| 五月婷婷,狠狠操| 秋霞三及片| 五月丁香久久久日婷婷久久婷婷日| 日本一级特黄大片AAAAA级| 婷婷99视频在线| 婷婷五月天在线观看| 91久久久久久| 五月丁香六月激情欧美综合| 超碰国产在线| 九热视频| 丁香五月激情综合| 五月婷婷综合视频| 久草热在线视频| 五月丁香啪啪网| 国产9色在线/日韩| 日本色99| 啪啪91| 99在线69| 天天操人人干| 色综合色色| 色婷婷综合视频| 六月婷婷综合| 三级片AAA久久久AAA久久久AAA| 91人妻PORNY九色大屁股| 五月香婷婷| 色综合网址| 色婷婷综合视频| 五月婷婷激情综合| 五月婷婷啪啪| 成人五月丁香花| 播丁香五月婷婷欧美| 婷婷丁香色五月天| 色色色五月| 94干大香蕉| 丁香六月婷婷社区| 婷久久| wWwCom夜操wwW| 五月婷婷开心深| 色五月天综合| 日韩1区2区| 婷婷网五月天| 色婷婷综合网| 九九无码AV| 在线亚洲综合| 日韩久热| 开心激情久久久久久久| 俺去也五月天| 五月丁香激情综合| 天天久久九九| 亚洲AV综合网| 99亚洲欧洲| 五月天伊人综合| 婷婷射图| 日本不卡高字幕在线2019| 97午夜一区二区| 9有码中文| 精品九九在线观看视频| 激情性五月天免费小说视频| 久久HD| 国产精品成人AV在线观看春天| 影音先锋男士资源网一区| 五月婷婷导航| 青青热久精品视频在线观看| 狠狠色噜噜狠狠狠狠综合| 99激情网| 先锋影音男人的天堂AV| AV伊人青草丁香六月| 久久婷婷丁香六月天| 六月色婷婷| 六月婷婷综合| 成人电影AV在线观看| 天天插综合在线| 色婷婷五月天视频在线| 久久人人看| 成人在线观看一区| 六月婷婷狠狠| 丁香花五月天激情| 久久男人网婷婷| 婷婷综合网| 综合激情网激情五月。| 欧美性爱五月天| 激情啪啪五月| 丁香五月婷婷手机| 国产精品18久久久| 性爱网五月天| 激情婷婷五月| 久综合4| 五月丁香日本一抹本| 激情综合网五月激情| 99色色视频| 777久久久| www.狠狠操.com| 91精品久久久久久| 色99婷婷五月天| 天天操天天操天天操| 99精品久久久久久久婷婷| 久久密臀婷婷| 五月丁香婷中文字幕| 丁香婷婷久久 | 可以直接看的av网站| 91成人视频| 五月天堂六月丁香亚州中文字幕久久 | 五月天婷婷三级黄| 国产午夜一区二区三区| 婷婷色网站| 婷婷五月天天天| 国产av天天插天天操天天爽| 日日干夜夜撸夜夜骑| 日本三级中国三级99人妇网站| 国产亚洲色婷婷久久99精品9j| 婷婷五月天综合蜜桃| 婷婷激情六月| 久久最新色色色| 99久久婷| VA色婷婷| 五月丁香啪啪| 婷婷五月天久久久| 26uuu| 天天色天天射天天日| 色婷婷亚洲六月婷婷中文字幕| 另类丁香五月天区图| 丁香六月中文| 五月丁香本色在线观看| 五月婷婷免费| 九九色插| 五月天播播中文字幕| 欧美超碰亚洲| 色天五月天在线观看视频| 97色一二三| 婷婷五月丁香综合人妻| 精品9l九九九九九77777| 亚洲色婷婷五月| 中文字幕天天干| 成人va视频| 成人午夜免费电影| 97操操操| 色色色综合视频| http:色情日本com| 久色资源网| 亚洲天堂有码| 五月丁香成人| 久热久色| 色婷婷丁香花五月天| 性色视频| 久综合| WWW.婷婷| 天天干肏夜夜| 日韩无码人妻一区二区| 色五月成人| 无码一区二区日韩| 99欧美精品99日本精品| 激情五月色婷婷| 插逼综合网| 国产成人亚洲综合A∨婷婷| 天天色天天色天天色天天色天天色天天色| 日本不卡一区二区三区| 夜夜谢天天干| Av狠狠色丁香婷| 69凹凸成人综合网| 激情AV在线| 五月婷婷在线丁香| 五月丁香婷婷激情图片| 久9久9久9久9久9久9| 日本婷婷综合精品| 丁香五月婷婷色偷偷| 五月婷婷综合激情| 这里只有精品9| 久久婷婷五月综合啪| 婷婷性爱| 婷婷五月天开心激情网| 色婷婷综合网| 丁香婷婷婷五月综合色情| 日本一级一级一级一级| m色激情网| 婷婷五月丁香色综合| 99热一区| 婷婷社区五月天| 26uuu国产色| 99热在线播放精品| 99爱爱| 色五月天在线观看| 天天舔夜夜操www com| 激情五月天色色色| 嫩草AV久久伊人妇女超级A| 五月婷婷激情综合网| 天天插天天玩天天干| 丁香五月天激情四射网络不好 | 激情五月小说婷婷| 色播五月天天| 丁香婷婷五月综合色情| 综合九九日本| 婷婷五月天99综合网站| 五月天色区| 人人色婷婷| 26UUU亚洲欧美| 久久HD| 婷婷色基地在线看 | 亚洲久艹| 97色精品视频| 色五月激情五月| 色色吧综合| 久狠狠狠| 婷婷五月花丁香| 天天日日天天| 五月天婷婷一起草| 天天久综合网永久入口17v | 婷婷五月情天| 狠狠色 综合色区| 亚洲激情丁香五月天色| 久九色| 激情五月综合久久| 噜噜五月天综合| 激情AV网| 婷婷色五月大香蕉在线| 国产全是老熟女太爽了| 婷婷久久五月| 99热久| 色五月色五天色情网| 色5月丁香婷婷| 色色色色色网站| 丁香五月23111| www.狠狠操.com| 九九综合精品| 多精窝99在线视频| 六月婷婷狠狠色在线观看| 免费观看欧美成人AA片爱我多深 | 思思热视频| 久久婷婷五月综合色丁香| 五月伊人视频在线看| 久久综合网免费视频| 日韩一级片| 开心五月婷婷五月| 秋霞午夜理论| 婷婷丁香高潮了| 六月婷婷无码观看| 色色aⅤ網| 精品一区二区三区木瓜| 亚洲VA在线| 丁香婷婷视频一区二区| 激情色色色| 99色视频| 91干| 五月丁香久久| 香蕉久操| 国产4P视频精品五区| 婷婷色吧| 丁香六月激| 桃色伊人在线| 人人人操B超碰| 激情内射p| 99操无码视频观看| 五月天激情综合| 中国女人内射6XXXXX| 亚洲网综合在线| 区啪精品| 我爱大香蕉| 婷婷黄色五月天在线视频| 99视频精品全部免费观看| 五月婷婷影| 色99热| 九月丁香婷婷| 久久精品日| 超碰97人人操| 丁香五月天无码| 丁香五月香蕉| 天天干天天操天天拍| 色天堂婷婷| 色色婷婷色色| 色五月丁香总合网| 亚洲99精品欧美一区| 久久婷婷成人| 日韩限制级大尺度黑料泄密大尺度视频一区二区在线观看 | 五月天成人免费视频| 99热激情| 中文字幕欧美精品久久| 91啪啪视频| 99热这里只有精品一| 五月婷丁香| 色噜噜狠狠色综合日日| 五月天丁香欧美激情| 97自拍视频在线| 亚洲 五月 婷婷 成人| 久久久性爱视频| 久草热8精品视频在线观看| 五月天婷婷狠狠| 婷婷丁香成人在线视频| 操九色| 草草色情综合网| 91九色在线| 婷婷五月天激情丁香| 色色激情五月天| 北条麻妃伊人| 亚洲五月婷婷在线| 久久婷婷色综合| 超碰色碰碰| 色五月xxx| 啪啪 综合网| 久久久婷丁香五月| 丁香五月狠狠在线观看| 久99久精品| 婷婷久久爱| 四色 爱 婷婷 精品 亚洲 五月天| 亚洲午夜一区二区| 爱iii做iiii日日| 草美女在线观看视频在线播放| 九月婷婷激情| 亚洲在线成人| 麻豆五月丁香婷婷| 疯狂做受XXXX高潮A片动画| 五月色婷婷中文字幕| 亚洲操b| 97色干在线观看| 久久五月婷婷电影| 另类A片| 丁香六月综合激| 思思热久久爱| 日韩黄在免| 有码人妻久久| 99成人在线观看| 日本超碰在线| 97影院一级片| 五月丁香激| 天天操天天操天天操天天操天天操| 久久桃花网色婷婷| 97色伦另类图片小说视频 | 97色婷| 怡红院 久久| 91操熟女| 99在线视频色版| 69人人操人人爽| 天天干天天射综合网| 免费无码毛片一区二区A片| 五月丁香六月色婷婷综合五月天| 中文字幕婷婷| 色婷五月天| 五月婷婷性爱| 无码se| 激情开心五月天| AV电影在线播放| 色婷视频| 99热 免费| www.五月天| 伊人天天色| 精品少妇人妻AV无码专区偷人| 五月综合激情图片 | 碰99在线| 激情綜合W W W,激情五月天| 狠狠色九月| 五月天 婷 欧美亚洲| 五月婷婷色播| 天天骑天天操| 美女100%露全身无挡网站| 777米奇影视第四色| 五月婷婷婷婷婷婷艺术| 99热人人操人人操| 超碰资源在线| 丁香六月啪啪| 大战熟女丰满人妻AV| 久久精品66| 欧美熟妇一区二区三区| 婷婷中文无码| 丁香香五月激情免费视频| 久久久亚洲精品一区二区三区浴池| 开心五月丁香啪| 99久高清视频| 亚洲精品电影| 丁香花五月天| 99热亚洲综合| 亚洲99综合| 色综合久久88色综合天天人守婷| 青吴乐视频| 国产精品国产| 欧美99热| www.99热精品99.com| 99ri精品视频在线观看| 激情五月天啪啪| 色色网91| 亚洲色五月| 色色色色色网站| 中文字幕视频在线播放| 国产69久久久欧美黑人A片| 婷婷五月激情视频在线| 激情九月婷婷| 9热超碰| 曰曰久久| 无码AV免费精品一区二区三区| 99久久久| 久久婷婷五月国产色综合激情| 成人国产网| 中文字幕在线日亚州9| 午夜不卡成人一区二区| 丁香五月色五月| 欧美精品中文字幕亚洲专区| 天天人人人人人人人人人人人| 亚洲色色图片| 操逼六区| 五月婷婷av在线| 成人在线网址| 日本va欧美va欧美va| 国产亚洲99久久精品| 日本成人内射| 超碰AV在线| 草五月| 色亚洲婷婷| 日韩高清成人| 在线免费观看激情视频| 色五月综合| 9l视频自拍9l九色9l成人| 激情二色月| 欧美黑人大吊| 欧美人人女女精品综合五月天| 欧美大片| 激情五月天婷婷丁香| 涩五月婷婷| 囯产精品一品二区三区| 婷婷偷拍网| 六月丁香狠狠爱| 雪千夏麻豆| 色婷婷成人做爰A片免费看网站 | 丁香婷婷久久五月天| 五月天激情网图片| 丁香五月中文字幕| 色99色| 九九视频这里只有精彩| 色婷婷综合五月| 婷婷精品视频| 97色色色| 麻豆雪千夏| 青青999| 激情婷婷护士激情| 国产精品久久久爽爽爽麻豆色哟哟 | 成人免费黄色短视频| 亚洲无码99| 丁香五月婷婷啪啪啪| 99综合网| 亚洲第一综合| 五月婷婷69| 亚洲视频图片婷婷五月| 久久免费视频62| 日夜夜天天| 婷婷激情五月天色| 五月婷婷开心爱| 亚洲性天天| 色色丁香| 亚洲精品色色| 五月婷婷av| 婷婷综合| 天天狠狠夜夜狠狠2023| 天天色综网| 色五月丁香网| 婷婷五月天成人网| 日本九九九九| 五月丁香久久| 风流少妇A片一区二区蜜桃| 婷婷丁香六月| 91无码一区人妻A片蜜| 日韩无码AV电影网站| 免费黄网不卡AV| 新激情五月天| 激情五月狠狠喔| 激情婷婷网| 国产色网站| 色婷婷久久| 婷婷激情丁香五月婷婷激情丁香五月婷婷 | 国产又黄又爽又激情不遮挡视频在线观看| 六月婷婷色五月| 亚洲中文乱字字幕线在永久| 免费播放99性爱视频| 99热.com| www.精品99| 人人爽天天爽| 免费视频WWW在线观看网站| 国产看真人毛片爱做A片| 91人妻人人操| 玖玖婷婷婷丁香五月| 久久婷婷色情7777网站| 欧美噜噜噜草| 五月花婷婷最新| 99热这里精品| 婷婷中文在线| 少妇2做爰HD韩国电影| 黄色高清无码| 国产三级片91| 99亚洲综合| 日韩欧美一级大黄网站| 青青草原伊人网| 丁香六月激情综合| 婷婷碰碰| 丁香六月久久| 开心日韩丁香婷婷五月| 99热这里只有精品1| 久久99久久99精品免视看婷婷| 国产人妻人伦精品一区二区| 日本熟女啪啪| 97色婷婷| 婷婷五月天亚洲综合| 色在线99| 香蕉AV777XXX色综合一区| www.色色com| 婷婷八月激情| 六月综合在线| 超碰99热| 超爽内射| 天天爽成人综合网站| 五月天色婷婷激情| www.狠狠操| 色都都狠狠色都都色综合色| 欧美色图45678| 深夜A片| 丁香婷婷色五月激情综合| www.韩日视频| 激情综合五月激情XXXX| 强伦轩人妻一区二区电影| 五月婷婷丁香六月| 天天综合网~91| 我要色综合五月婷婷| Av九九| 变态另类色图| 综合久久丁香婷婷,五月婷婷六月丁香,开心激情综合网,六月丁香在线观看,婷婷丁 | 九九AV在线| 97碰精品| www.国产亚洲69ty.久久久久久久久久久久| 五月婷婷丁香狠狠撸久久| 五月激情六月综合| 色开心五月丁香| 九九在线免费观看| 综合五月婷婷| 五月婷婷成人| 伊人色欲五月天| 天天弄天天操| 国产老熟妇亲子乱对白| 丁香五月天成人| 丁香五月综合| 翔田千里 50岁 无码| www激情五月天| 色135综合网| 色综合网上班开心婷婷久久| 综合婷婷五月天| 淫视馆av三区| 日日噜狠狠色综合久久| 五月天丁香| 婷久久| 99色色| 色婷大香蕉| 丁香美女主播视频在线观看| 亚洲精品久久久久久久久久吃药| 特黄三级片| 91.com男女操| 麻豆精品| 色五月综合在线| 99操网站| www.五月天社区| 婷婷丁香五月天综合激情| 97色色色视屏| 婷婷久久网| 丁香婷婷激情综合五月激情| 超碰AV在线| 综合久久97| 影视av久久久噜噜噜噜噜三级| 天堂亚洲 在线| 五月激情婷婷丁香| 国内9l视频自拍老熟女九色| 伊人久久丁香婷婷六月五月综合| 亚洲国产精品VA在线看黑人| 色久婷婷网| 最近中文字幕大全免费版在线| 婷婷激情丁香五月天综合| 日韩欧美颜射| 五月丁香久久| www.国产色| 色八月婷婷| 亚洲精品视频在线播放| 五月激情丁香六月狠狠干| www.狠狠操| 开心激情色婷婷五月天| 欧美人与性动交CCOO| 婷婷激情五月天色| 69凹凸成人综合网| 亚洲夜夜操| www.激情五月天.con| 天天干天天干天天干天天干天天干| 丁香六月欧美| 久久hd| 99热最新| 丁香五月自拍| Va另类视频| 日韩AV在线免费| WWW.17C亚洲精品| 99热这里只有精品1025| 夜夜爽天天爽| 婷婷六月久久| 丁香五月婷婷激情蜜桃| 色五月婷婷大香蕉| 伊人五月天综合网| 久久er99热精品一区二区| 青草热视频这里只有精品| 夜色.cnm| 色综合久久天天综合网| 丁香婷婷精品视频| 秋霞av吧| 亚洲va综合va国产va中文| 99色综合| 色婷婷8| 久久久久婷| 噜综合| 99精品视频播放| 91干在线| 婷婷丁香久久五月综合| 色婷婷成人久久| 丁香五月婷婷啪| 六月伊人婷婷| 婷婷性爱视频在线| 激情第四色| 99日韩网站| 色欲丁香| 综合久久婷婷99| www.jiujiujiu| 天天插天天日天天爽| 九九热99久久99| 99色热| WWW.婷婷| 丁香亭亭久久| 久久久久久18| 婷婷五月天av| 丁香五月成人av| 六月丁香啪| 97精品综合久久内射| 日本三级韩三级99久久| 六月丁AV| 激情啪啪五月天| 九9九9无码| 国产成人精品一区二三区熟女在线| 久久性爱视频网站| sisi热国产| 五月天久久网站| 天天色综网| 日本超碰在线| 五月婷婷激情久久| 99热这里只有精品国产免费| 在线超碰91| 色噜噜丁香| 午夜丁香婷婷| 激情网五月天| 久久这里只有精品16| 日韩欧美颜射| 伊人大香蕉在线视频| 极品少妇XXXX精品少妇偷拍| 另类激情五月| 欧美色爱五月天| 综合久色五月| 天天久久狠狠色综合| ady狠狠入| 一二线视频 另类| 久热免费| 影音先锋一区| 日日噜狠狠色综合久| 日日婷婷不卡| 丁香六月婷婷综合激情欧美| 丁香五月婷婷偷拍| 97人人操人人拍| 国产肥白大熟妇BBBB视频| 色播综合| 香蕉婷婷色五月| 天天爽天天爽视频| 99热在线这里只有精品| 日韩99色| 亚洲无码成人网| 色情综合| 99热碰碰热| 丁香密臀AV激情网| 久热久re| 99超级超级超级碰| 婷婷丁香五月天激情四射| 狠狠五月天| 香蕉综合网| 99久视频| 五月婷色| 玖玖婷婷五月天| 六月 丁香 视频| 99综合网| 婷婷丁香五月亚洲| 伊人婷婷五月天| 亚洲AV成人精品日韩在线播放| www99在线观看视频| 丁XX 成人| 五月丁香六月激情视频| 丁香色婷婷| 五月丁香六月婷婷激情视频在线观看免费 | 色综合久久44| 大香蕉网站,大香蕉综合| 久久9精品视频| 久9精品视频| 91爱操| 精品久热| 久久这里只有精品99| 亚洲中文字幕av| 成功精品影院| 牛牛热这里只有jingpin| 九九婷婷五月天| 超碰人人摸AV| 青青草婷婷久久| 日本色色网站| 丁香激情四射| 99热婷婷| 色婷婷视频| 婷婷操逼网| 婷婷瑟瑟五月天| 天天澡天天狠天天天做| 婷婷五月综合色拍| 成人午夜无码视频| 狠狠色色| 五月婷婷影视| 国产亚洲色婷婷久久99精品9j| 色综合香蕉视频| 9久久久久久久久久久| 天天干,天天舔| 丁香开心深爱| 一级操逼内射在线视频| 播五月丁香三月婷婷| 99久在线精品| 99激情| 99热97美女| 激情六月丁香| 中文久久久人妻| 九九综合久久| 夜夜资源站| 色五月综合| 日本网站久久| 99热碰碰热| 天天婷婷操| 丁香五月天成人网站| 91久久99久久91熟女精品| 无码AV免费精品一区二区三区| 丁香五月婷婷综合激情啪啪啪| 五月丁香少妇| 五月天天天综合| 999热成人在线综合网| 黄色一级影片| 强壮公让我夜夜高潮A片视频| 丁香五月婷婷激情蜜桃| 日韩啪啪网| 丁香欧美| 日本一级| 久久久久久五月天| 91ncm视频| 91dy.av| 婷婷激情视频| 丁香五月天操B| 久久五月网| 色五月色五天色情网| 五月久久婷婷丁香| 久久无码成人| 亚洲啪啪啪啪| 九一99| www.99热| 激情五月天99色| 五月婷婷色丁香| 超碰免费大香蕉| 色五月婷婷在线观看第一页舔| 久久久99久久| 日本 @ va 免费| www色色com| 成人在线日韩欧美| 五月丁香在线婷婷蜜桃| 成人国产综合| 31色区视频免费看| 激情五月图| 九九综合色综合| 丁香五月丐人妻| 另类图片五月激情| 色五月婷婷成人视频| 亚洲第一综合| 国产视频色色色色色色色| 激情婷婷丁香五月天| 久久视频这里99| 伊人综合网站| 久久人操| 五月丁香六月婷婷网| 性av| 五月丁香成人网| 综合五月天| 永久天堂日本| 色五月婷婷大| 色婷五月| 丁香五月婷婷超碰在线| 天天日天天干天天操| 色综合77777| 婷婷五月天亚洲天堂| 色色色色色色色色网站| 殴美日韩成人| 直接看的AV网站| 激情内射人妻1区2区3区| 婷婷丁香五月亚洲欧美| 91操在线视频| 亚洲另类av| 色吧五月婷婷| 日韩AC在线免费观看| 欧美色小说婷婷| 一本大道嫩草AV无码专区| 色婷婷XXXXX| 日韩无码成人电影| 色婷婷www| 97色永久免费视频| 亚洲天堂无码| 玖玖婷婷五月天| 99人人干人人操| 国产精品日韩十五区| 色图亚洲91| 在线观看玖玖资源免费观看| 国产肥白大熟妇BBBB视频| 无码天天操| 无遮挡国产高潮视频免费观看| 色色99色色| 婷色五月天| 都市激情蜜桃婷婷五月天| AVDV久久| 亚洲天堂AV免费片| 国产精品久久久久久久久久| 热99视频精品| 色偷偷AV亚洲男人的天堂| 婷婷五月开心中文字幕色| 亚洲乱码日产精品BD| 97色伦另类图片小说视频 | 伊人五月婷婷| 91啪啪视频| 国产片天天爽夜夜爽|