Flutter搜索栏插件forking_search_bar的使用
Flutter搜索栏插件forking_search_bar的使用
变更
- 更新了依赖项
- 使其能够在新版本的Flutter中编译
预览
安装
在你的Flutter项目的pubspec.yaml
文件中,添加以下依赖:
dependencies:
...
forking_search_bar: ^3.0.0
基本示例与建议
你可以通过以下示例创建一个带有建议的简单搜索栏示例小部件:
import 'package:forking_search_bar/forking_search_bar.dart';
import 'package:flutter/material.dart';
void main() {
runApp(const MyHomePage());
}
class MyHomePage extends StatefulWidget {
const MyHomePage({Key? key}) : super(key: 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'
];
[@override](/user/override)
Widget build(BuildContext context) {
return MaterialApp(
title: 'Example',
theme: ThemeData(
primarySwatch: Colors.orange
),
home: Scaffold(
appBar: ForkingSearchBar(
title: const Text('Example'),
onSearch: (value) => setState(() => searchValue = value),
suggestions: _suggestions
),
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')
)
)
);
}
}
注意: 如果你想创建一个浮动AppBar,并且希望body内容在AppBar后面,你需要将Scaffold属性extendBodyBehindAppBar
设置为true。并且建议将Scaffold包裹在一个SafeArea内。
API
属性 | 类型 | 必填 | 描述 | 默认值 |
---|---|---|---|---|
title | Widget | ✔️ | 在AppBar内部显示的标题 | |
onSearch | Function(String) | ✔️ | 返回当前搜索值。当搜索关闭时,此方法返回空值以清除当前搜索 | |
actions | List<Widget> | ❌ | 可以显示在AppBar内的额外自定义操作 | |
leading | Widget | ❌ | 可用于向AppBar添加前导图标 | |
backgroundColor | Color | ❌ | 可用于更改AppBar背景颜色 | |
foregroundColor | Color | ❌ | 可用于更改AppBar前景色 | |
elevation | double | ❌ | 可用于更改AppBar的阴影高度 | 5 |
iconTheme | IconThemeData | ❌ | 可用于设置AppBar图标的自定义图标主题 | |
appBarHeight | double | ❌ | 可用于更改AppBar的高度 | 56 |
animationDuration | Duration | ❌ | 可用于设置AppBar搜索显示和隐藏动画的持续时间 | Duration(milliseconds: 450) |
isFloating | bool | ❌ | 可用于确定它是普通AppBar还是浮动AppBar | false |
openOverlayOnSearch | bool | ❌ | 可用于确定点击搜索时是否打开建议覆盖层 | false |
titleTextStyle | TextStyle | ❌ | 可用于设置AppBar标题样式 | |
searchBackgroundColor | Color | ❌ | 可用于设置搜索输入框的背景颜色 | |
searchCursorColor | Color | ❌ | 可用于设置搜索文本框光标颜色 | |
searchHintText | String | ❌ | 可用于设置搜索文本框提示文本 | |
searchHintStyle | TextStyle | ❌ | 可用于设置搜索文本框提示样式 | |
searchTextStyle | TextStyle | ❌ | 可用于设置搜索文本框文本样式 | |
searchTextKeyboardType | KeyboardType | ❌ | 可用于设置搜索文本框键盘类型 | |
searchBackIconTheme | IconThemeData | ❌ | 可用于设置搜索文本框后退按钮的自定义图标主题 | |
systemOverlayStyle | SystemUiOverlayStyle | ❌ | 可用于设置AppBar的SystemUiOverlayStyle | |
suggestions | List<String> | ❌ | 可用于创建建议列表 | |
asyncSuggestions | Future<List<String>> Function(String value) | ❌ | 可用于设置异步建议列表 | |
suggestionsElevation | double | ❌ | 可用于更改建议列表的阴影高度 | 5 |
suggestionLoaderBuilder | Widget Function() | ❌ | 可用于创建自定义建议加载器的widget | |
suggestionTextStyle | TextStyle | ❌ | 可用于更改建议文本样式 | |
suggestionBackgroundColor | Color | ❌ | 可用于更改建议列表背景颜色 | |
suggestionBuilder | Widget Function(String data) | ❌ | 可用于创建自定义建议项widget | |
onSuggestionTap | Function(String data) | ❌ | 可用于设置点击建议项的自定义动作(而不是默认填充文本框) | |
debounceDuration | Duration | ❌ | 可用于设置异步数据获取的去抖时间 | Duration(milliseconds: 400) |
showClearSearchIcon | bool | ❌ | 可用于显示搜索文本框清除按钮 | false |
searchClearIconTheme | IconThemeData | ❌ | 可用于设置搜索文本框清除按钮的自定义图标主题 | |
searchTextDirection | TextDirection | ❌ | 可用于更改文本方向 | TextDirection.ltr |
putActionsOnRight | bool | ❌ | 可用于确定动作按钮是否放置在AppBar右侧 | false |
cancelableSuggestions | bool | ❌ | 可用于允许用户通过按ESC或移动设备上的后退键取消建议覆盖层 | false |
问题与建议
如果你遇到任何问题或有任何建议,可以通过提交问题来反馈。
贡献者
以下是我们的优秀贡献者名单:
- Seiji Tanaka
- Victor Gabriel
- Ivan Terekhin
- Dolev Franco
- Esaias Westberg (forked)
感谢支持!
完整示例
import 'package:forking_search_bar/forking_search_bar.dart';
import 'package:flutter/material.dart';
void main() {
runApp(const MyHomePage());
}
class MyHomePage extends StatefulWidget {
const MyHomePage({Key? key}) : super(key: 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: ForkingSearchBar(
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搜索栏插件forking_search_bar的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter搜索栏插件forking_search_bar的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
forking_search_bar
是一个用于 Flutter 的搜索栏插件,它提供了一个可定制的搜索栏组件,允许用户输入搜索查询并触发搜索操作。以下是如何在 Flutter 项目中使用 forking_search_bar
的基本步骤。
1. 添加依赖
首先,你需要在 pubspec.yaml
文件中添加 forking_search_bar
的依赖:
dependencies:
flutter:
sdk: flutter
forking_search_bar: ^1.0.0 # 请检查最新版本
然后运行 flutter pub get
来获取依赖。
2. 导入包
在你的 Dart 文件中导入 forking_search_bar
:
import 'package:forking_search_bar/forking_search_bar.dart';
3. 使用 ForkingSearchBar
ForkingSearchBar
可以像其他 Flutter 组件一样使用。以下是一个简单的示例:
class SearchPage extends StatefulWidget {
[@override](/user/override)
_SearchPageState createState() => _SearchPageState();
}
class _SearchPageState extends State<SearchPage> {
String _searchQuery = '';
[@override](/user/override)
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Search Example'),
),
body: Column(
children: [
ForkingSearchBar(
onChanged: (query) {
setState(() {
_searchQuery = query;
});
},
onSubmitted: (query) {
// 处理搜索提交
print('Search submitted: $query');
},
hintText: 'Search...',
),
Expanded(
child: ListView.builder(
itemCount: 10, // 假设有10个搜索结果
itemBuilder: (context, index) {
return ListTile(
title: Text('Result $index'),
);
},
),
),
],
),
);
}
}
4. 自定义 ForkingSearchBar
ForkingSearchBar
提供了多个可定制的属性,例如:
hintText
: 搜索栏的提示文本。onChanged
: 当用户输入时触发的回调。onSubmitted
: 当用户提交搜索时触发的回调。decoration
: 自定义搜索栏的外观。
ForkingSearchBar(
hintText: 'Search for something...',
onChanged: (query) {
setState(() {
_searchQuery = query;
});
},
onSubmitted: (query) {
print('Search submitted: $query');
},
decoration: InputDecoration(
border: OutlineInputBorder(
borderRadius: BorderRadius.circular(8.0),
),
filled: true,
fillColor: Colors.grey[200],
prefixIcon: Icon(Icons.search),
),
)
5. 处理搜索逻辑
你可以根据 _searchQuery
的状态来过滤或显示搜索结果。例如:
List<String> _searchResults = [];
void _performSearch(String query) {
setState(() {
_searchResults = _allItems.where((item) => item.contains(query)).toList();
});
}
[@override](/user/override)
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Search Example'),
),
body: Column(
children: [
ForkingSearchBar(
onChanged: (query) {
_performSearch(query);
},
onSubmitted: (query) {
_performSearch(query);
},
hintText: 'Search...',
),
Expanded(
child: ListView.builder(
itemCount: _searchResults.length,
itemBuilder: (context, index) {
return ListTile(
title: Text(_searchResults[index]),
);
},
),
),
],
),
);
}