欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

flutter全文搜索,flutter 搜索

Flutter 實(shí)現(xiàn)高亮顯示搜索結(jié)果的文字

一:設(shè)計(jì)思路

芙蓉網(wǎng)站制作公司哪家好,找成都創(chuàng)新互聯(lián)!從網(wǎng)頁(yè)設(shè)計(jì)、網(wǎng)站建設(shè)、微信開發(fā)、APP開發(fā)、成都響應(yīng)式網(wǎng)站建設(shè)公司等網(wǎng)站項(xiàng)目制作,到程序開發(fā),運(yùn)營(yíng)維護(hù)。成都創(chuàng)新互聯(lián)自2013年起到現(xiàn)在10年的時(shí)間,我們擁有了豐富的建站經(jīng)驗(yàn)和運(yùn)維經(jīng)驗(yàn),來(lái)保證我們的工作的順利進(jìn)行。專注于網(wǎng)站建設(shè)就選成都創(chuàng)新互聯(lián)

因?yàn)橐谝恍袃?nèi)容中顯示不同顏色的文本,所以要用到 RichText 組件;

如果沒(méi)有找到要高亮顯示的文本則返回原字符串;

如果找到了要高亮顯示的文本,則從字符串左邊開始截取,當(dāng)出現(xiàn)第一個(gè)要高亮顯示的文本時(shí),把此時(shí)已經(jīng)出現(xiàn)的普通文本和高亮顯示的文本都加入到一個(gè) ListTextSpan 的數(shù)組中,如果字符串中有多個(gè)符合條件的文本,重復(fù)前面出現(xiàn)第一個(gè)要高亮顯示的文本時(shí)的步驟即可。

flutter源碼系列 PageView源碼分析以及監(jiān)聽事件

最近一個(gè)項(xiàng)目要實(shí)現(xiàn)可以無(wú)限循環(huán)的PageView,主要思路是在初始化pageview的list的時(shí)候在開始和結(jié)尾多加一個(gè)結(jié)尾和開頭的widget,當(dāng)滑動(dòng)到開頭和結(jié)尾的時(shí)候手動(dòng)進(jìn)行頁(yè)面的切換,詳細(xì)可以搜索pageview無(wú)限輪播。

這種方法有一個(gè)要點(diǎn)就是要維護(hù)兩個(gè)索引,一個(gè)是內(nèi)部list的索引,一個(gè)是外部顯示的索引,由于list的容量是比顯示的數(shù)量多2的,所以如果要在外部進(jìn)行一些比如指示器或者計(jì)時(shí)器功能要進(jìn)行和頁(yè)面同步顯示或者切換頁(yè)面操作時(shí),需要將顯示的索引轉(zhuǎn)換成list的索引。

不過(guò)網(wǎng)上說(shuō)的都是一些比較簡(jiǎn)單的實(shí)現(xiàn),看到比較多的就是當(dāng)滑動(dòng)到要手動(dòng)切換的時(shí)候進(jìn)行一個(gè)時(shí)延,這樣可以避免直接切換頁(yè)面造成的卡頓和跳動(dòng)現(xiàn)象。但是存在一個(gè)問(wèn)題,如果要同時(shí)實(shí)現(xiàn)一個(gè)跟隨頁(yè)面切換的指示器,就會(huì)出現(xiàn)當(dāng)頁(yè)面切換過(guò)去之后指示器才會(huì)跟著過(guò)去,因?yàn)轫?yè)面切換的時(shí)候執(zhí)行了時(shí)延,而時(shí)延之后才會(huì)真正改變索引,此時(shí)才會(huì)setstate,之后指示器才能響應(yīng)到索引的切換,但是如果在時(shí)延之前就切換的話又會(huì)出現(xiàn)指示器先行的情況。因此這種方法其實(shí)是存在一些問(wèn)題的。

所以解決這個(gè)問(wèn)題的關(guān)鍵在于如何進(jìn)行頁(yè)面切換的判斷。這里可以有兩種思路實(shí)現(xiàn),第一種是實(shí)現(xiàn)viewpage的onpagechanged方法,在里面進(jìn)行邏輯的判斷,然后用controller來(lái)進(jìn)行頁(yè)面跳轉(zhuǎn),不過(guò)這種方法存在當(dāng)controller跳轉(zhuǎn)的時(shí)候又會(huì)回調(diào)onpagechanged,所以就會(huì)出現(xiàn)多次對(duì)索引不必要操作,而且如果有比如計(jì)時(shí)器等額外的功能的話可能不方便將頁(yè)面邏輯分開,而且依舊無(wú)法解決指示器延遲問(wèn)題,同時(shí)也很難進(jìn)行細(xì)粒度的操作。

第二種方法我們就要去看pageview的源碼了,從源碼的角度來(lái)解決問(wèn)題才是正確的方法。首先我們點(diǎn)進(jìn)去pageview的源碼

看到這里其實(shí)已經(jīng)有一些思路了,我們之前難點(diǎn)在于重寫了onpagechanged方法導(dǎo)致問(wèn)題無(wú)法很好的解決,現(xiàn)在我們找到了onpagechanged調(diào)用的地方,只要找辦法避免掉就可以實(shí)現(xiàn)了。

當(dāng)然這里我們要說(shuō)到NotificationListener,以及flutter對(duì)應(yīng)的冒泡事件傳輸機(jī)制,這里大家可以去看看這篇 文章 。

我來(lái)總結(jié)一下,其實(shí)就是flutter對(duì)于notification這個(gè)組件,有一中事件規(guī)則叫冒泡傳遞,底層的notification如果在它的 onNotification寫的邏輯中返回是false以及它不是根結(jié)點(diǎn),就會(huì)去向上遍歷尋找它的祖先notification組件,知道遇到root節(jié)點(diǎn)或者某一個(gè)返回true,則事件傳遞結(jié)束。

而且在onNotification中可以對(duì)多種事件進(jìn)行監(jiān)聽和處理,所以我們可以把對(duì)viewpage頁(yè)面跳轉(zhuǎn)對(duì)索引處理的邏輯寫在這里,而且我們可以分別處理比如滑動(dòng)開始的start事件和結(jié)束的end事件,分別進(jìn)行細(xì)粒度的邏輯的處理,這樣就可以在外部進(jìn)行操作和別的功能實(shí)現(xiàn)了。

因此不僅無(wú)限輪播事件可以通過(guò)這種方法來(lái)解決,如果有其他的操作也可以這樣進(jìn)行處理,而且因?yàn)槲覀儧](méi)有傳入onpagechanged方法,所以不存在多次調(diào)用的問(wèn)題,pageview那里判斷onpagechanged是null方法就不會(huì)進(jìn)去了,會(huì)直接我們寫在pageview外面的notification的邏輯。

最后的結(jié)構(gòu)大概這樣

Flutter 網(wǎng)絡(luò)請(qǐng)求類封裝及搜索框?qū)崿F(xiàn)

在 Flutter 中定時(shí)器相對(duì) iOS 來(lái)說(shuō)比較好的一點(diǎn)就是定時(shí)器事件的執(zhí)行不會(huì)受視圖拖拽的影響,不涉及到模式。但是需要注意一點(diǎn)的是在頁(yè)面離開的時(shí)候要對(duì)定時(shí)器進(jìn)行銷毀。

開始的時(shí)候我們是在頁(yè)面中直接使用三方框架 http 進(jìn)行網(wǎng)絡(luò)的請(qǐng)求,這里不好的一點(diǎn)就是如果將來(lái)我們更換了網(wǎng)絡(luò)請(qǐng)求框架的話,項(xiàng)目中涉及到網(wǎng)絡(luò)的請(qǐng)求的地方都需要改動(dòng),對(duì)項(xiàng)目的影響會(huì)比較大。所以這里我們自己封裝了一個(gè)網(wǎng)絡(luò)請(qǐng)求類,定義自己的網(wǎng)絡(luò)請(qǐng)求方法,即使將來(lái)更換三方框架的話,我們只需要在我們自己網(wǎng)絡(luò)請(qǐng)求類里面更換就好,項(xiàng)目的其他地方不用改動(dòng)。對(duì)網(wǎng)絡(luò)請(qǐng)求進(jìn)行封裝,相信不管是 iOS 項(xiàng)目還是安卓項(xiàng)目肯定也都是這樣做的。

這里我們是基于 Dio 這個(gè)三方框架進(jìn)行封裝的,在 HttpManager 類中我們定義了 Dio 的單例對(duì)象 _dioInstance ,通過(guò)單例方法 _getDioInstance 來(lái)獲取單例對(duì)象。我們定義了 post 跟 get 兩個(gè)靜態(tài)方法,在這兩個(gè)方法中我們都調(diào)用了私有方法 _sendRequest , _sendRequest 方法中通過(guò)該傳入的枚舉參數(shù) HttpMethod 來(lái)區(qū)分 Dio 單例對(duì)象是調(diào)用 get 還是 post 請(qǐng)求。這里需要注意的是方法中一定要使用 async ,返回值前要加 await 。

