Flutter搜索栏插件flutter_search_bar的使用
Flutter搜索栏插件flutter_search_bar的使用
存档通知
该存储库已存档。3.0.0 是我将发布的最后一个版本。
搜索栏仍然可以使用,如果您愿意,可以对其进行分叉。我只是没有时间维护它。
flutter_search_bar
一个简单且主要自动化的 Flutter(Dart)材料搜索栏。
注意:使用 flutter_search_bar
而不是 search_bar
—— 我同时拥有这两个包,但我对 search_bar
有一点点锁定,所以它不会被更新。
截图
正常状态(搜索尚未激活,仅设置了 title
和 actions
,其中唯一的操作是一个搜索按钮)
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
更多关于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]);
},
);
},
),
),
),
],
);
},
),
),
],
),
);
}
}
代码解释:
- 依赖引入:在
pubspec.yaml
中添加flutter_search_bar
依赖。 - 数据准备:在
_MyHomePageState
类中,我们定义了一个suggestions
列表,作为搜索建议的数据源。 - 控制器:创建了一个
SearchBarController
实例来控制搜索栏的行为。 - 搜索栏构建:使用
SearchBar<String>
组件来构建搜索栏,并传递控制器、建议列表和回调函数。 - 搜索逻辑:在
builder
函数中,我们根据搜索输入过滤建议列表,并构建相应的 UI。 - 回调处理:定义了
onSuggestionSelected
、onChanged
和onSubmitted
回调来处理用户交互。
这个示例展示了如何使用 flutter_search_bar
插件来实现一个基本的搜索功能,包括搜索建议、加载状态、错误处理和空状态的处理。你可以根据实际需求进一步定制和扩展这个示例。