Flutter 重写导航代理

假数据 代码:

const searchList = [
"aa北京-上海",
"北京-海南 a",
"北京-郑州 bb",
"北京-cc 日本",
"北京dd -韩国"
];

const defalutSuggert = [
"推荐路线 上海 - 郑州",
"推荐路线 西安 - 郑州"
];
代理代码:
import 'package:flutter/material.dart';
import 'asset.dart';
//重写搜索栏
class seachBarDelegat extends SearchDelegate<String>{
@override
List<Widget> buildActions(BuildContext context){
return [
IconButton(
icon: Icon(Icons.clear),
onPressed: () =>query = "",//点击X 把搜索内容置空
),

];
}
@override
Widget buildLeatRding(BuildContext context){//重写左边样式---类似 leftBaritem
return IconButton(
icon: AnimatedIcon(
icon: AnimatedIcons.menu_arrow,progress: transitionAnimation,
 
),//带动画的icon
onPressed: () => close(context,null),//关闭页面
);
}
@override
Widget buildResults (BuildContext context){//重写搜索点击结果
return Container(
width: 100.0,
height: 100.0,
child: Card(
color: Colors.orange,
child: Center(
child: Text(query),
),
),
);
}
@override
Widget buildSuggestions(BuildContext context){//重写搜索结果
final suggestList = query.isEmpty
? defalutSuggert
: searchList.where((input)=>input.startsWith(query)).toList();//按照搜索框的输入检索到匹配的数据后得到结果 - 类似于SQL在列表中根据输入的文字检索到的结果,w但是只能从输入开始的字符比较是否匹配

return ListView.builder(
itemCount: suggestList.length,
itemBuilder: (context,index)=>ListTile(
title: RichText(//富文本
text: TextSpan(
text: suggestList[index].substring(0,query.length),//截取搜索的字 从0位 到 搜索的字
style: TextStyle(
color: Colors.blueAccent,fontWeight: FontWeight.bold//字体加粗
),
children: [
TextSpan(
text:suggestList[index].substring(query.length),//截取之后其他的字
style: TextStyle(
color: Colors.grey
)
)
]
),
),
),
);
}

}
总结:
 

//重写导航代理

 

 

buildSuggestions(//重写搜索结果

//按照搜索框的输入检索到匹配的数据后得到结果 - 类似于SQL在列表中根据输入的文字检索到的结果,w但是只能从输入开始的字符比较是否匹配

 

xxx.where((input)=>input.startWith(query)).tolist();xxx 是集合,从输入开始比较 就是因为有startWith,query是输入的字符

 

)

buildLead(//重写 左边导航栏 控件 类似 leftBarItem

return IconButton(

onpress:()=>close(conext, null);//关闭当前页面

)

 

)

buildResults(//重写点击键盘搜索确认之后的结果

)

 

猜你喜欢

转载自www.cnblogs.com/pp-pping/p/12187904.html