Flutter搜索下拉选择插件simple_search_dropdown的使用

Flutter搜索下拉选择插件simple_search_dropdown的使用

simple_search_dropdown 是一个提供搜索栏、支持单选和多选的下拉菜单插件。以下是该插件的基本用法和示例代码。

导入插件

首先,需要在你的 pubspec.yaml 文件中添加依赖,并在 Dart 文件中导入:

import 'package:simple_search_dropdown/simple_search_dropdown.dart';

基本功能介绍

  • 不同样式:可以自定义颜色、文本样式、图标等。
  • 多选和单选:支持单选和多选。
  • 添加和删除模式:可以通过函数添加或删除列表中的项目。
  • 紧凑简单:占用屏幕空间小。

使用方法

单选下拉菜单

以下是一个单选下拉菜单的示例:

SearchDropDown(
    listItems: listitems,
    onDeleteItem: removeItem, 
    onAddItem: addItem,
    addMode: true,
    deleteMode: true,
    updateSelectedItem: updateSelectedItem,
),

多选下拉菜单

以下是一个多选下拉菜单的示例:

MultipleSearchDropDown(
    listItems: listitems,
    onDeleteItem: removeItem, 
    onAddItem: addItem,
    addMode: true,
    deleteMode: true,
    selectedItems: selectedMultipleItems,
    updateSelectedItems: updateSelectedItems,
),

重置下拉菜单到未选中状态

通过创建一个 GlobalKey 并将其分配给下拉菜单,可以实现重置功能:

final GlobalKey<SearchDropDownState> singleSearchKey = GlobalKey();

void clearSingleSelection() {
    singleSearchKey.currentState?.clearSelection();
}

TextButton(
    onPressed: clearSingleSelection,
    child: const Text('Clear Single Selection'),
),

完整示例 Demo

以下是一个完整的示例代码,展示了如何使用 simple_search_dropdown 插件:

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

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

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

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      theme: ThemeData(
        colorScheme: ColorScheme.fromSeed(seedColor: Colors.deepPurple),
        useMaterial3: true,
      ),
      home: const MyHomePage(),
    );
  }
}

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

  @override
  State<MyHomePage> createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  final GlobalKey<SearchDropDownState> singleSearchKey = GlobalKey();
  ValueItem? selectedSingleItem;

  void removeItem(ValueItem item) {
    // 实现删除逻辑
  }

  void addItem(ValueItem item) {
    // 实现添加逻辑
  }

  void updateSelectedItem(ValueItem? newSelectedItem) {
    setState(() {
      selectedSingleItem = newSelectedItem;
    });
  }

  void clearSingleSelection() {
    singleSearchKey.currentState?.resetSelection();
  }

  @override
  Widget build(BuildContext context) {
    List<ValueItem> listitems = [
      ValueItem(label: 'Item 1', value: 'item1'),
      ValueItem(label: 'Item 2', value: 'item2'),
      ValueItem(label: 'Item 3', value: 'item3'),
    ];

    return Scaffold(
      appBar: AppBar(
        title: const Text('Simple Search Dropdown Example'),
      ),
      body: Padding(
        padding: const EdgeInsets.all(16.0),
        child: Column(
          children: [
            SearchDropDown(
              key: singleSearchKey,
              listItems: listitems,
              onDeleteItem: removeItem,
              onAddItem: addItem,
              updateSelectedItem: updateSelectedItem,
              selectedItem: listitems[0],
              searchBarSettings: SimpleSearchbarSettings(showKeyboardOnTap: true),
            ),
            const SizedBox(height: 20),
            TextButton(
              onPressed: clearSingleSelection,
              child: const Text('Clear Selection'),
            ),
            const SizedBox(height: 20),
            if (selectedSingleItem != null)
              Text('Selected Item: ${selectedSingleItem!.label}'),
          ],
        ),
      ),
    );
  }
}

class ValueItem<T> {
  final String label;
  final T value;

  ValueItem({required this.label, required this.value});
}

以上代码展示了一个简单的单选下拉菜单,用户可以选择一项并清空选择。你可以根据需求进一步扩展和完善此示例。


更多关于Flutter搜索下拉选择插件simple_search_dropdown的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

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


当然,以下是如何在Flutter项目中使用simple_search_dropdown插件的一个基本示例。这个插件允许你创建一个带有搜索功能的下拉选择组件。

首先,确保你已经将simple_search_dropdown添加到你的pubspec.yaml文件中:

dependencies:
  flutter:
    sdk: flutter
  simple_search_dropdown: ^x.y.z  # 替换为最新版本号

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

接下来,是一个简单的示例代码,展示如何使用simple_search_dropdown

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

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('Simple Search Dropdown Example'),
        ),
        body: Padding(
          padding: const EdgeInsets.all(16.0),
          child: MyDropdown(),
        ),
      ),
    );
  }
}

class MyDropdown extends StatefulWidget {
  @override
  _MyDropdownState createState() => _MyDropdownState();
}

class _MyDropdownState extends State<MyDropdown> {
  // 示例数据
  final List<String> items = [
    'Apple',
    'Banana',
    'Cherry',
    'Date',
    'Elderberry',
    'Fig',
    'Grape',
    'Honeydew',
    'Kiwi',
    'Lemon'
  ];

  String? selectedValue;

  @override
  Widget build(BuildContext context) {
    return SimpleSearchDropdown<String>(
      title: 'Select a fruit',
      searchHint: 'Search for fruits...',
      items: items,
      itemBuilder: (item) {
        return Padding(
          padding: const EdgeInsets.symmetric(horizontal: 8.0),
          child: Text(item),
        );
      },
      onItemSelected: (value) {
        setState(() {
          selectedValue = value;
        });
      },
      onItemFound: (item, index) {
        // 你可以在这里自定义搜索到item时的行为
        print('Found item: $item at index: $index');
      },
      onClear: () {
        setState(() {
          selectedValue = null;
        });
      },
      clearIcon: Icon(Icons.clear),
      selectedValue: selectedValue,
      placeholder: Text('Select a fruit'),
      popupTitle: Center(child: Text('Fruits')),
      popupItemStyle: TextStyle(color: Colors.black),
      searchInputDecoration: InputDecoration(
        border: OutlineInputBorder(),
        prefixIcon: Icon(Icons.search),
        hintText: 'Search...',
        labelText: 'Search'
      ),
    );
  }
}

在这个示例中,我们创建了一个简单的Flutter应用,其中包含一个SimpleSearchDropdown组件。我们定义了一些水果名称作为下拉选项,并设置了组件的标题、搜索提示、项构建器、选择项时的回调、找到项时的回调、清除按钮的图标、选中的值、占位符、弹出标题、弹出项的样式以及搜索输入框的装饰。

当你运行这个应用时,你会看到一个带有搜索功能的下拉选择组件,你可以在其中搜索和选择水果。选择后的值会显示在组件的占位符位置。

回到顶部