国产精品久久久aaaa,日日干夜夜操天天插,亚洲乱熟女香蕉一区二区三区少妇,99精品国产高清一区二区三区,国产成人精品一区二区色戒,久久久国产精品成人免费,亚洲精品毛片久久久久,99久久婷婷国产综合精品电影,国产一区二区三区任你鲁

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

Flutter 組件: Autocomplete 自動填充 | 開發者說·DTalk

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

掃碼添加小助手

加入工程師交流群

本文原作者: 張風捷特烈,原文發布于: 編程之王


簡單來說,Autocomplete 意為自動填充。其作用就是在輸入時,進行關鍵字聯想。在輸入框下方展示列表,如下所示: 注意,這是目前 Flutter 框架內部的組件,非三方組件。目前已收錄入 FlutterUnit,下面效果的源碼詳見之,大家可以更新查看體驗:

FlutterUnit 中

輸入時聯想效果

下面是動態搜索的效果展示:



Autocomplete 組件最簡代碼


我們先一步步來了解 Autocomplete 組件,先實現如下的最簡代碼:

使用 Autocomplete 時,必須提供的是 optionsBuilder 參數,另外可以通過 onSelected 回調來監聽選中的條目。


Autocomplete(
optionsBuilder:buildOptions,
onSelected:onSelected,
)

optionsBuilder 是一個 AutocompleteOptionsBuilder 類型的函數,從下面的定義中可以發現,該函數會回調 TextEditingValue 對象,且返回 FutureOr>。這說明這個函數是一個異步函數,我們可以在此進行網絡請求,數據庫查詢等工作,來返回一個 Iterable 的可迭代對象。


用腳指頭想一下也知道,這個可迭代對象,就決定著輸入框下面的聯想詞是哪些。
finalAutocompleteOptionsBuilderoptionsBuilder;


typedefAutocompleteOptionsBuilder=
FutureOr>Function(TextEditingValuetextEditingValue);

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


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

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



自定義 Autocomplete 組件內容


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


Autocomplete 中提供了 fieldViewBuilderoptionsViewBuilder 分別用于構造輸入框浮層面板

如下,代碼中通過 _buildOptionsView_buildFieldView 進行相應組件構造:
Autocomplete(
optionsBuilder:buildOptions,
onSelected:onSelected,
optionsViewBuilder:_buildOptionsView,
fieldViewBuilder:_buildFieldView,
);


如下是 _buildOptionsView 方法的實現,其中會回調 onSelected 回調函數,和 options 數據,我們需要做的就是依靠數據,構建組件進行展示即可。另外,默認浮層面板和輸入框底部平齊,可以通過 Padding 進行下移。另外,由于是浮層,展示文字時,上面需要嵌套 Material 組件。

至于高亮某個關鍵字,下面是我封裝的一個小方法,拿來即用:
---->[高亮某些文字]----
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);
}


另外,對于輸入框的構建,通過如下的 _buildFieldView 實現,其中有 _controller 記錄一下 TextEditingController,是因為 optionsViewBuilder 回調中并沒有回調輸入的 arg 字符,所以想要輸入的關鍵字高亮,只能出此下策。這樣,在 TextFormField 構建時,您可以指定自己需要的裝飾。

到此,我們就實現了上面,輸入過程中,浮層面板內容關鍵字高亮顯示的效果。



關于Autocomplete 中的泛型


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

先定義一個數據類 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 中,回調的就是 User 的可迭代對象。如下,封裝一個 _UserItem 組件,對條目進行顯示。



Autocomplete 源碼簡看


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

我們先看一下 AutocompleteoptionsViewBuilder 提供的默認顯示,其返回的是 _AutocompleteOptions 組件。如下,其實和我們自己實現的也沒有太大的區別,只是個默認存在,方便使用的小玩意而已。

另外,對于輸入框的構建,使用 _defaultFieldViewBuilder 靜態方法完成。

該方法,返回 _AutocompleteField 組件,本質上也就是構建了一個 TextFormField 組件。


Autocomplete 來說,只是 RawAutocomplete 套了個馬甲,本質上的功能還是在 RawAutocomplete 的狀態類中完成的。如下是 _RawAutocompleteState 的部分代碼,可以看出這里的浮層面板,是通過 Overlay 實現的,另外通過 CompositedTransformTargetCompositedTransformFollower 對浮層進行定位。

那本文就這樣,如果想簡單地實現搜索聯想詞,Autocomplete 是一個很不錯的選擇。




長按右側二維碼

查看更多開發者精彩分享




