日B视频 亚洲,啪啪啪网站一区二区,91色情精品久久,日日噜狠狠色综合久,超碰人妻少妇97在线,999青青视频,亚洲一区二卡,让本一区二区视频,日韩网站推荐

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

Flutter 組件: Autocomplete 自動(dòng)填充 | 開發(fā)者說·DTalk

谷歌開發(fā)者 ? 來源:未知 ? 2022-11-10 11:30 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

本文原作者: 張風(fēng)捷特烈,原文發(fā)布于: 編程之王


簡(jiǎn)單來說,Autocomplete 意為自動(dòng)填充。其作用就是在輸入時(shí),進(jìn)行關(guān)鍵字聯(lián)想。在輸入框下方展示列表,如下所示: 注意,這是目前 Flutter 框架內(nèi)部的組件,非三方組件。目前已收錄入 FlutterUnit,下面效果的源碼詳見之,大家可以更新查看體驗(yàn):

FlutterUnit 中

輸入時(shí)聯(lián)想效果

下面是動(dòng)態(tài)搜索的效果展示:



Autocomplete 組件最簡(jiǎn)代碼


我們先一步步來了解 Autocomplete 組件,先實(shí)現(xiàn)如下的最簡(jiǎn)代碼:

使用 Autocomplete 時(shí),必須提供的是 optionsBuilder 參數(shù),另外可以通過 onSelected 回調(diào)來監(jiān)聽選中的條目。


Autocomplete(
optionsBuilder:buildOptions,
onSelected:onSelected,
)

optionsBuilder 是一個(gè) AutocompleteOptionsBuilder 類型的函數(shù),從下面的定義中可以發(fā)現(xiàn),該函數(shù)會(huì)回調(diào) TextEditingValue 對(duì)象,且返回 FutureOr>。這說明這個(gè)函數(shù)是一個(gè)異步函數(shù),我們可以在此進(jìn)行網(wǎng)絡(luò)請(qǐng)求,數(shù)據(jù)庫(kù)查詢等工作,來返回一個(gè) Iterable 的可迭代對(duì)象。


用腳指頭想一下也知道,這個(gè)可迭代對(duì)象,就決定著輸入框下面的聯(lián)想詞是哪些。
finalAutocompleteOptionsBuilderoptionsBuilder;


typedefAutocompleteOptionsBuilder=
FutureOr>Function(TextEditingValuetextEditingValue);

比如下面通過 searchByArgs 模擬網(wǎng)絡(luò)請(qǐng)求,通過 args 參數(shù)搜索數(shù)據(jù):
FutureString>> searchByArgs(String args) async{
//模擬網(wǎng)絡(luò)請(qǐng)求
awaitFuture.delayed(constDuration(milliseconds:200));
constList<String>data=[
'toly','toly49','toly42','toly56',
'card','ls','alex','fansha',
];
returndata.where((Stringname)=>name.contains(args));
}


這樣,buildOptions 的邏輯如下,這就完成了輸入--> 搜索 --> 展示聯(lián)想詞的流程。這也是 Autocomplete 組件最簡(jiǎn)單的使用。

FutureString>> buildOptions( TextEditingValue textEditingValue ) async {
if(textEditingValue.text==''){
returnconstIterable<String>.empty();
}
returnsearchByArgs(textEditingValue.text);
}



自定義 Autocomplete 組件內(nèi)容


其實(shí)上面那樣的默認(rèn)樣式很丑,而且沒有提供直接的屬性設(shè)置樣式。所以了解如何自定義是非常關(guān)鍵的,否則只是一個(gè)玩具罷了。如下,我們先來實(shí)現(xiàn)搜索高亮顯示的自定義,其中也包括對(duì)輸入框的自定義。


Autocomplete 中提供了 fieldViewBuilderoptionsViewBuilder 分別用于構(gòu)造輸入框浮層面板。