在聊天頁(yè)面中我們可以看到頂部的搜索框,這個(gè)搜索框是跟列表一起滾動(dòng)的,所以比較好的實(shí)現(xiàn)方式就是把搜索框定義為一個(gè) cell 。其實(shí)這個(gè)搜索框只有點(diǎn)擊事件,點(diǎn)擊之后跳轉(zhuǎn)一個(gè)新的頁(yè)面,所以我們只需要使用小部件來(lái)實(shí)現(xiàn)搜索框的展示就好。搜索框由白色底視圖跟圖片和文本組成,所以這里我們通過(guò) Stack 部件來(lái)實(shí)現(xiàn), children 的第一個(gè)元素為白色底視圖,圖片跟搜索文字用 Row 部件來(lái)實(shí)現(xiàn),圖片跟文字布局左右排列。

Mac--Flutter更換指定版本

類似錯(cuò)誤No named parameter with the name ‘XXXXXX‘問(wèn)題

原因:Flutter版本問(wèn)題

一、回退到指定版本

1、GitHub搜索flutter 點(diǎn)擊進(jìn)入后,選擇tags找到需要的版本點(diǎn)進(jìn)去,如圖:

2、復(fù)制版本號(hào)

cd ?/Users/apple/Documents/flutter ? ?根目錄,同bash_profile中PATH配置保持一致即可。

git reset --hard 3595343e20a61ff16d14e8ecc25f364276bb1b8b

執(zhí)行完成,檢測(cè) flutter --version

執(zhí)行 flutter doctor

????????了

Flutter開發(fā)環(huán)境配置(MAC版)

(該路徑會(huì)有變化,可以關(guān)注Flutter社區(qū),隨時(shí)更新)

Documents為目錄,fluttersdk為sdk文件夾

cd 到對(duì)應(yīng)的項(xiàng)目工程中執(zhí)行命令:

在終端中執(zhí)行 flutter doctor 查看Android和iOS的開發(fā)環(huán)境,監(jiān)測(cè)到依賴若有缺失,會(huì)給出缺失的依賴的安裝結(jié)果,依照提示進(jìn)行安裝即可。

在命令終端執(zhí)行相關(guān)命令:

打開Android Studio應(yīng)用,打開菜單項(xiàng)Preferences Plugins中搜索Flutter插件并點(diǎn)擊install進(jìn)行安裝

打開 VS Code,可點(diǎn)擊 View - Command Palette,搜索flutter并點(diǎn)擊install進(jìn)行安裝

Flutter 開發(fā)筆記

下面這種情況下,為 InkWell 設(shè)置的 splashColor 不會(huì)生效:

需要用 Material 去除背景色,然后將顏色設(shè)置在 InkWell 外部:

在 Dialog builder 中使用 WillPopScope 禁用返回鍵返回:

注意:使用此方法同時(shí)也會(huì)禁用 iOS 上的手勢(shì)滑動(dòng)返回功能,推薦判斷平臺(tái)后再使用。

修改對(duì)話框中的復(fù)選框狀態(tài),最簡(jiǎn)便的方法是通過(guò) Element 中的 markNeedsBuild 方法:

當(dāng)然,更推薦的做法是通過(guò) StatefulBuilder ,然后就可以在 Dialog 中調(diào)用 setState 方法了,不過(guò)在調(diào)用 setState 時(shí)需要判斷 Dialog 是否已經(jīng)關(guān)閉,否則會(huì)造成 setState() called after dispose() 的錯(cuò)誤,可以通過(guò)添加一個(gè)標(biāo)志位來(lái)解決,如下:

在 Web 中加載網(wǎng)絡(luò)圖片有時(shí)會(huì)失敗,遇到這樣的報(bào)錯(cuò): Exception caught by image resource service... ,造成該錯(cuò)誤的原因通常是,圖片跨域了(見 跨域資源共享 )。最簡(jiǎn)單的解決辦法是, 使用 HTML 渲染加載 ,而不是默認(rèn)的 CanvasKit。

Flutter 中所有的 list 默認(rèn)都是沒(méi)有 ScrollBar 的,必須使用 ScrollBar 組件。ScrollBar 組件通過(guò)監(jiān)聽 ScrollView 的 ScrollNotification 來(lái)刷新位置,所以 List 的長(zhǎng)度必須是固定的。

當(dāng)使用 WebView 等高度不定的組件時(shí)會(huì)出現(xiàn)內(nèi)容被截?cái)嗟那闆r,通常可以使用 NestedScrollView 來(lái)解決該問(wèn)題,需要在 WebView 外部嵌套 SingleChildScrollView。

雖然使用了緩存,而且也是用 builder 加載圖片的,但是發(fā)現(xiàn)一個(gè)現(xiàn)象:滑動(dòng)屏幕后圖片短暫消失并重新加載了。圖片高度很高時(shí)這種現(xiàn)象更加明顯,其原因是超出屏幕范圍一定距離的組件被重新渲染了。解決方法是在 ListView 上設(shè)置 cacheExtent 參數(shù):

