flutter 列表下拉框加搜索

news2024/9/22 15:30:40

1.使用控件搜索加下拉框dropdown_search: ^0.4.9和获取中文拼音lpinyin: ^1.1.1

2.加入中文查询和首字查询

当中找到相应的packages,再在SelectDialog.dart当中加入引入拼音搜索

import 'package:lpinyin/lpinyin.dart';

更改匹配方法manageItemsByFilter使其可以支持拼音首字搜索

void manageItemsByFilter(String filter, {bool isFistLoad = false}) async {
    _loadingNotifier.value = true;

    List<T> applyFilter(String filter) {
      return _items.where((i) {
        if (widget.filterFn != null)
          return (widget.filterFn(i, filter));
        else if (widget.itemAsString != null) {
          if(filter.contains(new RegExp('^[a-zA-Z]+'))){
            return (PinyinHelper.getFirstWordPinyin(widget.itemAsString(i)))
                ?.toLowerCase()
                ?.contains(filter.toLowerCase()) ??
                false;
          }else{
            return (widget.itemAsString(i))
                ?.toLowerCase()
                ?.contains(filter.toLowerCase()) ??
                false;
          }

        }
        else if (i.toString().toLowerCase().contains(filter.toLowerCase()))
          return true;
        return false;
      }).toList();
    }

    //load offline data for the first time
    if (isFistLoad && widget.items != null) _items.addAll(widget.items);

    //manage offline items
    if (widget.onFind != null && (widget.isFilteredOnline || isFistLoad)) {
      try {
        final List<T> onlineItems = List();
        onlineItems.addAll(await widget.onFind(filter) ?? List());

        //Remove all old data
        _items.clear();
        //add offline items
        if (widget.items != null) {
          _items.addAll(widget.items);
          //if filter online we filter only local list based on entred keyword (filter)
          if (widget.isFilteredOnline == true) {
            var filteredLocalList = applyFilter(filter);
            _items.clear();
            _items.addAll(filteredLocalList);
          }
        }
        //add new online items to list
        _items.addAll(onlineItems);

        _addDataToStream(applyFilter(filter));
      } catch (e) {
        _addErrorToStream(e);
        //if offline items count > 0 , the error will be not visible for the user
        //As solution we show it in dialog
        if (widget.items != null && widget.items.isNotEmpty) {
          _showErrorDialog(e);
          _addDataToStream(applyFilter(filter));
        }
      }
    } else {
      _addDataToStream(applyFilter(filter));
    }

    _loadingNotifier.value = false;
  }

3.使用

DropdownSearch<User>(
              items: nurses,      //user集合
              maxHeight: 300,
              selectedItem: selectUser(val),   //通过id查到对应的user类
              itemAsString: (User u) => u.name,  //显示user的名字
              onChanged: (value){
                onDropChange(value.id);
              },
              showSearchBox: true,
              showAsSuffixIcons: true,
            )

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1921560.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

一文读懂DNS和CDN

一.什么是DNS DNS&#xff08;Domain Name System&#xff09;全称为域名系统&#xff0c;是一个将域名和IP地址相互映射的分布式服务&#xff0c;他的作用就是把一个域名解析成为IP地址。我们平时输入的网址&#xff08;或者域名&#xff09;不能被计算机直接识别&#xff0c;…

oracle控制文件详解以及新增控制文件

文章目录 oracle控制文件1、 控制文件包含的主要信息如下&#xff1a;2、查看目前系统的控制文件信息&#xff0c;主要是查看相关的字典视图 oracle新增控制文件 oracle控制文件 控制文件是一个很小的二进制文件(10MB左右)&#xff0c;含有数据库结构信息&#xff0c;包括数据…

数据结构(Java):单链表面试OJ题

1、题一&#xff1a;获取链表倒数第k个节点 . - 力扣&#xff08;LeetCode&#xff09; 1.1 思路解析 此题我们使用双指针法求解。 首先&#xff0c;我们要知道&#xff0c;倒数的第k个节点&#xff0c;距离倒数第一个节点还需要移动k-1次。 1.那么我们可以定义出两个指针&a…

设计模式-工厂模式的完整代码示例及测试验证

工厂模式 工厂模式 什么是工厂模式&#xff1f; 工厂模式是一种创建对象的设计模式&#xff0c;用来替代传统的 如 A anew A() 创建对象的方式&#xff0c;提供了一种 统一的接口来创建对象&#xff0c; 封装创建的过程&#xff0c;达到解耦的目的。 优缺点 优点 封装对象的创…

pytorch官网examples 实现

Getting started with transforms v2 — Torchvision 0.18 documentation (pytorch.org) 官网我导入包都报错官网代码如下&#xff1a; 不太理解所以我自己写了一段修改之后的代码&#xff0c;效果是一样的 import torch from torchvision.io import read_image import mat…

X用户最多的国家排名统计报告

数据为DataReportal发布的Twitter在各个国家的用户数统计。 2022年&#xff0c;Twitter用户最多的国家是美国&#xff0c;有7690万用户。 数据统计单位为&#xff1a;万人 数据说明&#xff1a; 数据截止时间为2022年1月 Twitter在各个国家的用户情况 2022年&#xff0c;Twit…

【TES807】 基于XCKU115 FPGA的双FMC接口万兆光纤传输信号处理平台

板卡概述 TES807是一款基于千兆或者万兆以太网传输的双FMC接口信号处理平台。该平台采用XILINX的Kintex UltraSacle系列FPGA&#xff1a;XCKU115-2FLVF1924I作为主处理器&#xff0c;FPGA外挂两组72位DDR4 SDRAM&#xff0c;用来实现超大容量数据缓存&#xff0c;DDR4的最高数据…

