当前位置: 首页 > news >正文

网站建设案例收费情况/广告传媒公司

网站建设案例收费情况,广告传媒公司,建设个网站,小网站做几个关键词目录 1. 引言 2. Autocomplete 的基本用法 3. 主要属性 4. 自定义 Autocomplete 样式 4.1 自定义建议列表样式 4.2 复杂数据结构处理 4.3 异步数据加载与防抖 4.4 多层级搜索建议 4.5 输入验证与错误处理 5. 结论 相关推荐 1. 引言 在移动应用和 Web 开发中&#xff…

目录

1. 引言

2. Autocomplete 的基本用法

3. 主要属性

4. 自定义 Autocomplete 样式

4.1 自定义建议列表样式

4.2 复杂数据结构处理

4.3 异步数据加载与防抖

4.4 多层级搜索建议

4.5 输入验证与错误处理

5. 结论

相关推荐


1. 引言

        在移动应用和 Web 开发中,自动补全(Autocomplete)是提升用户输入效率的核心功能之一。Flutter 通过 Autocomplete 和 RawAutocomplete 组件为开发者提供了强大的工具集。本文将带你从基础实现到高级优化,全面掌握 Flutter 自动补全功能。

2. Autocomplete 的基本用法

   Autocomplete 通过 optionsBuilder 提供建议列表,并使用 onSelected 处理用户的选择。

Autocomplete<String>(optionsBuilder: (TextEditingValue textEditingValue) {if (textEditingValue.text.isEmpty) {return const Iterable<String>.empty();}return ['苹果', '香蕉', '橙子', '葡萄'].where((option) => option.contains(textEditingValue.text));},onSelected: (String selection) {print('你选择了: $selection');},
)

3. 主要属性

属性说明
optionsBuilder动态生成建议列表(支持异步)
onSelected处理用户选择的回调函数
fieldViewBuilder自定义输入框的样式
optionsViewBuilder自定义建议列表的样式

示例:

Autocomplete<String>(optionsBuilder: (TextEditingValue textEditingValue) {return ['Flutter', 'Dart', 'Android', 'iOS'].where((option) => option.toLowerCase().contains(textEditingValue.text.toLowerCase()));},fieldViewBuilder: (context, textEditingController, focusNode, onFieldSubmitted) {return TextField(controller: textEditingController,focusNode: focusNode,decoration: InputDecoration(labelText: '搜索技术'),);},
)

4. 自定义 Autocomplete 样式

4.1 自定义建议列表样式

Autocomplete<String>(optionsViewBuilder: (context, onSelected, options) {return Align(alignment: Alignment.topLeft,child: Material(elevation: 4.0,child: SizedBox(height: 200,child: ListView.builder(padding: EdgeInsets.all(8.0),itemCount: options.length,itemBuilder: (context, index) {final option = options.elementAt(index);return ListTile(title: Text(option),onTap: () => onSelected(option),);},),),),);},
)

4.2 复杂数据结构处理

class Product {final String id;final String name;final String category;Product(this.id, this.name, this.category);
}class ObjectAutocomplete extends StatelessWidget {final List<Product> _products = [Product('1', 'iPhone 14', 'Electronics'),Product('2', 'MacBook Pro', 'Electronics'),Product('3', 'Coffee Maker', 'Kitchen'),];@overrideWidget build(BuildContext context) {return Autocomplete<Product>(optionsBuilder: (TextEditingValue value) {return _products.where((product) => product.name.toLowerCase().contains(value.text.toLowerCase()));},displayStringForOption: (Product option) => option.name,optionsViewBuilder: (context, onSelected, options) {return Align(alignment: Alignment.topLeft,child: Material(elevation: 4,child: SizedBox(height: 200,child: ListView.builder(itemCount: options.length,itemBuilder: (context, index) {final product = options.elementAt(index);return ListTile(title: Text(product.name),subtitle: Text(product.category),onTap: () => onSelected(product),);},),),),);},);}
}

4.3 异步数据加载与防抖

        实现 API 动态加载并优化性能:

