Skip to content

Select 选择器

选择器用于从一组选项中选择一个或多个选项。

何时使用

  • 需要从一组选项中进行单项或多项选择时
  • 表单中需要用户进行选择操作时
  • 需要提供搜索功能以快速定位选项时
  • 需要自定义选项显示内容时

代码演示

import 'package:flutter/material.dart';
import 'package:trionesdev_antd_mobile/trionesdev_antd_mobile.dart';

import '../demo_block.dart';

class SelectPage extends StatefulWidget {
  const SelectPage({super.key});

  @override
  SelectPageState createState() => SelectPageState();
}

class SelectPageState extends State<SelectPage> {
  var options = [
    {"value": "1", "label": "选项1"},
    {"value": "2", "label": "选项2"},
    {"value": "3", "label": "选项3"},
    {"value": "4", "label": "选项4"},
    {"value": "5", "label": "选项5"},
    {"value": "6", "label": "选项6"},
    {"value": "7", "label": "选项7"},
    {"value": "8", "label": "选项8"},
    {"value": "9", "label": "选项9"},
    {"value": "10", "label": "选项10"},
    {"value": "11", "label": "选项11"},
    {"value": "12", "label": "选项12"},
    {"value": "13", "label": "选项13"},
    {"value": "14", "label": "选项14"},
    {"value": "15", "label": "选项15"},
    {"value": "16", "label": "选项16"},
    {"value": "17", "label": "选项17"},
    {"value": "18", "label": "选项18"},
    {"value": "19", "label": "选项19"},
    {"value": "20", "label": "选项20"},
  ];

  @override
  Widget build(BuildContext context) {
    return AntScaffold(
      appBar: AntAppBar(title: Text("Select 选择器")),
      body: SingleChildScrollView(
        child: Column(
          children: [
            DemoBlock(
              title: "基本用法",
              child: Column(
                children: [
                  AntSelect(options: options, placeholder: "请选择", arrow: true),
                ],
              ),
            ),
            DemoBlock(
              title: "页面模式",
              child: Column(
                children: [
                  AntSelect(
                    options: options,
                    placeholder: "请选择",
                    arrow: true,
                    pickerMode: AntSelectPickerMode.page,
                  ),
                ],
              ),
            ),
            DemoBlock(
              title: "多选模式",
              child: Column(
                children: [
                  AntSelect(options: options, placeholder: "请选择", arrow: true,mode: AntSelectMode.multiple,),
                ],
              ),
            ),
            DemoBlock(
              title: "Popup模式-刷新",
              child: Column(
                children: [
                  AntSelect(
                    options: options,
                    placeholder: "请选择",
                    arrow: true,
                    pickerMode: AntSelectPickerMode.popup,
                    showSearch:  true,
                    onSearch: (value) {
                      print("search Value:"+value.toString());
                    },
                    onRefresh: () async {
                      setState(() {
                        options = [
                          {"value": "1", "label": "选项1"},
                          {"value": "2", "label": "选项2"},
                          {"value": "3", "label": "选项3"},
                          {"value": "4", "label": "选项4"},
                          {"value": "5", "label": "选项5"},
                          {"value": "6", "label": "选项6"},
                          {"value": "7", "label": "选项7"},
                        ];
                      });
                    },
                  ),
                ],
              ),
            ),
            DemoBlock(
              title: "页面模式-刷新",
              child: Column(
                children: [
                  AntSelect(
                    options: options,
                    placeholder: "请选择",
                    titleText: "选择",
                    arrow: true,
                    pickerMode: AntSelectPickerMode.page,
                    showSearch:  true,
                    onSearch: (value) {
                      print("search Value:"+value.toString());
                    },
                    onRefresh: () async {
                      setState(() {
                        options = [
                          {"value": "1", "label": "选项1"},
                          {"value": "2", "label": "选项2"},
                          {"value": "3", "label": "选项3"},
                          {"value": "4", "label": "选项4"},
                          {"value": "5", "label": "选项5"},
                          {"value": "6", "label": "选项6"},
                          {"value": "7", "label": "选项7"},
                        ];
                      });
                    },
                  ),
                ],
              ),
            ),
            AntButton(text: "重置",onPressed: () {
              setState(() {
                 options = [
                  {"value": "1", "label": "选项1"},
                  {"value": "2", "label": "选项2"},
                  {"value": "3", "label": "选项3"},
                  {"value": "4", "label": "选项4"},
                  {"value": "5", "label": "选项5"},
                  {"value": "6", "label": "选项6"},
                  {"value": "7", "label": "选项7"},
                  {"value": "8", "label": "选项8"},
                  {"value": "9", "label": "选项9"},
                  {"value": "10", "label": "选项10"},
                  {"value": "11", "label": "选项11"},
                  {"value": "12", "label": "选项12"},
                  {"value": "13", "label": "选项13"},
                  {"value": "14", "label": "选项14"},
                  {"value": "15", "label": "选项15"},
                  {"value": "16", "label": "选项16"},
                  {"value": "17", "label": "选项17"},
                  {"value": "18", "label": "选项18"},
                  {"value": "19", "label": "选项19"},
                  {"value": "20", "label": "选项20"},
                ];
              });
            },)
          ],
        ),
      ),
    );
  }
}