RIP路由协议概述

RIP【Routing Information Protocol】 RIP是为TCP/IP 环境中开发的第一个路由选择协议标准 RIP是一个【距离——矢量】路由选择协议 当路由器的更新周期为30s到来时&#xff0c;向邻居发送路由表 RIP以跳数作为唯一度量值 RIP工作原理 RIP路由协议向邻居发送整个路由表信息RI…

《昇思25天学习打卡营第1天|QuickStart》

说在前面 曾经接触过华为的910B服务级显卡&#xff0c;当时基于910B做了一些开发的工作&#xff0c;但是总感觉做的事情太低层&#xff0c;想要能自顶向下的了解下&#xff0c;因此开始了MindSpore的学习。另外也想给予提供的显卡&#xff0c;简单尝试下llm模型的训练&#xf…

2.2 类型转换与 printf 函数深度解析

1 类型转换 1.1 隐式类型转换 1.2 显式类型转换 1.3 应用&#xff1a;整除除法 2 printf 函数 2.1 语法格式 2.2 格式说明符 2.2.1 浮点数的规范性输出 2.2.2 格式说明符不匹配错误 2.3 修饰符 2.3.1 对齐方式 2.3.2 宽度 2.3.3 精度 2.3.4 填充字符 2.3.5 其他修…

【硬件调试】示波器探头一碰芯片引脚板子就短路或者闪小火花

问题: 今天拿示波器探头准备测量芯片引脚输出波形,有的引脚正常输出信号,有的会打小火花,但输出波形正常,还有一个引脚最离谱,示波器一碰,板子就立马短路,电流达到最大值,电源电压都被拉下来了,直到示波器探头拿开,板子才自动恢复,此时这个引脚测得波形如下: 根…

C++的链接指示extern “C“

目录 链接指示extern "C"A.What&#xff08;概念&#xff09;B.Why&#xff08;extern "C"的作用&#xff09;C.How &#xff08;如何使用链接指示extern "C"&#xff09; 链接指示extern “C” A.What&#xff08;概念&#xff09; extern&quo…

100 个网络基础知识普及,看完成半个网络高手!

1&#xff09;什么是链接&#xff1f; 链接是指两个设备之间的连接。它包括用于一个设备能够与另一个设备通信的电缆类型和协议。 2&#xff09;OSI 参考模型的层次是什么&#xff1f; 有 7 个 OSI 层&#xff1a;物理层&#xff0c;数据链路层&#xff0c;网络层&#xff0…

ElasticSearch第一天

学习目标&#xff1a; 能够理解ElasticSearch的作用能够安装ElasticSearch服务能够理解ElasticSearch的相关概念能够使用Postman发送Restful请求操作ElasticSearch能够理解分词器的作用能够使用ElasticSearch集成IK分词器能够完成es集群搭建 第一章 ElasticSearch简介 1.1 什么…

javaweb个人主页设计(html+css+js)

目录 1 前言和要求 1.1 前言 1.2 设计要求 2 预览 2.1 主页页面 2.2 个人简介 2.3 个人爱好 2.4 个人成绩有代码&#xff0c;但是图片已省略&#xff0c;可以根据自己情况添加 2.5 收藏夹 3 代码实现 3.1 主页 3.2 个人简介 3.3 个人爱好 3.4 个人成绩&#xff…

shell 字符串列表操作

我的需求是这样的&#xff1a;编译多个模块的时候&#xff0c;把失败的模块添加到列表里&#xff0c;最后输出。这个列表类似这样&#xff1a;failModuleList"a b c d e" 先定义一个空的字符串列表&#xff1a; failModuleList"" 然后利用字符串的拼接方…

CVPR`24 | 又快又好!渲染速度比ENeRF快30倍!4K4D:实时4K分辨率4D视图合成

文章链接&#xff1a;https://arxiv.org/pdf/2310.11448 git链接&#xff1a; https://zju3dv.github.io/4k4d/ 本文旨在实现动态3D场景在4K分辨率下的高保真和实时视图合成。最近&#xff0c;一些动态视图合成方法在渲染质量方面表现出色。然而&#xff0c;在渲染高分辨率图像…

如何合并pdf文件?分享3种常见的方法!

在数字化办公日益普及的今天&#xff0c;PDF文件因其格式稳定、兼容性强、阅读方便等特点&#xff0c;成为了人们日常工作和学习中不可或缺的一部分。然而&#xff0c;当我们需要处理多个PDF文件时&#xff0c;如何将它们高效地合并成一个文件&#xff0c;以便更好地管理和分享…

Linux进程——进程的概念

文章目录 PCB进程排队进程标识符pid终止进程获取进程id父进程与子进程 我们在上一节内容中有简单谈到进程的感性理解&#xff0c;他在课本上的概念是&#xff0c;程序的一个执行实例或正在执行的程序 但在本质上&#xff0c;他其实就是一个被分配了系统资源&#xff08;CPU&am…

公有云API常见的认证方式

公有云API常见的认证方式 Token认证 &#xff08;百度云、腾讯云&#xff09; AK/SK认证 (阿里云、天翼云、腾讯云) RSA非对称加密方式 &#xff08;信核云灾备&#xff09; Token认证 AK/SK认证 RSA认证 种方式使用一对密钥&#xff0c;即公钥和私钥。公钥可以公开&#x…