Flutter移动电商实战 --(19)首页_火爆专区商品接口制作
Dart中可选参数的设置
上节课在作通用方法的时候,我们的参数使用了一个必选参数,其实我们可以使用一个可选参数。Dart中的可选参数,直接使用“{}”(大括号)就可以了。可选参数在调用的时候必须使用paramName:value的形式。
我们把上节课的后端接口代码改为如下:
Future request(url,{formData})async{
try{
print('开始获取数据...............');
Response response;
Dio dio = new Dio();
dio.options.contentType=ContentType.parse("application/x-www-form-urlencoded");
if(formData==null){
response = await dio.post(servicePath[url]);
}else{
response = await dio.post(servicePath[url],data:formData);
}
if(response.statusCode==200){
return response.data;
}else{
throw Exception('后端接口出现异常,请检测代码和服务器情况.........');
}
}catch(e){
return print('ERROR:======>${e}');
}
}
然后调用的时候,采用的方式是request('homePageBelowConten',formData:formPage),这样就可以实现可选参数了。
读取火爆专区数据
我们先声明两个变量,一个是火爆专区的商品列表数据,一个是当前的页数。
int page = 1;
List<Map> hotGoodsList=[];
声明好变量后,我们就可以写一个获取数据的方法了。
//火爆商品接口
void _getHotGoods(){
var formPage={'page': page};
request('homePageBelowConten',formData:formPage).then((val){ var data=json.decode(val.toString());
List<Map> newGoodsList = (data['data'] as List ).cast();
setState(() {
hotGoodsList.addAll(newGoodsList);
page++;
}); });
}
做好方法后,再initState方法里执行,就会得到数据了。
火爆专区标题编写
火爆专区,我们先采用State的原始方法,来进行制作,因为这也是很多小伙伴要求的,所以我们主要讲解一下StatefulWidget的使用。下次我们写分类页面的时候会用Redux的方法,以为StatefulWidget的方法会让程序耦合性很强,不利于以后程序的维护。
因为首页我们采用StatefulWidget的方法,所以把标题写在内部。这次我们不采用方法返回Widget的方法了,而是采用变量的方法。
代码如下:
//火爆专区标题
Widget hotTitle= Container(
margin: EdgeInsets.only(top: 10.0), padding:EdgeInsets.all(5.0),
alignment:Alignment.center,
decoration: BoxDecoration(
color: Colors.white,
border:Border(
bottom: BorderSide(width:0.5 ,color:Colors.black12)
)
),
child: Text('火爆专区'),
);
Warp流式布局的使用
当看到下面的火爆商品列表时,很多小伙伴会想到GridView Widget ,其实GridView组件的性能时很低的,毕竟网格的绘制不难么简单,所以这里使用了Warp来进行布局。Warp是一种流式布局。
可以先把火爆专区数据作成List<Widget>,然后再进行Warp布局。
//火爆专区子项
Widget _wrapList(){ if(hotGoodsList.length!=0){
List<Widget> listWidget = hotGoodsList.map((val){ return InkWell(
onTap:(){print('点击了火爆商品');},
child:
Container(
width: ScreenUtil().setWidth(372),
color:Colors.white,
padding: EdgeInsets.all(5.0),
margin:EdgeInsets.only(bottom:3.0),
child: Column(
children: <Widget>[
Image.network(val['image'],width: ScreenUtil().setWidth(375),),
Text(
val['name'],
maxLines: 1,
overflow:TextOverflow.ellipsis ,
style: TextStyle(color:Colors.pink,fontSize: ScreenUtil().setSp(26)),
),
Row(
children: <Widget>[
Text('¥${val['mallPrice']}'),
Text(
'¥${val['price']}',
style: TextStyle(color:Colors.black26,decoration: TextDecoration.lineThrough), )
],
)
],
),
) ); }).toList(); return Wrap(
spacing: 2,
children: listWidget,
);
}else{
return Text(' ');
}
}
有了标题和商品列表组件,我们就可以把这两个组件组合起来了,当然你不组合也是完全可以的。
//火爆专区组合
Widget _hotGoods(){ return Container( child:Column(
children: <Widget>[
hotTitle,
_wrapList(),
],
)
);
}
.
Flutter移动电商实战 --(19)首页_火爆专区商品接口制作的更多相关文章
- Flutter移动电商实战 --(18)首页_火爆专区商品接口制作
1.获取接口的方法 在service/service_method.dart里制作方法.我们先不接收参数,先把接口调通. Future getHomePageBeloConten() async{ t ...
- 18-Flutter移动电商实战-首页_火爆专区商品接口制作
1.获取接口的方法 在service/service_method.dart里制作方法.我们先不接收参数,先把接口调通. Future getHomePageBeloConten() async{ ...
- Flutter实战视频-移动电商-19.首页_火爆专区界面布局编写
19.首页_火爆专区界面布局编写 看一下图片的效果 一个标题栏,下面是多行两列.里面可以用column布局,外面用Warp流式布局 有得小伙伴说这里可以用网格布局,网格布局的话还是有一定的效率问题.这 ...
- Flutter实战视频-移动电商-18.首页_火爆专区后台接口调试
18.首页_火爆专区后台接口调试 楼层结束之后有个火爆专区.到地图有个上拉加载的效果 lib/config/service_url.dart 首先找到我们的接口配置文件,增加接口的配置 lib/ser ...
- Flutter实战视频-移动电商-20.首页_火爆专区上拉加载效果
20.首页_火爆专区上拉加载效果 上拉加载的插件比较都.没有一个一枝独秀的 可以自定义酷炫的header和footer 一直在更新 推荐使用这个插件: https://github.com/xuelo ...
- Flutter移动电商实战 --(30)列表页_商品列表UI界面布局
小程序里面的布局方式 小程序的图片上这里使用的是warp布局,因为首页里面火爆专区,已经用过了warp来布局了. 所以这里我们没有必要再讲一遍,这里我们使用ListView,我们把它布局成下图这种形式 ...
- Flutter移动电商实战 --(43)详细页_补充首页跳转到详细页
首页轮播点击到详细页 修改我们轮播这里的代码:SwiperDiy这个类这里的代码 return InkWell( onTap: (){ Application.router.navigateTo(co ...
- Flutter实战视频-移动电商-33.列表页_子类和商品列表交互效果
33.列表页_子类和商品列表交互效果 主要实现点击小类下面的列表跟着切换 获取右侧下面的列表信息,即要传递大类的id也要传递小类的,所以需要把左侧的大类的id也要Provide化 可以看下网站上的接口 ...
- Flutter移动电商实战 --(21)分类页_类别信息接口调试
先解决一个坑 取消上面的GridVIew的回弹效果.就是在拖这个gridview的时候有一个滚动的效果 physics: NeverScrollableScrollPhysics(), 大R刷新后,点 ...
随机推荐
- 你所不知道的 Console
1.凡人视角 打印字符串 代码: console.log("I am a 凡人"); 打印提示消息 代码: console.info("Yes, you arm a 凡人 ...
- python中yield的用法详解-转载
原文链接:https://blog.csdn.net/mieleizhi0522/article/details/82142856 ,今天在写python爬虫的时候,循环的时候用到了yield,于是搜 ...
- centos6/7启动故障排错
centos6启动流程修复: 实验一:删除initramfs-2.6.32-754.el6.x86_64.img进行恢复 该文件很重要initramfs-2.6.32-754.el6.x86_64.i ...
- SignalR的三个Demo
一.理解SignalR ASP .NET SignalR 是一个ASP .NET 下的类库,可以在ASP .NET 的Web项目中实现实时通信(即:客户端(Web页面)和服务器端可以互相实时的通知消息 ...
- linux下无法删除文件的解决办法
1.使用 lsattr 命令查看文件的附加属性.查看文件是否被赋予了 a , i 属性,如果含有这两个属性,文件是不能被删除的. a:让文件或目录仅供附加用途: b:不更新文件或目录的最后存取时间: ...
- Codeforces 567D - One-Dimensional Battle Ships - [树状数组+二分]
题目链接:https://codeforces.com/problemset/problem/567/D 题意: 在一个 $1 \times n$ 的网格上,初始摆放着 $k$ 只船,每只船的长度均为 ...
- Struts2入门2
五.Struts2的工作原理及文件结构 Struts2过滤与自己相关的请求,比如.action后缀的请求,Struts2会进行过滤和处理,但如果是.html或者.jsp,Struts2不会对其进行处理 ...
- FFmpeg常用命令学习笔记(七)直播相关命令
直播相关命令 主要涉及到直播中的推流和拉流 1.直播推流 ffmpeg -re -i out.mp4 -c copy -f flv rtmp://server/live/streamName -re: ...
- django--没有整理,笔记
https://docs.djangoproject.com/en/2.2/常用的数据路命令:python manage.py makemigrations 数据移植准备python manage.p ...
- RHEL7-RHCE培训系列教程,让您零基础入门Linux运维
本教程是旨在帮助那些刚入门IT行业或计划从事IT行业的初学者(包括开发人员和运维人员,以及想要在Linux系统维护上提升自己的网络管理员),0基础入门Linux运维,完整学习完成本系列课程相当于培训机 ...