博客地址:

https://jspang.com/post/flutterDemo.html#toc-1b4

视频地址:https://www.bilibili.com/video/av39709290/?p=11

定义类searchBarDelegate

继承SearhDelegate 并复写里面的方法

需要复写里面的四个方法。我们定义类:searchBarDelegate

重写第一个方法 buildActions

重写的第一个方法:buildActions 就是搜索的时候右边的差号。里面接收 一个上下文。一般我们返回一个IconButton

query就是我们搜索的参数。我们设置为空。

点击事件,一点击的时候就把搜索内容设置为空

第二个方法buildLeading

复写第二个方法:就是最左侧我们返回的箭头

下图中的build单词拼错了后续已经改正过来

重写第三个方法:buildResults

再重写我们的搜索结果:buildResults

我们返回Container容器。child里面放Card组件,为了让搜索结果好看一点

为了Card卡片变得好看一些,我们给它一个亮红色

重写第四个方法buildSuggestions

再重写最重要的一个方法:

用户一边搜索一般提示用户的内容;

这里我们采用三元运算符的方式

效果展示

最终代码

  1. import 'package:flutter/material.dart';
  2. import 'search_bar_demo.dart';
  3. void main() => runApp(MyApp());
  4.  
  5. class MyApp extends StatelessWidget {
  6. @override
  7. Widget build(BuildContext context) {
  8. return MaterialApp(
  9. title: 'Flutter Demo',
  10. theme: ThemeData.light(),//轻量级的皮肤
  11. home: SearchBarDemo()
  12. );
  13. }
  14. }

main.dart

  1. import 'package:flutter/material.dart';
  2. import 'asset.dart';
  3.  
  4. class SearchBarDemo extends StatefulWidget {
  5. @override
  6. _SearchBarDemoState createState() => _SearchBarDemoState();
  7. }
  8.  
  9. class _SearchBarDemoState extends State<SearchBarDemo> {
  10. @override
  11. Widget build(BuildContext context) {
  12. return Scaffold(
  13. appBar: AppBar(
  14. title:Text('SearchBarDemo'),
  15. actions: <Widget>[
  16. IconButton(
  17. icon:Icon(Icons.search),
  18. onPressed: (){
  19. showSearch(context:context,delegate: searchBarDelegate());
  20. },
  21. )
  22. ],
  23. ),
  24. );
  25. }
  26. }
  27.  
  28. class searchBarDelegate extends SearchDelegate<String>{
  29.  
  30. @override
  31. List<Widget> buildActions(BuildContext context)
  32. {
  33. return [
  34. IconButton(
  35. icon: Icon(Icons.clear),
  36. onPressed: ()=>query="",
  37. )
  38. ];
  39. }
  40. @override
  41. Widget buildLeading(BuildContext context)
  42. {
  43. return IconButton(
  44. icon: AnimatedIcon(
  45. icon: AnimatedIcons.menu_arrow,
  46. progress: transitionAnimation,
  47. ),
  48. onPressed: ()=>close(context,null),//关闭context上下文
  49. );
  50. }
  51. @override
  52. Widget buildResults(BuildContext context)
  53. {
  54. return Container(
  55. width:100.0,
  56. height: 100.0,
  57. child: Card(
  58. color: Colors.redAccent,//为了卡片好看,设置一个亮红色
  59. child: Center(
  60. child: Text(query),
  61. ),
  62. ),
  63. );
  64. }
  65.  
  66. @override
  67. Widget buildSuggestions(BuildContext build)
  68. {
  69. final suggestionList=query.isEmpty
  70. ? recentSuggest
  71. :searchList.where((input)=> input.startsWith(query)).toList();
  72. //这里发返回动态列表
  73. return ListView.builder(
  74. itemCount: suggestionList.length,
  75. itemBuilder: (contex,index)=> ListTile(
  76. title: RichText(//这里使用富文本
  77. text: TextSpan(
  78. text: suggestionList[index].substring(,query.length),//截取搜索的关键的长度
  79. style: TextStyle(//截取的字给他一个黑色字体样式,并加粗
  80. color: Colors.black,fontWeight: FontWeight.bold
  81. ),
  82. children: [
  83. TextSpan(
  84. text: suggestionList[index].substring(query.length),
  85. style: TextStyle(color: Colors.grey)
  86. )
  87. ]
  88. ),
  89. ),
  90. ),
  91. );
  92. }
  93. }

