阅读 86

Flutter Widget 之Autocomplete

你知道的,没有人喜欢打字。所以当表单输入可以完成你的句子时那就太好了。

ezgif.com-gif-maker.gif

这是一个常见的UI模式,你可以使用一个布局构造器,一个堆栈,在用户输入时在下面的一些列表磁铁以及...

Flutter中有一个小部件是为其量身打造的,Autocomplete为您的用户提供现成的自动填充的体验。

将任何文本输入部件都换成自动填充部件并提供一个optionsBuilder。

optionsBuilder是一个方法,它从文本书睿中获取最新的textEditingValue属性,并返回一个可迭代的匹配。这些匹配可以是字符串或自定义类型

// TextField() Autocomplete<String>(     optionsBuilder: (textEditingValue) {         return data.filter(             (entry) => entry.contains(textEditingValue.text),         );     } ) 复制代码

Autocomplete<MyCustomType>(     optionsBuilder: (textEditingValue) {         return myObjects.filter(             (obj) => obj.name.contains(                 textEditingValuue.text             ),         );     }, ) 复制代码

你可以用displayStringForOption参数将其变成字符串

Autocomplete<MyCustomType>(     optionsBuilder: (...) {},     displayStringForOption: (MyCustomType obj) => obj.name, ) 复制代码

为了控制这些显示匹配的外观,使用optionsViewBuilder回调

Autocomplete<MyCustomType>(     optionsBuilder: (...) {},     displayStringForOption: (MyCustomType obj) => obj.name,     optionsViewBuilder: (         context,         onSelected,         options,     ) => ListView.builder(         itemCount: options.length,         itemBuilder: (context, index) {             return Widgets(options[i]);         },     ), ) 复制代码

为了知道你的用户何时点击其中一个匹配,提供一个onSelected函数

Autocomplete<MyCustomType>(     optionsBuidler: (...) {},     displayStringForOption: (...) {},     optionsViewBuilder: (...) {},     onSelected: (MyCustomType obj) {         stateManagement.toggle(obj);     }, ) 复制代码

最后,如果你原来的文本输入很时尚,而autocomplete提供的文本输入相比之下很无聊,请使用fieldViewBuilder参数,来保持对输入的完全控制

Autocomplete<MyCustomType>(     optionsBuilder: (...) {},     displayStringForOption: (...) {},     optionsViewBuilder: (...) {},     onSelected: (...) {},     fieldViewBuilder: (         context,         textEditingController,         focusNode,         oonFieldSubmitted,     ) => MyFancyTextInput(...), ) 复制代码

ezgif.com-gif-maker (1).gif

如果想了解有关Autocomplete的内容,或者关于Flutter的其他功能


作者:程序员界的小学生
链接:https://juejin.cn/post/7170182768838574116

文章分类
代码人生
版权声明:本站是系统测试站点,无实际运营。本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 XXXXXXo@163.com 举报,一经查实,本站将立刻删除。
相关推荐