Flutter带搜索功能的下拉菜单插件drop_down_with_search的使用

Flutter带搜索功能的下拉菜单插件drop_down_with_search的使用

本README描述了该插件。如果你将此插件发布到pub.dev,此README的内容会出现在你的插件首页。

特性

这是一个带有搜索功能的自定义下拉菜单。

演示图

开始使用

该插件支持空安全,请确保你使用的Flutter版本也支持空安全。

使用方法

DropDownWithSearch(
  textController: myController,
  inputItem: ["Mumbai", "Chennai", "Maharastra", "Karnataka"],
),

完整示例

以下是一个完整的示例代码:

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

void main() {
  runApp(const MyApp());
}

class MyApp extends StatelessWidget {
  const MyApp({super.key});

  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: const MyHomePage(title: 'Flutter Demo Home Page'),
    );
  }
}

class MyHomePage extends StatefulWidget {
  const MyHomePage({super.key, required this.title});
  final String title;

  [@override](/user/override)
  State<MyHomePage> createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  // 创建一个文本控制器
  TextEditingController myController = TextEditingController();

  [@override](/user/override)
  void initState() {
    // 初始化状态
    super.initState();
  }

  // 增加计数器的方法
  void _incrementCounter() {}

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text("Dropdown"),
      ),
      body: Padding(
        padding: EdgeInsets.symmetric(horizontal: 20),
        child: DropDownWithSearch(
          textController: myController,
          inputItem: ["Mumbai", "Chennai", "Maharastra", "Karnataka"],
        ),
      ),
      floatingActionButton: FloatingActionButton(
        onPressed: _incrementCounter,
        tooltip: 'Increment',
        child: const Icon(Icons.add),
      ),
    );
  }

  // 获取下拉数据的方法
  getDropDown() {}
}

更多关于Flutter带搜索功能的下拉菜单插件drop_down_with_search的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter带搜索功能的下拉菜单插件drop_down_with_search的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


drop_down_with_search 是一个 Flutter 插件,用于创建一个带有搜索功能的下拉菜单。它可以帮助用户在大量选项中进行快速搜索和选择。以下是如何使用这个插件的详细步骤:

1. 添加依赖

首先,在 pubspec.yaml 文件中添加 drop_down_with_search 依赖:

dependencies:
  flutter:
    sdk: flutter
  drop_down_with_search: ^1.0.0  # 请使用最新版本

然后运行 flutter pub get 来安装依赖。

2. 导入包

在需要使用该插件的 Dart 文件中导入包:

import 'package:drop_down_with_search/drop_down_with_search.dart';

3. 使用 DropDownWithSearch 组件

接下来,你可以在你的 UI 中使用 DropDownWithSearch 组件。以下是一个简单的示例:

class MyHomePage extends StatefulWidget {
  [@override](/user/override)
  _MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  String? _selectedItem;

  final List<String> _items = [
    'Apple',
    'Banana',
    'Cherry',
    'Date',
    'Elderberry',
    'Fig',
    'Grape',
    'Honeydew',
  ];

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('DropDown with Search'),
      ),
      body: Padding(
        padding: const EdgeInsets.all(16.0),
        child: Column(
          children: [
            DropDownWithSearch(
              items: _items,
              selectedItem: _selectedItem,
              onChanged: (String? value) {
                setState(() {
                  _selectedItem = value;
                });
              },
              hintText: 'Select an item',
              searchHintText: 'Search for an item',
            ),
            SizedBox(height: 20),
            Text('Selected Item: $_selectedItem'),
          ],
        ),
      ),
    );
  }
}

4. 参数说明

DropDownWithSearch 组件有几个重要的参数:

  • items: 一个字符串列表,表示下拉菜单中的选项。
  • selectedItem: 当前选中的项。
  • onChanged: 当用户选择一个项时触发的回调函数。
  • hintText: 当没有选中任何项时显示的提示文本。
  • searchHintText: 搜索框中的提示文本。

5. 运行应用

现在你可以运行你的 Flutter 应用,并看到一个带有搜索功能的下拉菜单。用户可以通过输入文本搜索选项,并从列表中选择一个项。

6. 自定义样式

你可以通过 DropDownWithSearch 的其他参数来自定义下拉菜单的样式,例如 dropdownColortextStylesearchTextStyle 等。

DropDownWithSearch(
  items: _items,
  selectedItem: _selectedItem,
  onChanged: (String? value) {
    setState(() {
      _selectedItem = value;
    });
  },
  hintText: 'Select an item',
  searchHintText: 'Search for an item',
  dropdownColor: Colors.white,
  textStyle: TextStyle(fontSize: 16, color: Colors.black),
  searchTextStyle: TextStyle(fontSize: 16, color: Colors.grey),
)

7. 处理空数据

如果 items 列表为空,DropDownWithSearch 会显示一个提示信息。你可以通过 emptyItemText 参数来自定义这个提示信息。

DropDownWithSearch(
  items: [],
  selectedItem: _selectedItem,
  onChanged: (String? value) {
    setState(() {
      _selectedItem = value;
    });
  },
  hintText: 'Select an item',
  searchHintText: 'Search for an item',
  emptyItemText: 'No items available',
)

8. 处理异步数据

如果你的数据是异步加载的,你可以使用 FutureBuilderStreamBuilder 来动态更新 items 列表。

Future<List<String>> _fetchItems() async {
  // 模拟异步数据加载
  await Future.delayed(Duration(seconds: 2));
  return ['Apple', 'Banana', 'Cherry'];
}

[@override](/user/override)
Widget build(BuildContext context) {
  return Scaffold(
    appBar: AppBar(
      title: Text('DropDown with Search'),
    ),
    body: Padding(
      padding: const EdgeInsets.all(16.0),
      child: FutureBuilder<List<String>>(
        future: _fetchItems(),
        builder: (context, snapshot) {
          if (snapshot.connectionState == ConnectionState.waiting) {
            return Center(child: CircularProgressIndicator());
          } else if (snapshot.hasError) {
            return Center(child: Text('Error: ${snapshot.error}'));
          } else {
            return Column(
              children: [
                DropDownWithSearch(
                  items: snapshot.data!,
                  selectedItem: _selectedItem,
                  onChanged: (String? value) {
                    setState(() {
                      _selectedItem = value;
                    });
                  },
                  hintText: 'Select an item',
                  searchHintText: 'Search for an item',
                ),
                SizedBox(height: 20),
                Text('Selected Item: $_selectedItem'),
              ],
            );
          }
        },
      ),
    ),
  );
}
回到顶部