import 'dart:math'; import 'package:flustars/flustars.dart' as FlutterStars; import 'package:flutter/material.dart'; import 'package:flutter_screenutil/flutter_screenutil.dart'; import 'package:flutter_swiper/flutter_swiper.dart'; import 'package:fluwx/fluwx.dart' as fluwx; import 'package:liftmanager/common/common.dart'; import 'package:liftmanager/internal/account/account_router.dart'; import 'package:liftmanager/internal/bbs/model/shop_detail.dart'; import 'package:liftmanager/net/api_service.dart'; import 'package:liftmanager/res/iconfont.dart'; import 'package:liftmanager/res/resources.dart'; import 'package:liftmanager/routers/fluro_navigator.dart'; import 'package:liftmanager/utils/fast_notification.dart'; import 'package:liftmanager/utils/theme_utils.dart'; import 'package:liftmanager/utils/toast.dart'; import 'package:liftmanager/utils/url.dart'; import 'package:liftmanager/widgets/app_bar.dart'; import 'package:liftmanager/widgets/load_image.dart'; import 'package:url_launcher/url_launcher.dart'; import 'package:liftmanager/widgets/preview_images.dart'; import '../../recommend_ask.dart'; class ProductDetail extends StatefulWidget { ProductDetail(this.id); final String id; @override State createState() { return ProductDetailState(); } } class ProductDetailState extends State { @override void initState() { super.initState(); getShopDetail(); } bool _hasData = false; ShopDetailModel detailObj; Future getShopDetail() async { await NewApiService().getShopDetail(int.parse(widget.id), 1, onSuccess: (res) { if (res != null) { _hasData = true; detailObj = res; setState(() {}); } }, onError: (code, msg) { toasts(msg); }); } showAlertEvent() { showAlert( context, "提示", "确定登录?", "确定", () { NavigatorUtils.push(context, AccountRouter.loginPage, clearStack: true); }, txt2: "取消", onPre2: () { NavigatorUtils.goBack(context); }, ); } Future changeFav(type) async { await NewApiService().shopFav(detailObj.id, type, 1, onSuccess: (res) { toasts("收藏成功"); initCollect(); getShopDetail(); }, onError: (code, msg) { toasts(msg); }); } Future cancelFav() async { await NewApiService().shopFavCancel(detailObj.favoriteId, onSuccess: (res) { toasts("取消收藏成功"); initCollect(); getShopDetail(); }, onError: (code, msg) { toasts(msg); }); } _launchPhone(url) async { if (await canLaunch(url)) { await launch(url); } else { throw 'Could not launch $url'; } } initCollect() { String collectInit = randomInt(1111, 9999).toString() + DateTime.now().millisecondsSinceEpoch.toString(); FastNotification.push("collectAction", collectInit); } randomInt(int min, int max) { return new Random().nextInt(max) % (max - min + 1) + min; } @override Widget build(BuildContext context) { double width = MediaQuery.of(context).size.width; return Scaffold( resizeToAvoidBottomPadding: false, //不让键盘弹上去 appBar: MyAppBar( centerTitle: "商品详情", ), body: _hasData ? Stack( children: [ Container( child: ListView(children: [ Column( mainAxisAlignment: MainAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start, children: [ Container( padding: EdgeInsets.symmetric(horizontal: 10), decoration: BoxDecoration( border: Border( bottom: BorderSide(width: 0.5, color: Colours.line), ), ), child: Column( mainAxisAlignment: MainAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start, children: [ Container( width: width, height: ScreenUtil().setWidth(220), padding: EdgeInsets.only(bottom: 10), child: Container( child: Swiper( itemBuilder: (BuildContext context, index) { return Container( width: width, height: ScreenUtil().setWidth(220), key: Key( detailObj.imgs.split(",")[index]), child: LoadNetworkImage( detailObj.imgs.split(",")[index], width: width, height: ScreenUtil().setWidth(220), fit: BoxFit.fill, isWater: true, ), ); }, pagination: SwiperPagination( builder: DotSwiperPaginationBuilder( color: Colors.grey, activeColor: Colors.white, size: 6, activeSize: 6)), itemCount: detailObj.imgs.split(",").length, scrollDirection: Axis.horizontal, autoplay: false, onTap: (index) { Navigator.of(context).push( FadeRoute( page: PhotoViewGalleryScreen( images: detailObj.imgs .split(","), //传入图片list index: index, //传入当前点击的图片的index // heroTag: img,//传入当前点击的图片的hero tag (可选) ), ), ); // print(index); }, ), ), ), SizedBox(height: 5), Text( detailObj.name ?? "", style: TextStyle(fontSize: ScreenUtil().setSp(16)), textAlign: TextAlign.start, ), SizedBox( height: 10, ), if (detailObj.brandName != null) Container( padding: EdgeInsets.all(3), decoration: BoxDecoration( color: Color(0x33448EFA), ), child: Text( detailObj.brandName ?? "", style: TextStyle( color: Color(0xff5888FF), fontSize: 11, fontWeight: FontWeight.w500, ), textAlign: TextAlign.start, ), ), SizedBox( height: 10, ), Row( crossAxisAlignment: CrossAxisAlignment.baseline, children: [ if (detailObj.discountPrice != null) Text( '¥${detailObj.discountPrice.toInt()}', style: TextStyle( color: Color(0xffFF5C00), fontSize: 16, ), ), if (detailObj.discountPrice == null) Text( '¥${detailObj.price?.toInt() ?? '暂无'}', style: TextStyle( color: Color(0xffFF5C00), fontSize: 16, ), ), if (detailObj.discountPrice != null) Text( '¥${detailObj.price.toInt()}', style: TextStyle( color: Color(0xff999999), fontSize: 11, decoration: TextDecoration.lineThrough, ), ), // Text( // '¥${detailObj?.price?.toInt() ?? ""}', // style: TextStyle( // color: Color(0xffFF5B00), // fontSize: 16, // ), // textAlign: TextAlign.start, // ), ], ), SizedBox(height: 15), ]), ), Column( crossAxisAlignment: CrossAxisAlignment.start, mainAxisAlignment: MainAxisAlignment.start, children: [ SizedBox( height: 10, ), Container( padding: EdgeInsets.only(left: 10), decoration: BoxDecoration( border: Border( left: BorderSide( width: 2, color: Color(0xff568AFF), ), ), ), child: Text( "商品简介", style: TextStyle( fontSize: 15, color: Color(0xff333333), ), textAlign: TextAlign.left, ), ), SizedBox( height: 10, ), Container( padding: EdgeInsets.symmetric(horizontal: 10), child: Text( detailObj.descr, style: TextStyle( color: Color(0xff333333), fontSize: 13), textAlign: TextAlign.left, ), ), ], ), SizedBox( height: 10, ), Container( height: 1, color: ThemeUtils.getDialogTextFieldColor(context)), Column( crossAxisAlignment: CrossAxisAlignment.start, mainAxisAlignment: MainAxisAlignment.start, children: [ SizedBox( height: 10, ), Container( padding: EdgeInsets.only(left: 10), decoration: BoxDecoration( border: Border( left: BorderSide( width: 2, color: Color(0xff568AFF), ), ), ), child: Text( "商家信息", style: TextStyle( color: Color(0xff333333), fontSize: 15, ), textAlign: TextAlign.left, ), ), SizedBox( height: 10, ), Container( padding: EdgeInsets.symmetric( horizontal: 10, ), child: Column(children: [ Row( children: [ Icon( Iconfont.shangjia, color: Colors.orange, size: 13, ), SizedBox( width: 10, ), Text( "${detailObj.manufacturer}", style: TextStyle( color: Color(0xff666666), fontSize: 11, ), textAlign: TextAlign.left, ), ], ), SizedBox( height: 10, ), Row( children: [ Icon( Iconfont.lianxi, color: Colors.orange, size: 13, ), SizedBox( width: 10, ), Text( "${detailObj.telephone} (${detailObj.contactPerson})", style: TextStyle( color: Color(0xff666666), fontSize: 11, ), textAlign: TextAlign.left, ), ], ), ]), ), ], ), SizedBox(height: ScreenUtil().setWidth(70)) ], ), ])), Positioned( bottom: 0, left: 0, child: Container( width: width, color: Colors.white, padding: EdgeInsets.all(10), child: Row( crossAxisAlignment: CrossAxisAlignment.center, children: [ Expanded( child: Row( mainAxisAlignment: MainAxisAlignment.spaceAround, children: [ GestureDetector( onTap: () { if (FlutterStars.SpUtil.getString( Constant.userId) == "-1") { showAlertEvent(); } else { String initThis = randomInt(1111, 9999).toString() + DateTime.now() .millisecondsSinceEpoch .toString(); fluwx .shareToWeChat( fluwx.WeChatShareWebPageModel( scene: fluwx.WeChatScene.SESSION, webPage: "$jumpUrl/h5/index.html?num=$initThis&page=/bbs/productDetail&id=${widget.id}", title: detailObj.name, description: detailObj.descr, thumbnail: detailObj.imgs.split(",")[0], )) .then((result) {}, onError: (msg) { // print(msg); }); } }, child: Container( // padding: EdgeInsets.only(left:25,right:30), child: Column(children: [ Icon( Iconfont.fenxiang, size: 20.0, color: Color(0xff333333), ), Text( "分享", style: TextStyle( color: Color(0xff555A64), fontSize: 12, ), textAlign: TextAlign.start, ), ])), ), GestureDetector( onTap: () { if (FlutterStars.SpUtil.getString( Constant.userId) == "-1") { showAlertEvent(); } else { if (detailObj.isFavorite == 1) { cancelFav(); } else { changeFav(3); } } }, child: Container( child: Column(children: [ Icon( // : 0xe604, detailObj.isFavorite == 1 ? Iconfont.shoucang1 : Iconfont.shoucang, size: 20.0, color: Color(detailObj.isFavorite == 1 ? 0xff5589FF : 0xff555A64), ), Text( detailObj.isFavorite == 1 ? "已收藏" : "收藏", style: TextStyle( color: Color(detailObj.isFavorite == 1 ? 0xff5589FF : 0xff555A64), fontSize: 12, ), textAlign: TextAlign.start, ), ])), ), ], ), ), Container( height: 45, width: 240, decoration: BoxDecoration( color: Color(0xff5589FF), borderRadius: BorderRadius.circular(30), ), child: FlatButton( // padding: EdgeInsets.all(15.0), child: Text( "联系商家", style: TextStyle( fontSize: 16, ), ), textColor: Colors.white, onPressed: () { if (FlutterStars.SpUtil.getString( Constant.userId) == "-1") { showAlertEvent(); } else { _launchPhone("tel:" + detailObj.telephone); } }, ), ), ], ), ), ) ], ) : Center( child: Text("正在加载..."), ), ); } }