該參數(shù)的作用是改變超出屏幕高度后繼續(xù)渲染的范圍(以像素為單位),比如設(shè)置成 9999 后意味著超出屏幕 10000 像素以內(nèi)的內(nèi)容都會(huì)被保留下來(lái)。

借助 IntrinsicHeight 組件:

另外,IntrinsicHeight 還可以用于 Dialog 或者 BottomSheet 中,使得其中的元素 顯示內(nèi)在元素的高度 ,從而避免元素因?yàn)榧s束的存在而不顯示或者高度太高(比如在使用了 Column 或者 Row 的時(shí)候)。

在通過(guò) Uri 的 queryParameters 獲取 query 參數(shù)時(shí),發(fā)現(xiàn)有些鏈接會(huì)拋出下面異常:

造成該異常的原因是 Uri 默認(rèn)使用 utf-8 解碼超鏈接字符串,如果鏈接中包含非 utf-8 字符,就會(huì)造成上面的錯(cuò)誤,相關(guān) issue 見: issue #31621 。目前該 issue 處于 open 的狀態(tài),暫時(shí)的解決辦法是,在所有使用到 queryParameter 的地方用 try..catch 捕捉可能拋出的異常。

Flutter 開發(fā)非常依賴各種官方或第三方的插件,而在使用這些插件時(shí)多少都會(huì)遇到一些問(wèn)題,大部分問(wèn)題都可以通過(guò)搜索和查找 issue 來(lái)解決。這里記錄下一些我在使用部分插件時(shí)遇到的問(wèn)題及其解決方法。

目前該庫(kù)沒(méi)有圖片加載完成的回調(diào)(見 issue #545 ),不過(guò)我們可以通過(guò)在 imageBuilder 中來(lái)添加回調(diào):

這是一個(gè)應(yīng)用內(nèi)更新插件,安卓 10 以上安裝時(shí)需要在 manifest 中添加以下內(nèi)容:

目前功能最強(qiáng)大的 WebView 插件,基本能滿足絕大部分移動(dòng)端網(wǎng)頁(yè)加載的需求,而且可定制化程度高。

一般通過(guò) CookieManager 修改 Cookie,攔截請(qǐng)求并修改請(qǐng)求對(duì)象的 Header 不會(huì)生效。

InAppWebViewOptions 的 userAgent 只在 iOS 上生效,而 applicationNameForUserAgent 只在 Android 上生效,所以最好的做法是分平臺(tái)設(shè)置 InAppWebViewOptions ,而且需要注意,由于設(shè)置 userAgent 后會(huì)覆蓋默認(rèn)的 UserAgent,所以如果需要在默認(rèn)的 UserAgent 上添加其它參數(shù),iOS 上需要通過(guò) InAppWebViewController.getDefaultUserAgent() 獲取默認(rèn) UserAgent 參數(shù),而 Android 不需要添加。

如果圖片源或者請(qǐng)求是 http 的,為了在 Android 上正常加載請(qǐng)求,必須在 AndroidInAppWebViewOptions 中將 mixedContentMode 設(shè)置為 AndroidMixedContentMode.MIXED_CONTENT_ALWAYS_ALLOW 。

當(dāng)我們想要設(shè)置全屏圖片的時(shí)候,由于默認(rèn)的 Constraint 會(huì)將圖片居中顯示,所以圖片四周會(huì)留有空隙。為了去除這個(gè)限制,我們需要 Xcode 中打開 LaunchScreen.storyboard,然后在 View Controller 的 View 和 LaunchImage 上的 Safe Area 去掉。

具體設(shè)置方法:右側(cè) Inspector 面板 Show the Size inspector 解選 Layout Margins 中的 Safe Area Relative Margins,拖動(dòng)圖片占滿全屏,然后根據(jù) View Controller Scene 的 Warning,更新 Constraint 就可以了。

在集成某些三方庫(kù)之后,在使用命令行運(yùn)行 iOS 模擬器的時(shí)候可能會(huì)遇到下面這個(gè)報(bào)錯(cuò):

這是因?yàn)?iOS 模擬器未來(lái)將會(huì)兼容 arm64 架構(gòu),但是目前還不支持,所以我們需要修改 Build Setting 使得能夠在 x86_64 的模擬器上運(yùn)行,操作步驟見 這里 。

當(dāng)前題目:flutter全文搜索,flutter 搜索
URL鏈接:http://chinadenli.net/article13/dsesdds.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站營(yíng)銷商城網(wǎng)站用戶體驗(yàn)網(wǎng)站導(dǎo)航品牌網(wǎng)站設(shè)計(jì)外貿(mào)網(wǎng)站建設(shè)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

網(wǎng)站托管運(yùn)營(yíng)