API

AntSelect 组件参数

属性说明类型默认值
cellLabel显示的标签Widget?null
cellLabelText显示的标签文本String?null
mode选择模式(是否可以多选)AntSelectMode?null
pickerMode选择器模式AntSelectPickerModeAntSelectPickerMode.popup
showSearch是否显示搜索框boolfalse
appBar顶部栏PreferredSizeWidget?null
title标题String?null
placeholder占位符String?null
searchPlaceholder搜索框占位符String?null
arrow是否显示箭头boolfalse
fieldsNames字段名AntFieldsNames?AntFieldsNames(label: NamePath("label"),value: NamePath("value"))
options选项数据源List<dynamic>[]
optionBuilder选项构建器AntSelectOptionBuilder?null
onSearch搜索框回调ValueChanged<dynamic>?null
valuedynamicnull
valueOption值选项dynamicnull
onChange值改变回调AntSelectValueChanged?null
onRefresh刷新事件AsyncCallback?null
onScrollToLower滚动到底部事件AsyncCallback?null
onOpenChange打开状态改变回调ValueChanged<bool>?null

AntSelectMode 枚举值

说明
multiple多选模式
tags标签模式

AntSelectPickerMode 枚举值

说明
popup弹出层模式
page页面模式

AntFieldsNames 属性

属性说明类型默认值
label标签字段名NamePath?NamePath("label")
value值字段名NamePath?NamePath("value")

组件特性

  1. 支持单选和多选模式
  2. 支持两种选择器模式:弹出层模式和页面模式
  3. 支持搜索功能,便于在大量选项中快速查找
  4. 支持自定义选项显示内容
  5. 支持下拉刷新和上拉加载更多
  6. 支持监听选择器打开状态变化

使用说明

  • 通过 mode 属性控制选择模式,设置为 AntSelectMode.multiple 为多选,AntSelectMode.tags 为标签模式,不设置或设为 null 为单选
  • 通过 pickerMode 属性控制选择器展示模式,popup 为底部弹出层,page 为新页面展示
  • options 属性用于设置选项数据源,应为包含对象的数组
  • fieldsNames 属性用于指定选项中标签和值的字段名,默认使用 labelvalue 字段
  • optionBuilder 属性允许自定义选项的显示内容
  • showSearch 属性控制是否显示搜索框,适用于选项较多的场景
  • onChange 回调在选择值发生变化时触发,会传递选中的值和选项对象
  • onRefreshonScrollToLower 可用于实现下拉刷新和上拉加载更多功能
  • cellLabel 属性用于设置标签组件
  • cellLabelText 属性用于设置标签文本