IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 移动开发 -> Flutter开发学习课程携程app开发(三) -> 正文阅读

[移动开发]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)]

  移动开发 最新文章
Vue3装载axios和element-ui
android adb cmd
【xcode】Xcode常用快捷键与技巧
Android开发中的线程池使用
Java 和 Android 的 Base64
Android 测试文字编码格式
微信小程序支付
安卓权限记录
知乎之自动养号
【Android Jetpack】DataStore
上一篇文章      下一篇文章      查看所有文章
加:2021-11-11 12:49:24  更:2021-11-11 12:49:28 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 4:06:37-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码