You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
注意上面代码中关于Map和list数据类型的处理,这里我们是不能够直接复制的,否则会出现_TypeError (type 'List<dynamic>' is not a subtype of type 'List<String>')的错误,也就是数据类型转换的问题。 所以对于Map以及List的数据类型,这里我们单独拿出来通过遍历来重新赋值的。
介绍
这一章节代码量可能会比较大,我们将完成沸点的UI以及相应功能编写,完成此篇,你将得到如下的界面效果:
数据准备
由于之前的首页编写中已经介绍了关于本地数据model的使用,这里我们将直接使用线上数据来进行我们的代码编写
通过掘金web版的公开api我们可以知道沸点的请求api地址
从沸点的每一个cell中,我们需要去分析构成该UI,大致需要的字段,通常,在我们的项目开发中,这些也是与开发约束的。
通过分析,我们可以看到沸点的每一个cell分为两种,文字+图片 以及文字+链接的形式,当然,其中每一个沸点也可能没有图片,也有的沸点包含主题、文字中含有链接。这些,在我们定义 沸点的数据model的时候都应该包含进去,所以如下,我们提取我们需要字段
在数据model中,应该包含他的构造函数以及factory中对请求数据的处理
_TypeError (type 'List<dynamic>' is not a subtype of type 'List<String>')
的错误,也就是数据类型转换的问题。 所以对于Map以及List的数据类型,这里我们单独拿出来通过遍历来重新赋值的。定义好数据model后,我们去编写请求方法
编写沸点页面UI
沸点页面,我们需要一些变量阿里存储页面信息,比如沸点list、请求参数、翻页等
编写相关的请求方法,然后在页面初始化的时候调用,
build方法中比较简单,其实就是初始化一个列表。这里再强调下,使用ListView.builder去实现长列表是非常好的选择,其性能也是非常的优越,会进行一些数据回收工作。
在initState的时候,我们进行一些页面的请求和Controller的初始化工作
页面完整UI地址为:pins_page.dart
编写沸点cell
沸点的cell其中有一个难点是content中加载这url,然后url需要翻译成图片,如下:
而从我们获取到的字段来看,这就是单纯的url,所以这里我们需要正则提取相关字段,然后进行拼接。
RegExp(r"((https|http|ftp|rtsp|mms)?:\/\/)[^\s]+")
这里面我们将文字中的链接抽出来作为一个widget
代码地址为:pins_cell_link.dart、pins_list_cell.dart
在cell的content中,这些widget还是需要平铺并且换行展示的。所以这里我们使用 Wrap widget
Axis.horizontal
横向排列,然后允许我们组件换行。这样就会出现得到我们想要的效果总结
如上,我们只是完成了沸点列表页面的一部分,限于篇幅和知识点的吸收,我们将沸点cell的剩余代码编写放到下一章节中。下一章节,我们将完成图片的查看、轮播图,设置页面切换动画以及图片和链接的cellUI编写。
The text was updated successfully, but these errors were encountered: