Flutter开发学习课程携程app开发(三)

1.效果展示

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-MTsejVFZ-1636550525807)(../pic/1636546107297.gif)]

需要实现的功能:

  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 的背景透明度:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-jrBPcAxo-1636550525809)(../pic/image-20211110204312186.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-7kkQLEBs-1636550525810)(../pic/image-20211110204240795.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-goJkCZgj-1636550525811)(../pic/image-20211110211723569.png)]

1.关键代码如下:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-SUy9DUA1-1636550525812)(../pic/image-20211110205612800.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-DQocORVJ-1636550525813)(../pic/image-20211110205736204.png)]

2.searchBar 的实现:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-v3xmeQFm-1636550525814)(../pic/image-20211110205912525.png)]

3.完整代码

SearchBar完整代码GitHub地址

3.searchPage 页面实现:

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

将搜索的关键字保存,当请求成功后做一个比对,相同才进行渲染。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-YqRgNSVn-1636550525814)(../pic/image-20211110210112297.png)]

2.搜索的内容展示

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-b46RdLZo-1636550525815)(../pic/image-20211110210324589.png)]

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

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

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-7168rkYp-1636550525815)(../pic/image-20211110210901181.png)]

2.定义 Title 样式

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-eaJtIxVL-1636550525816)(../pic/image-20211110211046145.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-CDgImVmX-1636550525816)(../pic/image-20211110210926337.png)]

3.定义副标题样式

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-H8otJdLk-1636550525817)(../pic/image-20211110211100137.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-AbM52atQ-1636550525818)(../pic/image-20211110210948000.png)]

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

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-PU17Jc0I-1636550525818)(../pic/image-20211110211221937.png)]

assets 目录下存有对应的类型图标文件,我们通过 AssetImage 去加载对应的图片,记得在 pubspec.yaml 中导入它
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-s2IWlG26-1636550525819)(../pic/image-20211110211423257.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-tujJ6gTk-1636550525819)(../pic/image-20211110211323851.png)]

3.完整代码地址

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-rG41oHIM-1636550525820)(../pic/image-20211110211621456.png)]
SearchPage 完整代码

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

通过Git提交记录可以看到每次的修改点。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-y88b3rQv-1636550525820)(../pic/image-20211110212106156.png)]

flutter移动电商视频68节讲解 第01节:课程介绍 第02节:建立项目和编写入口文件 第03节:底部导航栏制作 第04节:打通底部导航栏 第05节:dio基础_引入和简单的Get请求 第06节:dio基础_Get请求和动态组件协作 第07节:dio基础_POST请求的使用 第08节:dio基础_伪造请求头获取数据 第09节:移动商城数据请求实战(好戏开始) 第10节:使用FlutterSwiper制作轮播效果 第11节:首页_屏幕适配方案和制作 第12节:首页导航区域编写 第13节:ADBanner组件的编写 第14节:首页_拨打电话操作 第15节:商品推荐区域制作 第16节:补充_切换后页面状态的保持 第17节:首页_楼层区域的编写 第18节:首页_火爆专区商品接口制作 第19节:首页_火爆专区界面制作 第20节:首页上拉加载更多功能的制作 第21节:列表页类别数据接口调试 第22节:JSON解析与复杂模型转换技巧 第23节:列表页大类展示效果制作 第24节:Provide状态管理基础 第25节:列表页_使用Provide控制子类-1 第26节:列表页_使用Provide控制子类-2 第27节:列表页现有Bug的完善 第28节:列表页_商品列表接口调试 第29节: 列表页_商品列表数据模型的建立 第30接:列表页_商品列表UI布局 第31节:列表页_商品列表交互效果制作 第32节:列表页_小类高亮交互效果制作 第33节:列表页_子类和商品列表切换 第34节:列表页_小Bug的修复 第35节:列表页_上拉加载功能的制作 第36节:Fluttertoast组件的介绍 第37节:路由_fluro引入和商品详细页建立 第38节:路由_fluro中Handler文件编写 第39节:路由_fluro的路由配置和静态化 第40节:路由_fluro的全局注入和使用 第41节:详细页_后台数据接口调试 第42节:详细页UI主页面架构搭建 第43节:路由_补充首页跳转到详细页 第44节:详细页_首屏自定义Widget编写 第45节:详细页_说明区域UI编写 第46节:详细页_自建TabBar Widget 第47节:详细页Flutterhtml插件的使用 第48节:详细页_详情和评论切换效果制作 第49节:详细页页_Stack作底部操作栏 第50节:持久化sharedpreferences基础1 第51节:购物车_添加商品 第52节:购物车_建立数据模型 第53节:购物车_大体结构布局 第54节:购物车_商品列表子项组件编写 第55节:购物车_制作底部结算栏的UI 第56节:购物车_制作数量加减按钮UI 第57节:购物车_在Model中增加选中字段 第58节:购物车_删除单个商品功能制作 第59节:购物车_计算商品价格和数量 第60节:购物车_商品选中功能制作 第61节:购物车_商品数量的加减操作 第62节:购物车_首页Provide化 让跳转随心所欲 第63节:购物车_详细页显示购物车商品数量 第64节:会员中心_首页头部布局 第65节:会员中心_订单区域UI编写 第66节:会员中心_编写ListTile的通用方法 第67课:加餐_高德地图插件的使用 第68节:加餐_极光推送插件使用-1 第69节:加餐_极光推送插件使用-2 后端接口API文档
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值