flutter 中有比较好用的类似web端select插件吗?老师有推荐吗

来源:10-3 基于ExpansionTile实现可展开的列表【列表还可以这样做】

慕尼黑0158256

2024-06-04

比如支持多选单选,带搜索功能的,数据回显等操作

写回答

1回答

CrazyCodeBoy

2024-06-05

在Flutter中,虽然标准的组件库没有直接提供类似Web端的 `<select>` 标签的完整功能,但你可以使用一些社区开发的包来实现类似的功能。以下是一些流行且功能丰富的包,它们可以实现单选、多选、搜索功能以及数据回显等操作:


### 1. `dropdown_search`

`dropdown_search` 是一个提供下拉选择功能的包,支持单选和多选,还有内置的搜索功能。这个包很好地模拟了传统Web端的 `<select>` 标签的功能。


#### 特性:

- 支持单选和多选。

- 内置搜索功能。

- 易于自定义。


#### 添加依赖:

在你的 `pubspec.yaml` 文件中添加:


```yaml

dependencies:

  dropdown_search: ^1.0.0

```


#### 示例代码:


```dart

import 'package:flutter/material.dart';

import 'package:dropdown_search/dropdown_search.dart';


void main() {

  runApp(MaterialApp(home: MyHomePage()));

}


class MyHomePage extends StatelessWidget {

  @override

  Widget build(BuildContext context) {

    return Scaffold(

      appBar: AppBar(title: Text("Dropdown Search Example")),

      body: Padding(

        padding: const EdgeInsets.all(24.0),

        child: Column(

          children: <Widget>[

            DropdownSearch<String>(

              mode: Mode.DIALOG,

              showSearchBox: true,

              showSelectedItem: true,

              items: ["Brazil", "Italia (Disabled)", "Tunisia", 'Canada'],

              label: "Menu mode",

              hint: "country in menu mode",

              popupItemDisabled: (String s) => s.startsWith('I'),

              onChanged: print,

              selectedItem: "Brazil",

            ),

          ],

        ),

      ),

    );

  }

}

```


### 2. `flutter_form_builder`

如果你的应用需要表单,并希望在表单中集成更复杂的选择器,那么 `flutter_form_builder` 是一个不错的选择。它集成了多种表单字段类型,包括可以搜索的下拉菜单。


#### 添加依赖:

在你的 `pubspec.yaml` 文件中添加:


```yaml

dependencies:

  flutter_form_builder: ^6.0.0

```


#### 示例代码:


```dart

import 'package:flutter/material.dart';

import 'package:flutter_form_builder/flutter_form_builder.dart';


void main() {

  runApp(MaterialApp(home: FormBuilderExample()));

}


class FormBuilderExample extends StatelessWidget {

  final _formKey = GlobalKey<FormBuilderState>();


  @override

  Widget build(BuildContext context) {

    return Scaffold(

      appBar: AppBar(title: Text("FormBuilder Example")),

      body: FormBuilder(

        key: _formKey,

        child: Column(

          children: <Widget>[

            FormBuilderDropdown(

              name: 'gender',

              decoration: InputDecoration(

                labelText: 'Gender',

              ),

              // initialValue: 'Male',

              allowClear: true,

              hint: Text('Select Gender'),

              validator: FormBuilderValidators.compose(

                  [FormBuilderValidators.required(context)]),

              items: ['Male', 'Female', 'Other']

                  .map((gender) => DropdownMenuItem(

                        value: gender,

                        child: Text('$gender'),

                      ))

                  .toList(),

            ),

          ],

        ),

      ),

    );

  }

}

```


### 结论

这些插件为Flutter提供了类似Web端 `<select>` 标签的功能,包括支持多选、单选、搜索、以及数据回显等。根据你的具体需求选择合适的插件,并根据其文档进行配置和使用,可以有效地提升用户体验和表单处理的效率。

0
0

Flutter从入门到进阶 实战携程网App 一网打尽核心技术

解锁Flutter开发新姿势,,系统掌握Flutter开发核心技术。

4788 学习 · 3274 问题

查看课程