如下,代碼中通過 _buildOptionsView_buildFieldView 進(jìn)行相應(yīng)組件構(gòu)造:
Autocomplete(
optionsBuilder:buildOptions,
onSelected:onSelected,
optionsViewBuilder:_buildOptionsView,
fieldViewBuilder:_buildFieldView,
);


如下是 _buildOptionsView 方法的實(shí)現(xiàn),其中會(huì)回調(diào) onSelected 回調(diào)函數(shù),和 options 數(shù)據(jù),我們需要做的就是依靠數(shù)據(jù),構(gòu)建組件進(jìn)行展示即可。另外,默認(rèn)浮層面板和輸入框底部平齊,可以通過 Padding 進(jìn)行下移。另外,由于是浮層,展示文字時(shí),上面需要嵌套 Material 組件。

至于高亮某個(gè)關(guān)鍵字,下面是我封裝的一個(gè)小方法,拿來即用:
---->[高亮某些文字]----
finalTextStylelightTextStyle=constTextStyle(
color:Colors.blue,
fontWeight:FontWeight.bold,
);
InlineSpanformSpan(Stringsrc,Stringpattern){
Listspan=[];
Listparts=src.split(pattern);
if(parts.length>1){
for(inti=0;i
span.add(TextSpan(text:parts[i]));
if(i!=parts.length-1){
span.add(TextSpan(text:pattern,style:lightTextStyle));
}
}
}else{
span.add(TextSpan(text:src));
}
returnTextSpan(children:span);
}


另外,對(duì)于輸入框的構(gòu)建,通過如下的 _buildFieldView 實(shí)現(xiàn),其中有 _controller 記錄一下 TextEditingController,是因?yàn)?optionsViewBuilder 回調(diào)中并沒有回調(diào)輸入的 arg 字符,所以想要輸入的關(guān)鍵字高亮,只能出此下策。這樣,在 TextFormField 構(gòu)建時(shí),您可以指定自己需要的裝飾。

到此,我們就實(shí)現(xiàn)了上面,輸入過程中,浮層面板內(nèi)容關(guān)鍵字高亮顯示的效果。



關(guān)于Autocomplete 中的泛型


泛型的作用非常明顯,它最主要的是對(duì)浮層面板的構(gòu)建,如果浮層中的條目不止是 String,我們就需要使用泛型,來提供某個(gè)的數(shù)據(jù)類型。比如下面的效果,其中浮層面板的條目是可以顯示更多的信息:

先定義一個(gè)數(shù)據(jù)類 User,記錄信息:
class User {
finalStringname;
finalboolman;
finalStringimage;


constUser(this.name,this.man,this.image);


@override
StringtoString(){
return'User{name:$name,man:$man,image:$image}';
}
}


然后在 Autocomplete 的泛型中使用 User 即可。

這樣在 _buildOptionsView 中,回調(diào)的就是 User 的可迭代對(duì)象。如下,封裝一個(gè) _UserItem 組件,對(duì)條目進(jìn)行顯示。



Autocomplete 源碼簡(jiǎn)看


Autocomplete 本質(zhì)上依賴于 RawAutocomplete 組件進(jìn)行構(gòu)建,可見它是一層簡(jiǎn)單的封裝,簡(jiǎn)化使用。為我們提供了默認(rèn)的 optionsViewBuilderfieldViewBuilder,顯示一個(gè)很丑的界面。也就是說,如果您了解如何定制這兩部分內(nèi)容,您也就會(huì)了 RawAutocomplete 組件。

我們先看一下 Autocomplete 對(duì) optionsViewBuilder 提供的默認(rèn)顯示,其返回的是 _AutocompleteOptions 組件。如下,其實(shí)和我們自己實(shí)現(xiàn)的也沒有太大的區(qū)別,只是個(gè)默認(rèn)存在,方便使用的小玩意而已。

另外,對(duì)于輸入框的構(gòu)建,使用 _defaultFieldViewBuilder 靜態(tài)方法完成。

