We read every piece of feedback, and take your input very seriously.
To see all available qualifiers, see our documentation.
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
App 中的搜索功能非常常见,Flutter 提供了内置的搜索功能,如最常见的把搜索功能放置在 appbar 的右边:
import 'package:flutter/material.dart'; void main() => runApp(MaterialApp( home: MyApp(), )); class MyApp extends StatelessWidget { const MyApp({Key key}) : super(key: key); @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar( actions: <Widget>[ IconButton( icon: Icon(Icons.search), onPressed: () { }, ) ], ), ); } }
使用内置的搜索功能需要实现自己的 Delegate,简单回顾一下,常见的搜索功能:常见的搜索输入文字过程中有相应的提示,输入完成后显示对应的搜索结果,实现一个简单的如下:
class SearchBarView extends SearchDelegate<String> { String searchHint = '请输入内容'; @override List<Widget> buildActions(BuildContext context) { // TODO: implement buildActions return [Text('hello')]; } @override Widget buildLeading(BuildContext context) { // TODO: implement buildLeading return Icon(Icons.book); } @override Widget buildResults(BuildContext context) { // TODO: implement buildResults return Text('world'); } @override Widget buildSuggestions(BuildContext context) { // TODO: implement buildSuggestions return Text('ooo'); } }
实现的方法主要有:
buildActions 显示在最右边的图标列表。
buildLeading 搜索栏左边的图标,一般都是返回。
buildResults 这个回调里进行搜索和并返回自己的搜索结果。
buildSuggestions 返回建议搜索结果。
void main() => runApp(MaterialApp( home: MyApp(), )); class MyApp extends StatelessWidget { const MyApp({Key key}) : super(key: key); @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar( actions: <Widget>[ IconButton( icon: Icon(Icons.search), onPressed: () { showSearch(context: context, delegate: SearchBarView()); }, ) ], ), ); } }
效果如下:
实现一个简单搜索qq音乐的例子,如下:
import 'package:flutter/material.dart'; import 'package:dio/dio.dart'; import 'dart:convert'; class hotSearch extends StatefulWidget { hotSearch({Key key}) : super(key: key); _hotSearchState createState() => _hotSearchState(); } class _hotSearchState extends State<hotSearch> { List data = []; getData() async { Dio dio = new Dio(); Response res = await dio.get( 'https://c.y.qq.com/splcloud/fcgi-bin/gethotkey.fcg?g_tk=5381&uin=0¬ice=0&platform=h5&needNewCode=1&_=1513317614040'); var hotkey = json.decode(res.data)['data']['hotkey']; setState(() { data = hotkey; }); } @override void initState() { // TODO: implement initState super.initState(); this.getData(); } @override Widget build(BuildContext context) { return Container( child: ListView.builder( itemBuilder: (BuildContext context, int index) { return Text(data[index]['k']); }, itemCount: data.length, )); } } class searchResult extends StatefulWidget { String keyword; searchResult({Key key, this.keyword}) : super(key: key); _searchResultState createState() => _searchResultState(); } class _searchResultState extends State<searchResult> { List data = []; getData() async { Dio dio = new Dio(); print(widget.keyword); String word = widget.keyword; Response res = await dio.get( 'https://c.y.qq.com/soso/fcgi-bin/client_search_cp?g_tk=5381&p=1&n=20&w=$word&format=json'); print('key'); List songs = json.decode(res.data)['data']['song']['list']; setState(() { data = songs; }); } @override void initState() { // TODO: implement initState super.initState(); this.getData(); } @override Widget build(BuildContext context) { return Container( child: ListView.builder( itemCount: data.length, itemBuilder: (BuildContext context, int index) { return Text(data[index]['songname']); }, )); } } class SearchBarView extends SearchDelegate<String> { String searchHint = '请输入内容'; @override List<Widget> buildActions(BuildContext context) { // TODO: implement buildActions return [Text('hello')]; } @override Widget buildLeading(BuildContext context) { // TODO: implement buildLeading return Icon(Icons.book); } @override Widget buildResults(BuildContext context) { // TODO: implement buildResults return searchResult( keyword: query, ); } @override Widget buildSuggestions(BuildContext context) { // TODO: implement buildSuggestions return hotSearch(); } } void main() => runApp(MaterialApp( home: MyApp(), )); class MyApp extends StatelessWidget { const MyApp({Key key}) : super(key: key); @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar( actions: <Widget>[ IconButton( icon: Icon(Icons.search), onPressed: () { showSearch(context: context, delegate: SearchBarView()); }, ) ], ), ); } }
The text was updated successfully, but these errors were encountered:
No branches or pull requests
App 中的搜索功能非常常见,Flutter 提供了内置的搜索功能,如最常见的把搜索功能放置在 appbar 的右边:
使用内置的搜索功能需要实现自己的 Delegate,简单回顾一下,常见的搜索功能:常见的搜索输入文字过程中有相应的提示,输入完成后显示对应的搜索结果,实现一个简单的如下:
实现的方法主要有:
buildActions 显示在最右边的图标列表。
buildLeading 搜索栏左边的图标,一般都是返回。
buildResults 这个回调里进行搜索和并返回自己的搜索结果。
buildSuggestions 返回建议搜索结果。
效果如下:
实现一个简单搜索qq音乐的例子,如下:
The text was updated successfully, but these errors were encountered: