18.首页_火爆专区后台接口调试

楼层结束之后有个火爆专区。到地图有个上拉加载的效果

lib/config/service_url.dart

首先找到我们的接口配置文件,增加接口的配置

lib/service/service_method.dart

复制原来的放进行修改

最终定义完的方法:

home_page.dart测试接口

我们在initState方法里面调用接口返回数据,并print打印出我们的数据

放在这里调用一下:

运行 查看测试效果

提取接口的方法

这两个方法几乎是一样的 ,所以我们单独做一个公共的方法

公共的方法

这样我们火爆专区的接口就可以使用通用的request的方法了。

查看效果:

也是可以调通的

改造获取首页所有数据的方法

我们主要用到方法名和传递的参数

改造之后的,数据正常加载出来了

最终代码:

import 'package:flutter/material.dart';
import '../service/service_method.dart';
import 'package:flutter_swiper/flutter_swiper.dart';
import 'dart:convert';
import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:url_launcher/url_launcher.dart';class HomePage extends StatefulWidget {@override_HomePageState createState() => _HomePageState();
}class _HomePageState extends State<HomePage> with AutomaticKeepAliveClientMixin{@overridebool get wantKeepAlive => true;@overridevoid initState() { super.initState();print('1111111');}String homePageContent='正在获取数据';@overrideWidget build(BuildContext context) {var formData={'lon':'115.02932','lat':'35.76189'};//传一个经纬度过去,防止恶意下单return Scaffold(appBar: AppBar(title: Text('百姓生活+')),body: FutureBuilder(future: request('homePageContent',formData:formData),builder: (context, snapshot) {if(snapshot.hasData){var data=json.decode(snapshot.data.toString());List<Map> swiper=(data['data']['slides'] as List).cast();List<Map> navigatorList=(data['data']['category'] as List).cast();String adPicture=data['data']['advertesPicture']['PICTURE_ADDRESS'];String leaderImage=data['data']['shopInfo']['leaderImage'];String leaderPhone=data['data']['shopInfo']['leaderPhone'];List<Map> recommendList=(data['data']['recommend'] as List).cast();String floor1Title=data['data']['floor1Pic']['PICTURE_ADDRESS'];String floor2Title=data['data']['floor2Pic']['PICTURE_ADDRESS'];String floor3Title=data['data']['floor3Pic']['PICTURE_ADDRESS'];List<Map> floor1=(data['data']['floor1'] as List).cast();List<Map> floor2=(data['data']['floor2'] as List).cast();List<Map> floor3=(data['data']['floor3'] as List).cast();return SingleChildScrollView(child: Column(children: <Widget>[SwiperDiy(swiperDateList: swiper),TopNavigator(navigatorList:navigatorList ,),AdBanner(adPicture:adPicture),LeaderPhone(leaderImage: leaderImage,leaderPhone: leaderPhone,),Recommend(recommendList:recommendList),FloorTitle(picture_address: floor1Title,),//楼层1的标题图片
                  FloorContent(floorGoodsList: floor1),FloorTitle(picture_address: floor2Title,),//楼层1的标题图片
                  FloorContent(floorGoodsList: floor2),FloorTitle(picture_address: floor3Title,),//楼层1的标题图片
                  FloorContent(floorGoodsList: floor3),HotGoods()],),);}else{return Center(child: Text('加载中....'));}},),);}
}
//首页轮播插件
class SwiperDiy extends StatelessWidget {final List swiperDateList;//构造函数SwiperDiy({this.swiperDateList});@overrideWidget build(BuildContext context) {// print('设备的像素密度:${ScreenUtil.pixelRatio}');// print('设备的高:${ScreenUtil.screenWidth}');// print('设备的宽:${ScreenUtil.screenHeight}');return Container(height: ScreenUtil().setHeight(333),//
      width:ScreenUtil().setWidth(750),child: Swiper(itemBuilder: (BuildContext context,int index){return Image.network("${swiperDateList[index]['image']}",fit: BoxFit.fill,);},itemCount: swiperDateList.length,pagination: SwiperPagination(),autoplay: true,),);}
}class TopNavigator extends StatelessWidget {final List navigatorList;TopNavigator({Key key, this.navigatorList}) : super(key: key);Widget _gridViewItemUI(BuildContext context,item){return InkWell(onTap: (){print('点击了导航');},child: Column(children: <Widget>[Image.network(item['image'],width: ScreenUtil().setWidth(95)),Text(item['mallCategoryName'])],),);}@overrideWidget build(BuildContext context) {if(this.navigatorList.length>10){this.navigatorList.removeRange(10,this.navigatorList.length);//从第十个截取,后面都截取掉
    }return Container(height: ScreenUtil().setHeight(320),//只是自己大概预估的一个高度,后续可以再调整padding: EdgeInsets.all(3.0),//为了不让它切着屏幕的边缘,我们给它一个padding
      child: GridView.count(crossAxisCount: 5,//每行显示5个元素padding: EdgeInsets.all(5.0),//每一项都设置一个padding,这样他就不挨着了。
        children: navigatorList.map((item){return _gridViewItemUI(context,item);}).toList(),),);}
}class AdBanner extends StatelessWidget {final String adPicture;AdBanner({Key key, this.adPicture}) : super(key: key);@overrideWidget build(BuildContext context) {return Container(child: Image.network(adPicture),);}
}//店长电话模块
class LeaderPhone extends StatelessWidget {final String leaderImage;//店长图片final String leaderPhone;//店长电话
LeaderPhone({Key key, this.leaderImage,this.leaderPhone}) : super(key: key);@overrideWidget build(BuildContext context) {return Container(child: InkWell(onTap: _launchURL,child: Image.network(leaderImage),),);}void _launchURL() async {String url = 'tel:'+leaderPhone;//String url = 'http://jspang.com';if(await canLaunch(url)){await launch(url);}else{throw 'url不能进行访问,异常';}}
}//商品推荐
class Recommend extends StatelessWidget {final List recommendList;Recommend({Key key, this.recommendList}) : super(key: key);//商品标题
  Widget _titleWidget(){return Container(alignment: Alignment.centerLeft,//局长靠左对齐padding: EdgeInsets.fromLTRB(10.0, 2.0, 0, 5.0),//左上右下
      decoration: BoxDecoration(color: Colors.white,border: Border(bottom: BorderSide(width: 0.5,color: Colors.black12) //设置底部的bottom的边框,Black12是浅灰色
        ),),child: Text('商品推荐',style:TextStyle(color: Colors.pink)),);}//商品单独项方法
  Widget _item(index){return InkWell(onTap: (){},//点击事件先留空
      child: Container(height: ScreenUtil().setHeight(380),//兼容性的高度 用了ScreenUtilwidth: ScreenUtil().setWidth(250),//750除以3所以是250padding: EdgeInsets.all(8.0),decoration: BoxDecoration(color: Colors.white,border: Border(left: BorderSide(width: 1,color: Colors.black12)//右侧的 边线的样式 宽度和 颜色
          )),child: Column(children: <Widget>[Image.network(recommendList[index]['image']),Text('¥${recommendList[index]['mallPrice']}'),Text('¥${recommendList[index]['price']}',style: TextStyle(decoration: TextDecoration.lineThrough,//删除线的样式color: Colors.grey//浅灰色
              ),),],),),);}//横向列表方法
  Widget _recommendList(){return Container(height: ScreenUtil().setHeight(380),child: ListView.builder(scrollDirection: Axis.horizontal,//横向的
        itemCount: recommendList.length,itemBuilder: (context,index){return _item(index);},),);}@overrideWidget build(BuildContext context) {return Container(height: ScreenUtil().setHeight(430),//列表已经设置为330了因为还有上面标题,所以要比330高,这里先设置为380margin: EdgeInsets.only(top: 10.0),child: Column(children: <Widget>[_titleWidget(),_recommendList()],),);}
}//楼层标题
class FloorTitle extends StatelessWidget {final String picture_address;FloorTitle({Key key, this.picture_address}) : super(key: key);@overrideWidget build(BuildContext context) {return Container(padding: EdgeInsets.all(8.0),child: Image.network(picture_address),);}
}//楼层商品列表
class FloorContent extends StatelessWidget {final List floorGoodsList;FloorContent({Key key, this.floorGoodsList}) : super(key: key);@overrideWidget build(BuildContext context) {return Container(child: Column(children: <Widget>[_firstRow(),_otherGoods()],),);}Widget _firstRow(){return Row(children: <Widget>[_goodsItem(floorGoodsList[0]),Column(children: <Widget>[_goodsItem(floorGoodsList[1]),_goodsItem(floorGoodsList[2])],)],);}Widget _otherGoods(){return Row(children: <Widget>[_goodsItem(floorGoodsList[3]),_goodsItem(floorGoodsList[4])],);}Widget _goodsItem(Map goods){return Container(width: ScreenUtil().setWidth(375),child: InkWell(onTap: (){print('点击了楼层商品');},child: Image.network(goods['image']),),);}
}//火爆专区 定义为动态的类
class HotGoods extends StatefulWidget {@override_HotGoodsState createState() => _HotGoodsState();
}class _HotGoodsState extends State<HotGoods> {void initState() { super.initState();request('homePageBelowConten',formData:1).then((val){print(val);});}@overrideWidget build(BuildContext context) {return Container(child:Text('111111'));}
}

home_page.dart

import 'package:dio/dio.dart';
import 'dart:async';
import 'dart:io';
import '../config/service_url.dart';//通用方法
Future request(url,{formData}) async{try {print('开始获取数据..............');Response response;Dio dio=new Dio();dio.options.contentType=ContentType.parse('application/x-www-form-urlencoded');//有参数的时候传参数,这里进行if判断if(formData==null){response=await dio.post(servicePath[url]);//不传参数}else{response=await dio.post(servicePath[url],data:formData);//传参数
    }if(response.statusCode==200){print(response.data);return response.data;}else{throw Exception('后端接口出现异常');}} catch (e) {return print('ERROR:========>${e}');}
}//获取首页主题内容

Future getHomePageContent() async{try {print('开始获取首页数据..............');Response response;Dio dio=new Dio();dio.options.contentType=ContentType.parse('application/x-www-form-urlencoded');var formData={'lon':'115.02932','lat':'35.76189'};//传一个经纬度过去,防止恶意下单response=await dio.post(servicePath['homePageContent'],data:formData);if(response.statusCode==200){print(response.data);return response.data;}else{throw Exception('后端接口出现异常');}} catch (e) {return print('ERROR:========>${e}');}
}
//获得火爆专区的商品的方法
Future getHomePageBeloConten() async{try {print('开始获取火爆专区数据..............');Response response;Dio dio=new Dio();dio.options.contentType=ContentType.parse('application/x-www-form-urlencoded');int page=1;//上拉加载数据 这里定义变量 页码response=await dio.post(servicePath['homePageBelowConten'],data:page);if(response.statusCode==200){print(response.data);return response.data;}else{throw Exception('后端接口出现异常');}} catch (e) {return print('ERROR:========>${e}');}
}

service_method.dart

service_url.dart

const serviceUrl='http://test.baixingliangfan.cn/baixing/';
const servicePath={'homePageContent':serviceUrl+'wxmini/homePageContent',//商店首页信息'homePageBelowConten':serviceUrl+'wxmini/homePageBelowConten',//商城首页热卖商品
};

转载于:https://www.cnblogs.com/wangjunwei/p/10682811.html

Flutter实战视频-移动电商-18.首页_火爆专区后台接口调试相关推荐

  1. Flutter实战视频-移动电商-59.购物车_计算商品价格和数量

    59.购物车_计算商品价格和数量 本节课主要是加上自动计算的功能 provide/cart.dart 在provide的类里面增加两个变量 cart_bottom.dart 三个组件因为我们都需要套一 ...

  2. Flutter实战视频-移动电商-60.购物车_全选按钮的交互效果制作

    60.购物车_全选按钮的交互效果制作 主要做全选和复选框的这两个功能 provide/cart.dart 业务逻辑写到provide里面 先持久化取出来字符串,把字符串编程list.循环list ca ...

  3. Flutter实战视频-移动电商-45.详细页_说明区域UI编写

    45.详细页_说明区域UI编写 pages/details_page/details_expain.dart 详情页面引用组件 效果展示: 最终代码: import 'package:flutter/ ...

  4. 18-Flutter移动电商实战-首页_火爆专区商品接口制作

    1.获取接口的方法 在service/service_method.dart里制作方法.我们先不接收参数,先把接口调通. Future getHomePageBeloConten() async{tr ...

  5. 20-Vue实战项目:电商管理系统(Element-UI)总结

    20-Vue实战项目:电商管理系统(Element-UI)总结 结果如下: 这算是我自己跟着视频做的第一个比较完整的可以看的项目了,用时18天,但这视频的总时间是20个小时,自己还是比较的低效率.不多 ...

  6. 【实战高保真】电商saas全套原型、店铺管理、店铺装修、商品管理、会员管理、维权管理、会员管理、营销管理、财务管理、渠道管理、saas系统、Axure高保真后台管理原型、rp源文件、axure原型

    [实战高保真]电商saas全套原型.店铺管理.店铺装修.商品管理.会员管理.维权管理.会员管理.营销管理.财务管理.渠道管理.saas系统.Axure高保真后台管理原型.rp源文件.axure原型 A ...

  7. 「短视频+社交电商」营销模式爆发式发展,带来的好处有什么?

    [短视频+社交电商],可以说是现在最火爆的营销模式,在流量和变现方面有着非常大的优势.从18年来到现在我国短视频行业进入了爆发式发展, 电商纷纷转型布局短视频把公域流量转化成自己私域流量. 短视频平台 ...

  8. vue实战项目:电商管理系统实现步骤笔记(一)

    vue实战项目 视频地址以及项目文件 一.项目概述 1.1电商项目基本业务概述 1.2电商后台管理系统的功能 1.3电商后台管理系统的开发模式(前后端分离) 1.4电商后台管理系统的技术选型 1.4. ...

  9. Python + 大数据 - 数仓实战之智能电商分析平台

    Python + 大数据 - 数仓实战之智能电商分析平台 1. 项目架构 2. 数据仓库维度模型设计-事实表 事实表的特征:表里没有存放实际的内容,他是一堆主键的集合,这些ID分别能对应到维度表中的一 ...

  10. 新内容、新交互、新增长:视频云为短视频及电商直播行业高效赋能

    简介:阿里云国际云峰会重磅发布 在 6 月 8 日举行的 2021 阿里云国际云峰会(2021 ALIBABA CLOUD SUMMIT)上,阿里云发布了直播解决方案等 20 多种产品.解决方案以及升 ...

最新文章

  1. python的知识点注意事项
  2. 奇妙的算法之LCS妙解
  3. 上周回顾:微软与苹果比赛谁更“不安全”
  4. flask 的 request
  5. 【Android 组件化】使用 Gradle 实现组件化 ( 组件模式与集成模式切换 )
  6. python3安装过程中出现的ssl问题,No module named _ssl或者renaming “_ssl“ since importing it failed
  7. 统计学 计算机论文,统计学课程论文范文
  8. [转]Webpack5(从入门到精通)
  9. 用Java将文件读入字节数组的7个示例
  10. 使用Spring Boot和注释支持配置Spring JMS应用程序
  11. webdriver高级应用- 右键另存为下载文件
  12. python情感词典计算得分_基于情感词典的情感打分
  13. BTC 5分钟内跌幅1.02%,现价38142.29usdt
  14. CAJ论文怎么打开?
  15. 电脑问题处理篇4:解决华硕电脑“ASUS Battery Health Charging”软件界面呈现灰色不能选择充电模式的问题
  16. 完美世界手游服务器维护,完美世界手游更新失败_完美世界手游更新失败解决办法_玩游戏网...
  17. txt文件转csv文件乱码问题
  18. 【读书笔记】科学:无尽的前沿——科学是一种提出问题的方式
  19. dota2 java_电竞Dota2数据API接口 - 【战队列表】调用示例代码
  20. AUTOCAD——构造线

热门文章

  1. 推荐一个高仿微信的项目 有点屌!!!
  2. HTTP长连接和短连接原理浅析
  3. 不随意付钱,不随意签字。
  4. 面试时企业最看中你什么能力?
  5. *第十三周*数据结构实践项目一【验证Prim算法】
  6. JAVA Httpclient3.x与Httpclient4.x代码对比(post方法)
  7. linux下编译upx ucl
  8. PTA编程总结3—抓老鼠啊~亏了还是赚了?
  9. ACM__搜素之BFS与DFS
  10. tcp和udp协议的聊天 和udp协议的时间同步机制-----编码