該方法,返回 _AutocompleteField 組件,本質(zhì)上也就是構(gòu)建了一個(gè) TextFormField 組件。


對(duì) Autocomplete 來說,只是 RawAutocomplete 套了個(gè)馬甲,本質(zhì)上的功能還是在 RawAutocomplete 的狀態(tài)類中完成的。如下是 _RawAutocompleteState 的部分代碼,可以看出這里的浮層面板,是通過 Overlay 實(shí)現(xiàn)的,另外通過 CompositedTransformTargetCompositedTransformFollower 對(duì)浮層進(jìn)行定位。

那本文就這樣,如果想簡(jiǎn)單地實(shí)現(xiàn)搜索聯(lián)想詞,Autocomplete 是一個(gè)很不錯(cuò)的選擇。




長(zhǎng)按右側(cè)二維碼

查看更多開發(fā)者精彩分享




"開發(fā)者說·DTalk" 面向中國(guó)開發(fā)者們征集 Google 移動(dòng)應(yīng)用 (apps & games)?相關(guān)的產(chǎn)品/技術(shù)內(nèi)容。歡迎大家前來分享您對(duì)移動(dòng)應(yīng)用的行業(yè)洞察或見解、移動(dòng)開發(fā)過程中的心得或新發(fā)現(xiàn)、以及應(yīng)用出海的實(shí)戰(zhàn)經(jīng)驗(yàn)總結(jié)和相關(guān)產(chǎn)品的使用反饋等。我們由衷地希望可以給這些出眾的中國(guó)開發(fā)者們提供更好展現(xiàn)自己、充分發(fā)揮自己特長(zhǎng)的平臺(tái)。我們將通過大家的技術(shù)內(nèi)容著重選出優(yōu)秀案例進(jìn)行谷歌開發(fā)技術(shù)專家 (GDE)的推薦。



?點(diǎn)擊屏末||即刻報(bào)名參與"開發(fā)者說·DTalk"





原文標(biāo)題:Flutter 組件: Autocomplete 自動(dòng)填充 | 開發(fā)者說·DTalk

文章出處:【微信公眾號(hào):谷歌開發(fā)者】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 谷歌
    +關(guān)注

    關(guān)注

    27

    文章

    6259

    瀏覽量

    112004

原文標(biāo)題:Flutter 組件: Autocomplete 自動(dòng)填充 | 開發(fā)者說·DTalk

文章出處:【微信號(hào):Google_Developers,微信公眾號(hào):谷歌開發(fā)者】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    2025華為開發(fā)者大賽暨開發(fā)者年度會(huì)議成功舉辦

    12月27日-12月28日,以“成就AI原生時(shí)代先鋒開發(fā)者”為主題的2025華為開發(fā)者大賽暨開發(fā)者年度會(huì)議在上海華為練秋湖研發(fā)中心舉辦。本次會(huì)議旨在匯聚先鋒開發(fā)力量,搭建開放共贏的生態(tài)
    的頭像 發(fā)表于 12-31 13:32 ?1085次閱讀

    2025開源鴻蒙開發(fā)者激勵(lì)計(jì)劃正式啟動(dòng)

    11月21日,2025開放原子開發(fā)者大會(huì)盛大啟幕,聚焦“AI共智,開源共享”主題,吸引了來自全球的開發(fā)者、企業(yè)技術(shù)領(lǐng)袖、社區(qū)維護(hù)及高校科研力量參會(huì)。作為大會(huì)的重要組成部分,開源鴻蒙技術(shù)分論壇同期
    的頭像 發(fā)表于 11-27 14:44 ?856次閱讀

    Flutter 移動(dòng)端開發(fā):集成淘寶 API 實(shí)現(xiàn)商品數(shù)據(jù)實(shí)時(shí)展示 APP

    在電商蓬勃發(fā)展的當(dāng)下,移動(dòng)端購(gòu)物成為主流趨勢(shì)。對(duì)于開發(fā)者而言,利用 Flutter 構(gòu)建一個(gè)能夠?qū)崟r(shí)展示淘寶商品數(shù)據(jù)的 APP,既能滿足用戶便捷獲取商品信息的需求,也能為電商業(yè)務(wù)拓展新的渠道
    的頭像 發(fā)表于 11-13 09:36 ?526次閱讀

    元服務(wù)發(fā)布配置開發(fā)者服務(wù)信息

    您作為開發(fā)者的相關(guān)信息將面向元服務(wù)發(fā)布區(qū)域的用戶公開,其中客服聯(lián)系方式可能會(huì)提供給用戶,用于咨詢相關(guān)問題。 登錄AppGallery Connect,點(diǎn)擊“APP與元服務(wù)”。 選擇要發(fā)布的元服務(wù)
    發(fā)表于 10-31 17:58

    2025開放原子開發(fā)者大會(huì)11月啟幕

    開發(fā)者年度盛會(huì)即將登場(chǎng)!2025開放原子開發(fā)者大會(huì)將于11月21-22日,在北京北人亦創(chuàng)國(guó)際會(huì)展中心盛大召開。大會(huì)以“一切為了開發(fā)者”為主題,匯聚全球開源智慧——國(guó)內(nèi)外優(yōu)秀開發(fā)者、學(xué)術(shù)
    的頭像 發(fā)表于 10-24 14:05 ?1155次閱讀

    NVIDIA DRIVE AGX Thor開發(fā)者套件重磅發(fā)布

    這款由 NVIDIA DriveOS 7 驅(qū)動(dòng)的開發(fā)者套件能夠幫助開發(fā)者們打造出更安全的智能汽車和交通解決方案。
    的頭像 發(fā)表于 09-04 11:20 ?1640次閱讀

    曙光網(wǎng)絡(luò)SugonRI開發(fā)者社區(qū)正式上線

    在人工智能與工業(yè)深度融合的大潮中,工業(yè)軟件正在成為推動(dòng)產(chǎn)業(yè)升級(jí)的關(guān)鍵引擎。為了讓更多開發(fā)者快速掌握工業(yè)級(jí)編程技術(shù)、共享行業(yè)實(shí)踐成果,曙光網(wǎng)絡(luò)正式推出開發(fā)者社區(qū)——曙睿(SugonRI)開發(fā)者網(wǎng)站
    的頭像 發(fā)表于 09-04 09:58 ?1184次閱讀

    Android Studio中的Gemini全面支持Dart和Flutter開發(fā)

    在 Android Studio 中創(chuàng)建 Android 應(yīng)用的 Flutter 開發(fā)者將迎來一次重大的飛躍: Android Studio 中的 Gemini 已全面支持 Dart
    的頭像 發(fā)表于 08-06 13:52 ?1541次閱讀
    Android Studio中的Gemini全面支持Dart和<b class='flag-5'>Flutter</b><b class='flag-5'>開發(fā)</b>

    矽速科技正式入駐 RuyiSDK 開發(fā)者社區(qū),共建 RISC-V 開發(fā)者生態(tài)!

    近日,深圳矽速科技正式入駐RuyiSDK開發(fā)者社區(qū),攜手社區(qū)共同推動(dòng)RISC-V技術(shù)的發(fā)展與廣泛應(yīng)用,為開發(fā)者提供一個(gè)更加便捷高效的開發(fā)環(huán)境。關(guān)于RuyiSDKRuyiSDK是中國(guó)科學(xué)院軟件研究所
    的頭像 發(fā)表于 07-10 11:00 ?1425次閱讀
    矽速科技正式入駐 RuyiSDK <b class='flag-5'>開發(fā)者</b>社區(qū),共建 RISC-V <b class='flag-5'>開發(fā)者</b>生態(tài)!

    HDC 2025開發(fā)者主題演講精彩回顧

    日前,華為開發(fā)者大會(huì)(HDC 2025)進(jìn)入第二天,行業(yè)領(lǐng)袖、技術(shù)專家、全球開發(fā)者齊聚現(xiàn)場(chǎng),共同見證這場(chǎng)科技盛會(huì)。在開發(fā)者主題演講中,華為技術(shù)專家深入解析HarmonyOS的最新技術(shù)、體驗(yàn)創(chuàng)新以及
    的頭像 發(fā)表于 07-09 11:20 ?1508次閱讀

    華為正式啟動(dòng)HarmonyOS 6開發(fā)者Beta

    在2025年華為開發(fā)者大會(huì)(HDC)上,華為正式啟動(dòng)HarmonyOS 6開發(fā)者Beta,并全面展示一年多以來與合作伙伴共建鴻蒙生態(tài)的創(chuàng)新成果。
    的頭像 發(fā)表于 06-24 15:42 ?1038次閱讀

    使用 Flutter SDK 3.27.4構(gòu)建HarmonyOS應(yīng)用

    /flutter_fluttergit checkout -b oh-3.27.4-dev origin/oh-3.27.4-dev ? 下載下來之后就可以配置開發(fā)環(huán)境啦。 配置開發(fā)環(huán)境 配置好后
    的頭像 發(fā)表于 06-11 09:15 ?1147次閱讀

    Flutter on Raspberry Pi:從入門到精通的完整指南!

    Flutter。通過遵循本文中概述的步驟,你將獲得在樹莓派上設(shè)置Flutter的知識(shí)和信心。無論你是初學(xué)者還是經(jīng)驗(yàn)豐富的Flutter開發(fā)者,本指南都將確保你對(duì)過程有清晰的
    的頭像 發(fā)表于 06-06 15:37 ?1758次閱讀
    <b class='flag-5'>Flutter</b> on Raspberry Pi:從入門到精通的完整指南!

    全志科技亮相OpenHarmony開發(fā)者大會(huì)2025

    近日,OpenHarmony開發(fā)者大會(huì) 2025(OHDC.2025,以下簡(jiǎn)稱“大會(huì)”)在深圳舉辦。大會(huì)正式發(fā)布了開源鴻蒙5.1 Release版本,舉行了“開源鴻蒙應(yīng)用技術(shù)組件共建啟動(dòng)、開源鴻蒙
    的頭像 發(fā)表于 06-04 09:16 ?2432次閱讀
    全志科技亮相OpenHarmony<b class='flag-5'>開發(fā)者</b>大會(huì)2025

    潤(rùn)和軟件旗下潤(rùn)開鴻亮相開源鴻蒙開發(fā)者大會(huì)2025

    近日,開源鴻蒙開發(fā)者大會(huì)2025(OHDC.2025)于深圳再啟新篇,會(huì)上正式發(fā)布了開源鴻蒙5.1 Release版本,并進(jìn)行開源鴻蒙應(yīng)用技術(shù)組件共建啟動(dòng)等重要儀式,面向開發(fā)者和生態(tài)伙伴全面呈現(xiàn)了“Powered by Open
    的頭像 發(fā)表于 06-03 16:22 ?1786次閱讀
    嵊州市| 香港| 龙南县| 祁东县| 柘城县| 通海县| 柳河县| 康乐县| 富蕴县| 石柱| 巴中市| 辰溪县| 张掖市| 莱芜市| 浑源县| 红河县| 达州市| 胶南市| 鸡东县| 尼玛县| 鄂托克前旗| 武山县| 明星| 疏勒县| 南昌县| 绵竹市| 沙湾县| 清水河县| 司法| 舟山市| 朝阳区| 蒙阴县| 普洱| 景泰县| 中西区| 元江| 砚山县| 会泽县| 民县| 陵川县| 南丹县|