Flutter搜索栏插件flutter_search_bar的使用

Flutter搜索栏插件flutter_search_bar的使用

存档通知

该存储库已存档。3.0.0 是我将发布的最后一个版本。

搜索栏仍然可以使用,如果您愿意,可以对其进行分叉。我只是没有时间维护它。

flutter_search_bar

一个简单且主要自动化的 Flutter(Dart)材料搜索栏。

注意:使用 flutter_search_bar 而不是 search_bar —— 我同时拥有这两个包,但我对 search_bar 有一点点锁定,所以它不会被更新。

截图

正常状态(搜索尚未激活,仅设置了 titleactions,其中唯一的操作是一个搜索按钮)

inBar 设置为 false(背景白色,继承回退按钮)

inBar 设置为 true(背景继承)

使用

一个简单的使用示例:

class _MyHomePageState extends State<MyHomePage> {
  SearchBar searchBar;

  // 构建默认的 AppBar
  AppBar buildAppBar(BuildContext context) {
    return new AppBar(
      title: new Text('我的首页'),
      actions: [searchBar.getSearchAction(context)]
    );
  }  
  
  // 初始化 SearchBar
  _MyHomePageState() {
    searchBar = new SearchBar(
      inBar: false,
      setState: setState,
      onSubmitted: print,
      buildDefaultAppBar: buildAppBar
    );
  }
  
  [@override](/user/override)
  Widget build(BuildContext context) {
    return new Scaffold(
      appBar: searchBar.build(context)
    );
  }
}

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

1 回复

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


当然,以下是一个关于如何使用 flutter_search_bar 插件在 Flutter 中实现搜索栏的代码案例。flutter_search_bar 是一个流行的 Flutter 插件,用于在应用中实现搜索功能。

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

dependencies:
  flutter:
    sdk: flutter
  flutter_search_bar: ^3.0.0  # 请根据需要检查最新版本号

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

接下来,下面是一个简单的示例,展示如何在 Flutter 应用中使用 flutter_search_bar

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

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter 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> suggestions = List<String>.generate(20, (i) => "Item $i");
  final SearchBarController _controller = SearchBarController();

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Flutter Search Bar Demo'),
      ),
      body: Column(
        children: [
          Expanded(
            child: SearchBar<String>(
              controller: _controller,
              suggestions: suggestions,
              onSuggestionSelected: (suggestion) {
                // 用户点击某个建议项时的回调
                print('Selected: $suggestion');
              },
              onChanged: (value) {
                // 搜索栏内容变化时的回调
                print('Search input: $value');
              },
              onSubmitted: (value) {
                // 用户提交搜索时的回调
                print('Search submitted: $value');
              },
              builder: (context, state) {
                return Column(
                  crossAxisAlignment: CrossAxisAlignment.start,
                  children: <Widget>[
                    SearchBar<String>(
                      controller: state.controller,
                      suggestions: state.suggestions.where((suggestion) {
                        final String lowerValue = value.toLowerCase();
                        final String lowerSuggestion = suggestion.toLowerCase();
                        return lowerSuggestion.contains(lowerValue);
                      }).toList(),
                    ),
                    if (state.suggestions.isNotEmpty)
                      SizedBox(height: 8.0),
                    Expanded(
                      child: state.when(
                        loading: () => Center(child: CircularProgressIndicator()),
                        error: (error) => Center(child: Text('Error: $error')),
                        empty: () => Center(child: Text('No suggestions')),
                        hasSuggestions: (suggestions) => ListView.builder(
                          itemCount: suggestions.length,
                          itemBuilder: (context, index) {
                            return ListTile(
                              leading: Icon(Icons.search),
                              title: Text(suggestions[index]),
                              onTap: () {
                                state.controller.close();
                                state.onSuggestionSelected(suggestions[index]);
                              },
                            );
                          },
                        ),
                      ),
                    ),
                  ],
                );
              },
            ),
          ),
        ],
      ),
    );
  }
}

代码解释:

  1. 依赖引入:在 pubspec.yaml 中添加 flutter_search_bar 依赖。
  2. 数据准备:在 _MyHomePageState 类中,我们定义了一个 suggestions 列表,作为搜索建议的数据源。
  3. 控制器:创建了一个 SearchBarController 实例来控制搜索栏的行为。
  4. 搜索栏构建:使用 SearchBar<String> 组件来构建搜索栏,并传递控制器、建议列表和回调函数。
  5. 搜索逻辑:在 builder 函数中,我们根据搜索输入过滤建议列表,并构建相应的 UI。
  6. 回调处理:定义了 onSuggestionSelectedonChangedonSubmitted 回调来处理用户交互。

这个示例展示了如何使用 flutter_search_bar 插件来实现一个基本的搜索功能,包括搜索建议、加载状态、错误处理和空状态的处理。你可以根据实际需求进一步定制和扩展这个示例。

回到顶部