class AsyncAutocomplete extends StatefulWidget {@override_AsyncAutocompleteState createState() => _AsyncAutocompleteState();
}class _AsyncAutocompleteState extends State<AsyncAutocomplete> {final Debouncer _debouncer = Debouncer(milliseconds: 500);final ApiService _apiService = ApiService();Future<List<Product>> _fetchSuggestions(String query) async {if (query.isEmpty) return [];return _apiService.searchProducts(query);}@overrideWidget build(BuildContext context) {return Autocomplete<Product>(optionsBuilder: (TextEditingValue value) {_debouncer.run(() => setState(() {}));return _fetchSuggestions(value.text);},optionsViewBuilder: (context, onSelected, options) {return _buildLoadingIndicator(options);},);}Widget _buildLoadingIndicator(AsyncSnapshot<List<Product>> snapshot) {if (snapshot.connectionState == ConnectionState.waiting) {return const CircularProgressIndicator();}// 正常构建列表}
}class Debouncer {final int milliseconds;Timer? _timer;Debouncer({required this.milliseconds});void run(VoidCallback action) {_timer?.cancel();_timer = Timer(Duration(milliseconds: milliseconds), action);}
}

4.4 多层级搜索建议

optionsBuilder: (value) async {final results = await Future.wait([_localSearch(value.text),_apiSearch(value.text),_recentSearches(value.text)]);return [...results[0], ...results[1], ...results[2]];
},

4.5 输入验证与错误处理

onSelected: (Product selection) {if (!_validateSelection(selection)) {_showErrorToast('Invalid selection');_controller.clear();return;}// 处理有效选择
},

5. 结论

    Autocomplete 是 Flutter 内置的强大自动补全组件,适用于搜索、地址输入等场景。通过 optionsBuilder 可提供动态建议,结合 fieldViewBuilderoptionsViewBuilder 还能自定义 UI 样式,满足不同需求。熟练使用 Autocomplete 可以显著提升应用的交互体验。

相关推荐

Flutter 输入组件 Checkbox 详解-CSDN博客文章浏览阅读724次,点赞26次,收藏10次。在 Flutter 中,Checkbox 是一个常用的多选组件,适用于设置开关选项、同意协议、筛选条件等场景。Checkbox 允许用户勾选或取消勾选,并可通过 value 和 onChanged 进行状态管理。本文将介绍 Checkbox 的基本用法、主要属性及自定义样式。 https://shuaici.blog.csdn.net/article/details/146068557Flutter 输入组件 Radio 详解-CSDN博客文章浏览阅读919次,点赞24次,收藏30次。在 Flutter 中,Radio是用于单选的按钮组件,适用于需要用户在多个选项中选择一个的场景,如表单、设置选项等。Radio通过value和groupValue进行状态管理,并结合onChanged监听选中状态的变化。本文将介绍Radio的基本用法、主要属性及自定义样式。 https://shuaici.blog.csdn.net/article/details/146068599

http://www.whsansanxincailiao.cn/news/32025036.html

相关文章:

  • 如何建设数据报表网站/网络营销理论基础
  • 漳浦网站开发/电商网站建设哪家好
  • 舟山网站建设哪家好/益阳网站seo
  • 沈阳网站设计制作公司/营销软文网站
  • 南昌英文网站建设/长沙网站定制公司
  • 张家港做网站优化排名/网络营销的认知
  • 高端网站定制商/整合营销方案怎么写
  • 青岛网站建设 推荐青岛博采网络/推广app拿返佣的平台
  • 新建网站网络空间/营销网络推广方式有哪些
  • php网站建设与维护/最专业的seo公司
  • 建设网站企业网银登录/万网查询
  • 简单的ui界面制作/seo和sem
  • 旅游做攻略网站好/互联网精准营销
  • 天地心公司做网站怎样/百度分公司
  • 二维码网站建设源码/推广策略
  • 网站主机要多少钱/安卓优化大师app
  • wordpress中文后台/湖南长沙seo教育
  • 东莞做网站电话/网络推广的目标
  • 网站设计加油站/日喀则网站seo
  • 如何用ps做网站导航条/免费网络营销平台
  • 佛山企业网站搭建公司/域名注册信息查询whois
  • 广州网站建设clov5r/怎样做引流推广
  • 常德网站开发/免费的行情网站app
  • 新乡市封丘县建设局网站/建设企业网站多少钱
  • 校园网站建设/网片
  • 电子商务专业就业前景如何/东莞seoseo关键词排名优化
  • 想自己做点飘纱素材到网站上买/常见的网站推广方法有哪些
  • 做网站什么域名好/百度云搜索引擎入口百度网盘
  • 哪个网站可以做全网推广/提高seo排名
  • 扬州网站建设哪家好/关键词推广是什么