search_bar_demo.dart

  1. const searchList=[
  2. "jiejie-大长腿",
  3. "jiejie-水蛇腰",
  4. "gege-帅气欧巴",
  5. "gege-小鲜肉",
  6. ];
  7. //默认的数组
  8. const recentSuggest=[
  9. "推荐-1",
  10. "推荐-2"
  11. ];

asset.dart

20个Flutter实例视频教程-第11节: 一个不简单的搜索条-2的更多相关文章

  1. 20个Flutter实例视频教程-第10节: 一个不简单的搜索条-1

    20个Flutter实例视频教程-第10节: 一个不简单的搜索条-1 视频地址: https://www.bilibili.com/video/av39709290/?p=10 博客地址: https ...

  2. 20个Flutter实例视频教程-第13节: 展开闭合案例

    20个Flutter实例视频教程-第13节: 展开闭合案例 视频地址: https://www.bilibili.com/video/av39709290/?p=13 博客地址: https://js ...

  3. 20个Flutter实例视频教程-第03节: 不规则底部工具栏制作-1

    第03节: 不规则底部工具栏制作-1 博客地址: https://jspang.com/post/flutterDemo.html#toc-973 视频地址: https://www.bilibili ...

  4. 20个Flutter实例视频教程-第05节: 酷炫的路由动画-1

    视屏地址: https://www.bilibili.com/video/av39709290/?p=5 博客地址: https://jspang.com/post/flutterDemo.html# ...

  5. 20个Flutter实例视频教程-第02节: 底部导航栏制作-2

    视频地址: https://www.bilibili.com/video/av39709290?p=2 博客地址: https://jspang.com/post/flutterDemo.html#t ...

  6. 20个Flutter实例视频教程-第04节: 不规则底部工具栏制作-2

    视频地址: https://www.bilibili.com/video/av39709290/?p=4 博客地址: https://jspang.com/post/flutterDemo.html# ...

  7. 20个Flutter实例视频教程-第06节: 酷炫的路由动画-2

    博客地址: https://jspang.com/post/flutterDemo.html#toc-94f 视频地址: https://jspang.com/post/flutterDemo.htm ...

  8. 20个Flutter实例视频教程-第07节: 毛玻璃效果制作

    视频地址: https://www.bilibili.com/video/av39709290/?p=7 博客地址: https://jspang.com/post/flutterDemo.html# ...

  9. 20个Flutter实例视频教程-第08节: 保持页面状态

    博客地址: https://jspang.com/post/flutterDemo.html#toc-bb9 视频地址: https://www.bilibili.com/video/av397092 ...

随机推荐

  1. 修改mysql数据库 密码

    将密码改成123456 update mysql.user set authentication_string=password('123456') where user='root' and Hos ...

  2. *Android 多线程下载 仿下载助手(改进版)

    首先声明一点: 这里的多线程下载 并非指的 多个线程下载一个 文件.而是 每一个线程 负责一个文件. 真正的多线程 希望后面能给大家带来.  -------------  欢迎 爱学习的小伙伴 加群 ...

  3. css实现轮播效果图

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  4. PHP对称加密类

    <?php /** * Created by PhpStorm. * User: zongbinghuang * Date: 2017/7/31 * Time: 15:13 */ namespa ...

  5. 例题6-16 单词 UVa10129

    1.题目描写叙述:点击打开链接 2.解题思路:本题利用欧拉回路存在条件解决. 能够将全部的单词看做边,26个字母看做端点,那么本题事实上就是问是否存在一条路径,能够到达全部出现过的字符端点. 因为本题 ...

  6. 2016/7/7 设置wamp2.5 mysql密码 重点是mysql版本

    密码设置时要注意mysql版本.版本不同,效果不同. 方法/步骤     安装好wamp后,右击wamp->MySQl->MySql console(控制台)   提示输入密码,因为密码为 ...

  7. 九度OJ 1124:Digital Roots(数根) (递归)

    时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:2963 解决:1066 题目描述: The digital root of a positive integer is found by s ...

  8. Theseven relationsarein threecategories:equivalent, congruent, andsimilar.

    http://www.math.pitt.edu/~xfc/math2370/chap5.pdf

  9. mount available

    Mount (computing), the process of making a file system accessible mount (Unix), the utility in Unix- ...

  10. IOS 文件夹结构

    版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/MyGameZone/article/details/24494765 IOS文件夹结构 说明 这些仅 ...