1.效果展示

需要实现的功能:

  1. 自定义一个 SearchBar, 它在主页和搜索页会呈现不同的状态显示。
  2. 在搜索框中无输入的时候显示一个语音小图标,有输入的时候显示一个清除图标。
  3. 在 HomePage 首页中,用一个 Stack 将 appBar 叠加在内容区的上方,通过监听 NotificationListener 的滚动来改变 appBar的背景色。
  4. 在搜索界面中 SearchPage 中,实现了一个快搜的功能,并且高亮搜索的关键字,通过 ListView 来展示搜索的结果。

学习到的知识点:

  • 自定义搜索框 Widget,在不同的界面展示不同的效果。
  • 实现快搜功能,根据输入的 keyword 及时查询接口展示。
  • 关键字高亮处理 TextSpan的使用。
  • 常用输入控件 TextField 的使用,监听输入结果进行快搜过滤。

2.关键代码说明

1.搜索接口数据请求:

import 'dart:async';import 'package:dio/dio.dart';
import 'package:flutter_trip2/model/search_model.dart';const SEARCH_URL ='https://m.ctrip.com/restapi/h5api/searchapp/search?source=mobileweb&action=autocomplete&contentType=json&keyword=';/// 搜索接口
class SearchDao {static Future<SearchModel> fetch(String keyword) async {Response response = await Dio().get(SEARCH_URL + keyword);if (response.statusCode == 200) {// 只有当输入的内容与服务端返回的内容一致时才渲染SearchModel model = SearchModel.fromJson(response.data);model.keyword = keyword;return model;} else {throw Exception('Failed to load search');}}
}

2.自定义 SearchBar:

HomePage中,通过滑动页面改变 appBar 的背景透明度:


1.关键代码如下:


2.searchBar 的实现:

3.完整代码

SearchBar完整代码GitHub地址

3.searchPage 页面实现:

1.根据输入的内容进行快搜

将搜索的关键字保存,当请求成功后做一个比对,相同才进行渲染。

2.搜索的内容展示

内容展示区由一个 ListView 来承载。每个 Item 布局 左边是一个分类的图标展示。右侧是一个 Title 的标题 和一个 SubTitle 的分类。并对关键搜索的关键词进行高亮展示。

1.高亮展示,首先将关键词在搜索结果中切出来,然后对结果进行拼接。

2.定义 Title 样式


3.定义副标题样式


4.根据每个 Item 的类型匹配对应的图标

assets 目录下存有对应的类型图标文件,我们通过 AssetImage 去加载对应的图片,记得在 pubspec.yaml 中导入它

3.完整代码地址


SearchPage 完整代码

3.搜索框的实现涉及到的代码

通过Git提交记录可以看到每次的修改点。

Flutter开发学习课程携程app开发(三)相关推荐

  1. Flutter开发学习课程携程app开发(完)

    1.Flutter 列表选择器插件 1. 推荐插件:azlistview Flutter 城市列表.联系人列表,索引&悬停.基于scrollable_positioned_list.AzLis ...

  2. Flutter开发学习课程携程app开发(一)

    引言 数据来源mooc网学习视频课程. 1.页面数据 1.数据展示 接口地址: json 格式 对应的数据界面展示效果: 2.数据请求 应用Dio进行数据请求:home_dao.dart 在 配置文件 ...

  3. Flutter开发学习课程携程app开发(二)

    1.旅拍界面展示 2.界面布局 顶部是 TabBar 配合 TabBarView 实现页面滑动翻页 TabBarView 用 Flexible 包裹 Flexible 包裹充满整个页面 内容区部分采用 ...

  4. RN开发实践——仿携程App(三)

    文章最后附上源码地址 上一片博客链接RN开发实践--仿携程App(二) 实现首页中间的内容栏 今天实现首页中间的内容栏,原效果如下: 红框就是今天需要实现的内容 这里可以拆解成四个部分,每个部分都是由 ...

  5. RN开发实践——仿携程App(二)

    文章最后附上源码地址 上一片博客链接RN开发实践--仿携程App(一) 实现首页的轮播图 Swiper简介 The best Swiper component for React Native.Swi ...

  6. RN开发实践——仿携程App(一)

    文章最后附上项目地址. 1.新建项目 在控制台执行下面命令( 前提是已经搭建好react-native的开发环境 ): react-native init XieCheng // XieCheng 是 ...

  7. 干货 | 携程APP Native/RN内嵌Flutter UI混合开发实践和探索

    作者简介 Deway,携程资深工程师,iOS客户端开发,热衷于大前端和动态化技术: Frank,携程高级工程师,关注移动端热门技术,安卓客户端开发. 前言 随着各种多端技术的蓬勃发展,如今的移动端和前 ...

  8. 3星|《大产品,小团队》:携程软件开发流程改进的故事

    大产品,小团队:携程敏捷技术与管理转型实战 携程集团创作,作者有产品.开发.测试.PMO等多种角色.有一点比较怪异,每个章节的作者是放在书的最后部分的. 主要内容是携程的软件开发流程改进的故事.携程的 ...

  9. php携程 线程,携程api开发解决方法

    携程api开发 本帖最后由 lziyanl 于 2014-06-03 13:53:29 编辑 如何获取上图的内容信息?在携程没找到对应接口,询问官方群,基本不搭理! ------解决方案------- ...

最新文章

  1. ISME | 通过长读长宏基因组测序揭示南极土壤未培养细菌的生物合成潜力
  2. android 按钮放中间,Android实现button居中的方法
  3. [杂记]对RSA算法的数学原理的一点思考
  4. 线性表的链式存储结构(C语言版)
  5. matlab如何创建callback函数_如何学好MATLAB GUI
  6. Java提高篇 —— Java关键字之static的四种用法
  7. 控制台文字对战游戏 初始版
  8. mysql 存储过程 out list_MySQL存储过程中的IN,OUT,INOUT类型 用法
  9. cmd长ping记录日志和时间_Ping记录时间的方法
  10. 递归算法经典实例小结(C#实现)
  11. 数据库系统课程设计(高校成绩管理数据库系统的设计与实现)
  12. nvidia驱动缓存能清理吗?
  13. 解决hexo博客标题出错-》title: Python问题解决 re.error: unbalanced parenthesis at pos
  14. python判断闰年程序_Python 判断闰年
  15. 联想昭阳E43闪屏|屏幕有亮线|问题交流QQ群群号
  16. 查询给定区域内曲面平均高程
  17. 如何在iPhone和iPad上的Safari中在网页上查找文本
  18. 7、统计字母、空格、数字 与 其它字符的个数
  19. 2023展望未来的stripe经验之谈
  20. 惠州技校那间有读计算机网络的,惠州有哪些公办职校中专学校

热门文章

  1. Wireshark抓包分析结果中的LG bit和IG bit
  2. Android_基于g-sensor的走路,跑步的识别
  3. 计算机右击管理在哪,电脑权限管理在哪里
  4. GFFcompare详解
  5. php jwt token刷新方案,JWT刷新token策略
  6. 计算机毕业设计springboot网上体育用品商城系统
  7. BC1.2协议以及QC2.0/3.0快充协议学习笔记
  8. 人事管理系统html,JSP实现简单人事管理系统
  9. vue+element实现鼠标移入出现按钮,并点击图片可跳转页面
  10. Docker操作命令汇总