"開發者說·DTalk" 面向中國開發者們征集 Google 移動應用 (apps & games)?相關的產品/技術內容。歡迎大家前來分享您對移動應用的行業洞察或見解、移動開發過程中的心得或新發現、以及應用出海的實戰經驗總結和相關產品的使用反饋等。我們由衷地希望可以給這些出眾的中國開發者們提供更好展現自己、充分發揮自己特長的平臺。我們將通過大家的技術內容著重選出優秀案例進行谷歌開發技術專家 (GDE)的推薦。



?點擊屏末||即刻報名參與"開發者說·DTalk"





原文標題:Flutter 組件: Autocomplete 自動填充 | 開發者說·DTalk

文章出處:【微信公眾號:谷歌開發者】歡迎添加關注!文章轉載請注明出處。

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 谷歌
    +關注

    關注

    27

    文章

    6254

    瀏覽量

    111404

原文標題:Flutter 組件: Autocomplete 自動填充 | 開發者說·DTalk

文章出處:【微信號:Google_Developers,微信公眾號:谷歌開發者】歡迎添加關注!文章轉載請注明出處。

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

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    2025華為開發者大賽暨開發者年度會議成功舉辦

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

    2025開源鴻蒙開發者激勵計劃正式啟動

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

    Flutter 移動端開發:集成淘寶 API 實現商品數據實時展示 APP

    在電商蓬勃發展的當下,移動端購物成為主流趨勢。對于開發者而言,利用 Flutter 構建一個能夠實時展示淘寶商品數據的 APP,既能滿足用戶便捷獲取商品信息的需求,也能為電商業務拓展新的渠道
    的頭像 發表于 11-13 09:36 ?369次閱讀

    元服務發布配置開發者服務信息

    您作為開發者的相關信息將面向元服務發布區域的用戶公開,其中客服聯系方式可能會提供給用戶,用于咨詢相關問題。 登錄AppGallery Connect,點擊“APP與元服務”。 選擇要發布的元服務
    發表于 10-31 17:58

    2025開放原子開發者大會11月啟幕

    開發者年度盛會即將登場!2025開放原子開發者大會將于11月21-22日,在北京北人亦創國際會展中心盛大召開。大會以“一切為了開發者”為主題,匯聚全球開源智慧——國內外優秀開發者、學術
    的頭像 發表于 10-24 14:05 ?960次閱讀

    NVIDIA DRIVE AGX Thor開發者套件重磅發布

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

    曙光網絡SugonRI開發者社區正式上線

    在人工智能與工業深度融合的大潮中,工業軟件正在成為推動產業升級的關鍵引擎。為了讓更多開發者快速掌握工業級編程技術、共享行業實踐成果,曙光網絡正式推出開發者社區——曙睿(SugonRI)開發者網站
    的頭像 發表于 09-04 09:58 ?958次閱讀

    Android Studio中的Gemini全面支持Dart和Flutter開發

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

    矽速科技正式入駐 RuyiSDK 開發者社區,共建 RISC-V 開發者生態!

    近日,深圳矽速科技正式入駐RuyiSDK開發者社區,攜手社區共同推動RISC-V技術的發展與廣泛應用,為開發者提供一個更加便捷高效的開發環境。關于RuyiSDKRuyiSDK是中國科學院軟件研究所
    的頭像 發表于 07-10 11:00 ?1171次閱讀
    矽速科技正式入駐 RuyiSDK <b class='flag-5'>開發者</b>社區,共建 RISC-V <b class='flag-5'>開發者</b>生態!

    HDC 2025開發者主題演講精彩回顧

    日前,華為開發者大會(HDC 2025)進入第二天,行業領袖、技術專家、全球開發者齊聚現場,共同見證這場科技盛會。在開發者主題演講中,華為技術專家深入解析HarmonyOS的最新技術、體驗創新以及
    的頭像 發表于 07-09 11:20 ?1314次閱讀

    華為正式啟動HarmonyOS 6開發者Beta

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

    使用 Flutter SDK 3.27.4構建HarmonyOS應用

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

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

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

    全志科技亮相OpenHarmony開發者大會2025

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

    潤和軟件旗下潤開鴻亮相開源鴻蒙開發者大會2025

    近日,開源鴻蒙開發者大會2025(OHDC.2025)于深圳再啟新篇,會上正式發布了開源鴻蒙5.1 Release版本,并進行開源鴻蒙應用技術組件共建啟動等重要儀式,面向開發者和生態伙伴全面呈現了“Powered by Open
    的頭像 發表于 06-03 16:22 ?1633次閱讀