色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

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

    文章

    6192

    瀏覽量

    105909

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

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

收藏 人收藏

    評論

    相關推薦

    開發者的開源鴻蒙故事

    近日,在以“一切為了開發者”為主題的“2024開放原子開發者大會暨首屆開源技術學術大會”上,開源鴻蒙5.0 Release版本正式發布,備受各方關注。該版本在系統完備度、分布式創新、開發者體驗以及系統穩定性等方面均實現了顯著提升
    的頭像 發表于 01-06 10:28 ?155次閱讀

    《HarmonyOS第一課》煥新升級,賦能開發者快速掌握鴻蒙應用開發

    開發輕量型APP或元服務。課程涵蓋Stage模型進階、多線程編程、組件狀態管理等核心技能,讓開發者能獨立完成多個模塊業務及多個子系統等復雜模塊開發與配置工作。 高級課程旨在塑造系統
    發表于 01-02 14:24

    鴻蒙Flutter實戰:14-現有Flutter 項目支持鴻蒙 II

    分別安裝官方的3.22版本,以及鴻蒙社區的 3.22.0 版本 3.搭建 Flutter鴻蒙開發環境 參考文章《鴻蒙Flutter實戰:01-搭建開發環境》 搭建項目架構 創建目錄
    發表于 12-26 14:59

    云端AI開發者工具怎么用

    云端AI開發者工具通常包括代碼編輯器、模型訓練平臺、自動化測試工具、代碼管理工具等。這些工具不僅降低了AI開發的門檻,還極大地提高了開發效率和模型性能。下面,AI部落小編為您介紹云端A
    的頭像 發表于 12-05 13:31 ?171次閱讀

    鴻蒙Flutter實戰:12-使用模擬器開發調試

    前提 開發電腦需為M系列芯片 (ARM架構) 的 Mac 電腦 目前 Flutter 鴻蒙開發,無法使用 X86 架構的模擬器,只能使用 ARM 架構的模擬器** 創建項目 等開發
    發表于 11-10 13:13

    鴻蒙Flutter實戰:11-使用 Flutter SDK 3.22.0

    # 使用 Flutter SDK 3.22.0 ## SDK 安裝 參考[鴻蒙Flutter實戰:01-搭建開發環境]文章的說明,首先安裝 Flutter SDK 3.22.0。
    發表于 11-01 15:03

    鴻蒙Flutter實戰:09-現有Flutter項目支持鴻蒙

    # 鴻蒙Flutter實戰:現有Flutter項目支持鴻蒙 ## 背景 原來使用Flutter開發的項目,需要適配鴻蒙。 ## 環境搭建 見文章[鴻蒙
    發表于 10-23 16:36

    鴻蒙Flutter實戰:07混合開發

    。 其優點是主項目開發者可以不關注Flutter實現,不需要安裝配置Flutter開發環境,缺點是無法及時修改Flutter代碼,也不存在
    發表于 10-23 16:00

    鴻蒙Flutter實戰:06-使用ArkTs開發Flutter鴻蒙插件

    # 使用 ArkTs 開發 Flutter 鴻蒙平臺插件 本文講述如何開發一個 Flutter 鴻蒙插件,如何實現 Flutter 與鴻蒙
    發表于 10-22 21:56

    鴻蒙Flutter實戰:01-搭建開發環境

    Studio\\\\tools\\\\node 管理多個 Flutter 版本 如果在項目開發中,需要使用多個 Flutter 版本,可以考慮使用 fvm 安裝 FVM 使用 fvm 官方
    發表于 10-21 19:35

    KaihongOS 4.1.2開發者預覽版正式上線,誠邀開發者免費試用!

    深開鴻在2024開放原子開源生態大會上正式宣布KaihongOS4.1.2開發者預覽版全面上線,并向全球開發者開放免費下載。作為KaihongOS不斷創新與發展的重要里程碑,此次預覽版為開發者提供了
    的頭像 發表于 09-28 08:07 ?380次閱讀
    KaihongOS 4.1.2<b class='flag-5'>開發者</b>預覽版正式上線,誠邀<b class='flag-5'>開發者</b>免費試用!

    KaihongOS 4.1.2開發者預覽版正式上線,誠邀開發者免費試用!

    今日,深開鴻在2024開放原子開源生態大會上正式宣布KaihongOS 4.1.2開發者預覽版全面上線,并向全球開發者開放免費下載。作為KaihongOS不斷創新與發展的重要里程碑,此次預覽版為
    的頭像 發表于 09-26 15:59 ?505次閱讀

    機智云開發者中心:讓移動APP應用開發更智能化

    在移動應用市場的蓬勃發展中,開發者們面臨著不斷提高效率和創新的挑戰。為了幫助開發者更好地實現移動應用開發的目標,機智云物聯網的新版開發者中心,通過
    的頭像 發表于 03-26 16:45 ?366次閱讀
    機智云<b class='flag-5'>開發者</b>中心:讓移動APP應用<b class='flag-5'>開發</b>更智能化

    Android 15的首個開發者預覽版現已發布

    Android 15 的首個開發者預覽版現已發布,以便各位開發者能與我們通力協作,打造更優秀的 Android 平臺。
    的頭像 發表于 03-12 14:16 ?994次閱讀
    Android 15的首個<b class='flag-5'>開發者</b>預覽版現已發布

    鴻蒙系統優缺點,能否作為開發者選擇

    星河版已經是純血鴻蒙,但是它的發展一些周期。生態圈的建立難度大,各大廠商加入鴻蒙原生開發需要時間累積。 鴻蒙開發人才空缺,由于鴻蒙作為一款新型的系統,程序員們都是從0學起。所以市面上很少有鴻蒙開發者
    發表于 02-16 21:00
    主站蜘蛛池模板: 亚洲国产成人一区二区在线 | 蜜柚视频在线观看全集免费观看 | [高清无码] 波多野结衣| 特级毛片s级全部免费 | 亚洲免费视频日本一区二区 | 亚洲国产精品线在线观看 | 一级做a爰片久久免费 | 丁香美女社区 | 久久合| 肉欲横流(NP高H) | 国产又爽又黄又不遮挡视频 | 色婷婷综合激情中文在线 | 高H辣肉办公室 | 亚洲国产精品特色大片观看 | 色欲AV亚洲情无码AV蜜桃 | 偷拍自怕亚洲在线第7页 | 性色无码AV久久蜜臀 | 蜜桃传媒在线播放 | 中文字幕无码亚洲字幕成A人蜜桃 | 91久久偷偷做嫩草影院免费看 | 精品区2区3区4区产品乱码9 | 男人桶女人j的视频在线观看 | 久久亚洲精品AV成人无 | 色老99九久精品偷偷鲁 | 成 人 动漫3d 在线看 | 国产69精品久久久久乱码免费 | 人妖干美女 | 午夜精品久久久久久影视riav | 婷婷开心激情综合五月天 | 羲义嫁密着中出交尾gvg794 | 蜜桃色欲AV久久无码精品 | 妙玉被肉干高H潮文 | 激情A片久久久久久久 | 久久视频在线视频观看精品15 | 中文字幕精品在线观看 | 一个人HD高清在线观看免费视频 | 欧美精品成人久久网站 | 黄色网址在线免费观看 | 四虎免费影院 | 拔萝卜电视剧高清免费 | 国产91网站在线观看免费 |