import 'package:flutter/material.dart'; import 'package:flutter/widgets.dart'; import '../../model/ProductModel.dart'; import 'package:flutter_swiper/flutter_swiper.dart'; import '../../config/Config.dart'; import 'package:dio/dio.dart'; // import '../../services/SignServices.dart'; import 'package:flutter_screenutil/flutter_screenutil.dart'; //轮播图类模型 import '../../model/FocusModel.dart'; class HomePage extends StatefulWidget { HomePage({Key key}) : super(key: key); _HomePageState createState() => _HomePageState(); } class _HomePageState extends State with AutomaticKeepAliveClientMixin { List _focusData = []; List _hotProductList = []; List _bestProductList = []; @override // TODO: implement wantKeepAlive bool get wantKeepAlive => true; @override void initState() { super.initState(); _getFocusData(); _getHotProductData(); _getBestProductData(); // SignServices.getSign(); } //获取轮播图数据 _getFocusData() async { var api = '${Config.domain}api/focus'; var result = await Dio().get(api); var focusList = FocusModel.fromJson(result.data); setState(() { this._focusData = focusList.result; }); } //获取猜你喜欢的数据 _getHotProductData() async { var api = '${Config.domain}api/plist?is_hot=1'; var result = await Dio().get(api); var hotProductList = ProductModel.fromJson(result.data); setState(() { this._hotProductList = hotProductList.result; }); } //获取热门推荐的数据 _getBestProductData() async { var api = '${Config.domain}api/plist?is_best=1'; var result = await Dio().get(api); var bestProductList = ProductModel.fromJson(result.data); setState(() { this._bestProductList = bestProductList.result; }); } //轮播图 Widget _swiperWidget() { if (this._focusData.length > 0) { return Container( child: AspectRatio( aspectRatio: 2 / 1, child: Swiper( itemBuilder: (BuildContext context, int index) { String pic = this._focusData[index].pic; pic = Config.domain + pic.replaceAll('\\', '/'); return new Image.network( "${pic}", fit: BoxFit.fill, ); }, itemCount: this._focusData.length, pagination: new SwiperPagination(), autoplay: true), ), ); } else { return Text('加载中...'); } } Widget _titleWidget(value) { return Container( height: ScreenUtil().setHeight(60), margin: EdgeInsets.only(left: ScreenUtil().setWidth(20)), padding: EdgeInsets.only(left: ScreenUtil().setWidth(20)), decoration: BoxDecoration( border: Border( left: BorderSide( color: Colors.red, width: ScreenUtil().setWidth(10), ))), child: Text( value, style: TextStyle(color: Colors.black54), ), ); } //热门商品 Widget _hotProductListWidget() { if (this._hotProductList.length > 0) { return Container( height: ScreenUtil().setHeight(234), padding: EdgeInsets.all(ScreenUtil().setWidth(20)), child: ListView.builder( scrollDirection: Axis.horizontal, itemBuilder: (contxt, index) { //处理图片 String sPic = this._hotProductList[index].sPic; sPic = Config.domain + sPic.replaceAll('\\', '/'); return Column( children: [ Container( height: ScreenUtil().setHeight(140), width: ScreenUtil().setWidth(140), margin: EdgeInsets.only(right: ScreenUtil().setWidth(21)), child: Image.network(sPic, fit: BoxFit.cover), ), Container( padding: EdgeInsets.only(top: ScreenUtil().setHeight(10)), height: ScreenUtil().setHeight(50), child: Text( "¥${this._hotProductList[index].price}", style: TextStyle(color: Colors.red), ), ) ], ); }, itemCount: this._hotProductList.length, ), ); } else { return Text(""); } } //推荐商品 Widget _recProductListWidget() { var itemWidth = (ScreenUtil().screenWidth - 30) / 2; return Container( padding: EdgeInsets.all(10), child: Wrap( runSpacing: 10, spacing: 10, children: this._bestProductList.map((value) { //图片 String sPic = value.sPic; sPic = Config.domain + sPic.replaceAll('\\', '/'); return InkWell( onTap: () { Navigator.pushNamed(context, '/productContent', arguments: {"id": value.sId}); }, child: Container( padding: EdgeInsets.all(10), width: itemWidth, decoration: BoxDecoration( border: Border.all( color: Color.fromRGBO(233, 233, 233, 0.9), width: 1)), child: Column( children: [ Container( width: double.infinity, child: AspectRatio( //防止服务器返回的图片大小不一致导致高度不一致问题 aspectRatio: 1 / 1, child: Image.network( "${sPic}", fit: BoxFit.cover, ), ), ), Padding( padding: EdgeInsets.only(top: ScreenUtil().setHeight(20)), child: Text( "${value.num}", maxLines: 2, overflow: TextOverflow.ellipsis, style: TextStyle(color: Colors.black54), ), ), Padding( padding: EdgeInsets.only(top: ScreenUtil().setHeight(20)), child: Stack( children: [ Align( alignment: Alignment.centerLeft, child: Text( "¥${value.price}", style: TextStyle(color: Colors.red, fontSize: 16), ), ), Align( alignment: Alignment.centerRight, child: Text("¥${value.oldPrice}", style: TextStyle( color: Colors.black54, fontSize: 14, decoration: TextDecoration.lineThrough)), ) ], ), ) ], ), ), ); }).toList(), ), ); } @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar( leading: IconButton( icon: Icon(Icons.center_focus_weak, size: 28, color: Colors.black87), onPressed: null, ), title: InkWell( child: Container( height: ScreenUtil().setHeight(68), decoration: BoxDecoration( color: Color.fromRGBO(233, 233, 233, 0.8), borderRadius: BorderRadius.circular(30)), padding: EdgeInsets.only(left: 10), child: Row( crossAxisAlignment: CrossAxisAlignment.center, children: [ Icon(Icons.search), Text("笔记本", style: TextStyle(fontSize: ScreenUtil().setSp(28))) ], ), ), onTap: () { Navigator.pushNamed(context, '/search'); }, ), actions: [ IconButton( icon: Icon(Icons.message, size: 28, color: Colors.black87), onPressed: null, ) ], ), body: ListView( children: [ _swiperWidget(), SizedBox(height: ScreenUtil().setHeight(20)), _titleWidget("猜你喜欢"), SizedBox(height: ScreenUtil().setHeight(20)), _hotProductListWidget(), _titleWidget("热门推荐"), _recProductListWidget() ], ), ); } }