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刷新后,点 ...
随机推荐
- 根据导入xlxs的文件,来写入数据库
今天讲解一下上传文件.前台必须保持传参类型"multipart/form-data" 后台可以设定 public static final String MULTIPART_FOR ...
- iOS常用宏定义大全
宏定义与常量的区别 宏:只是在预处理器里进行文本替换,不做任何类型检查,宏能定义代码,const不能,多个宏编译时间相对较长,影响开发效率,调试过慢,const只会编译一次,缩短编译时间. 所以在使用 ...
- Kmalloc可以申请的最大内存
Kmalloc申请的最大内存 以前虽然读过源码,但是对于它的申请上限确实没注意过.下面分析下,下面是kmalloc的源码. 可以看出,如果想知道kmalloc能申请的范围,需要跳转到<linux ...
- mesos-master启动失败,报错Failed to load unknown flag 'quorum.rpmsave'
[现象] mesos启动失败,查看mesos状态报错: [root@hps102 ~]# systemctl status mesos-master ● mesos-master.service - ...
- CSS复合选择器和div盒子模型
一.复合选择器(3种) 1.交集复合选择器 特点:由2个选择器组成,其中第一个必须是标签选择器,第二个是类或id选择器.两个选择器之间没有空格(有空格属于层级选择器) <h3 class=&qu ...
- 【转】Golang关于channel传递引用引发的坑
原文: https://studygolang.com/articles/12310/comment/17923 ------------------------------------------- ...
- Selenium(三)webdriver的API与定位元素
在学习定位元素之前,应该要学会: 1.打开浏览器 2.打开网页 3.定位元素及操作 ①定位元素 可只此输入框的id是kw,name是wd,class是s_ipt ②在python编辑器中找到该元素 通 ...
- 2.session 简介
2.session 简介 hibernate的执行流程, 创建一个配置对象Configuration,这个配置对象的作用就是用来读取配置文档Hibernate.cfg.xml 获得配置对象的目的是可以 ...
- DNS域名解析系统介绍
域名系统(D N S)是一种用于T C P / I P应用程序的分布式数据库,它提供主机名字和 I P地址之间的转换及有关电子邮件的选路信息.这里提到的分布式是指在 I n t e r n e t上的 ...
- LINQ to DataSet,对离线数据的Linq支持、AsEnumeable()
一.DataTable的扩展方法: 1.DataTable转Linq:AsEnumerable 方法 返回IEnumerable<T>对象,其中泛型参数T是DataRow. 此对象可用在 ...