Flutter搜索栏插件flutter_easy_search_bar的使用

发布于 1周前 作者 itying888 来自 Flutter

Flutter搜索栏插件flutter_easy_search_bar的使用

简介

flutter_easy_search_bar 是一个Flutter插件,用于在应用程序中处理搜索功能。它可以放置在 AppBar 中,也可以根据需要放置在应用程序主体中。

预览

以下是 flutter_easy_search_bar 的预览效果:

Default AppBar Preview Floating AppBar Preview

安装

在你的 pubspec.yaml 文件中添加以下依赖项:

dependencies:
  flutter_easy_search_bar: ^0.0.1

基本示例(带建议)

下面是一个简单的带有建议功能的搜索栏示例:

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

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

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

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

class _MyHomePageState extends State<MyHomePage> {
  String searchValue = '';
  final List<String> _suggestions = [
    'Afeganistan',
    'Albania',
    'Algeria',
    'Australia',
    'Brazil',
    'German',
    'Madagascar',
    'Mozambique',
    'Portugal',
    'Zambia'
  ];

  // 异步获取建议列表
  Future<List<String>> _fetchSuggestions(String searchValue) async {
    await Future.delayed(const Duration(milliseconds: 750));

    return _suggestions.where((element) {
      return element.toLowerCase().contains(searchValue.toLowerCase());
    }).toList();
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Example',
      theme: ThemeData(primarySwatch: Colors.orange),
      home: Scaffold(
        appBar: EasySearchBar(
          title: const Text('Example'), // 设置标题
          onSearch: (value) => setState(() => searchValue = value), // 搜索回调
          actions: [
            IconButton(icon: const Icon(Icons.person), onPressed: () {}), // 自定义操作按钮
          ],
          asyncSuggestions: (value) async => await _fetchSuggestions(value), // 异步建议
        ),
        drawer: Drawer(
          child: ListView(
            padding: EdgeInsets.zero,
            children: [
              const DrawerHeader(
                decoration: BoxDecoration(
                  color: Colors.blue,
                ),
                child: Text('Drawer Header'),
              ),
              ListTile(
                title: const Text('Item 1'),
                onTap: () => Navigator.pop(context),
              ),
              ListTile(
                title: const Text('Item 2'),
                onTap: () => Navigator.pop(context),
              )
            ],
          ),
        ),
        body: Center(
          child: Text('Value: $searchValue'), // 显示当前搜索值
        ),
      ),
    );
  }
}

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

1 回复

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


当然,以下是一个关于如何使用 flutter_easy_search_bar 插件的示例代码。这个插件提供了一个简单且功能强大的搜索栏组件,适用于Flutter应用程序。

首先,确保你已经在 pubspec.yaml 文件中添加了 flutter_easy_search_bar 的依赖:

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

然后运行 flutter pub get 来获取依赖。

接下来,你可以在你的 Dart 文件中使用 FlutterEasySearchBar。以下是一个简单的示例,展示了如何设置和使用搜索栏:

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

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Easy Search Bar Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: MyHomePage(),
    );
  }
}

class MyHomePage extends StatefulWidget {
  @override
  _MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  // 模拟数据列表
  final List<String> items = List.generate(100, (index) => 'Item $index');
  String? searchQuery = '';

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Flutter Easy Search Bar Demo'),
      ),
      body: Padding(
        padding: const EdgeInsets.all(8.0),
        child: Column(
          children: [
            // 使用 FlutterEasySearchBar
            FlutterEasySearchBar(
              hintText: 'Search...',
              onChanged: (query) {
                setState(() {
                  searchQuery = query;
                });
              },
              onSearchPressed: () {
                // 当用户点击搜索按钮时执行的逻辑
                print('Search for: $searchQuery');
              },
              suggestions: searchQuery == null || searchQuery!.isEmpty
                  ? []
                  : items
                      .where((item) =>
                          item.toLowerCase().contains(searchQuery!.toLowerCase()))
                      .toList(),
              suggestionBuilder: (context, suggestion) {
                return ListTile(
                  leading: Icon(Icons.label),
                  title: Text(suggestion),
                );
              },
            ),
            // 显示搜索结果(如果有的话)
            Expanded(
              child: searchQuery == null || searchQuery!.isEmpty
                  ? Center(child: Text('No search results'))
                  : ListView.builder(
                      itemCount: items
                          .where((item) =>
                              item.toLowerCase().contains(searchQuery!.toLowerCase()))
                          .toList()
                          .length,
                      itemBuilder: (context, index) {
                        final item = items
                            .where((item) =>
                                item.toLowerCase().contains(searchQuery!.toLowerCase()))
                            .toList()[index];
                        return ListTile(
                          title: Text(item),
                        );
                      },
                    ),
            ),
          ],
        ),
      ),
    );
  }
}

代码解释

  1. 依赖导入:确保在 pubspec.yaml 中添加了 flutter_easy_search_bar 依赖。
  2. 数据列表:创建一个包含100个字符串项的模拟数据列表。
  3. 搜索栏:使用 FlutterEasySearchBar 组件,并设置相关属性,如 hintTextonChangedonSearchPressed
  4. 搜索建议:根据用户的输入动态生成搜索建议列表。
  5. 搜索结果:在搜索栏下方显示搜索结果列表。如果没有输入查询,则显示 “No search results”。

这个示例展示了如何使用 flutter_easy_search_bar 插件创建一个基本的搜索功能,包括搜索建议的显示和搜索结果的过滤。你可以根据自己的需求进一步定制和扩展这个示例。

回到顶部