/* * @author lsy * @date 2020/6/29 **/ import 'package:cached_network_image/cached_network_image.dart'; import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; import 'package:gm_flutter/ClueModel/server/entity/LevelOneFeedList.dart'; import 'package:gm_flutter/commonModel/base/BaseComponent.dart'; import 'package:gm_flutter/commonModel/base/BaseUtil.dart'; class LevelOneItem extends StatelessWidget { final Cards cards; VoidCallback lowPrice; VoidCallback ask; LevelOneItem(this.cards, {this.lowPrice, this.ask}); @override Widget build(BuildContext context) { if (cards.cardType == "plan") { return PlanItem(context); } else if (cards.cardType == "hospital") { return HospitalItem(context); } } Widget DoctorItem(BuildContext context) { if (cards.doctor == null && isDebug) { throw new Exception(); } return GestureDetector( child: Container( margin: EdgeInsets.only(left: 15, right: 15), height: 127, child: Stack( children: <Widget>[ Positioned( top: 15, child: Container( width: 45, height: 45, child: ClipOval( child: CachedNetworkImage( imageUrl: cards.doctor.portrait, ), ), ), ), Positioned( left: 57, top: 18, child: Row( mainAxisSize: MainAxisSize.min, crossAxisAlignment: CrossAxisAlignment.end, children: <Widget>[ baseText(cards.doctor.name, 15, Color(0xff333333), bold: true), Container( margin: EdgeInsets.only(left: 4), child: baseText(cards.doctor.name, 15, Color(0xff333333), bold: true), ) ], ), ), Positioned( top: 42, right: 0, child: Row( crossAxisAlignment: CrossAxisAlignment.end, mainAxisSize: MainAxisSize.min, children: <Widget>[ baseText("¥", 12, Color(0xffFF5963)), baseText("${cards.doctor.minPrice}-${cards.doctor.maxPrice}", 15, Color(0xffFF5963)), ], ), ), Positioned( bottom: 15, right: 0, child: lowPriceWidget(), ), Positioned( bottom: 15, right: 187, child: askWidget(), ), Positioned( left: 4.5, bottom: 25, child: compareWidget(), ), ], ), ), ); } Widget HospitalItem(BuildContext context) { if (cards.hospital == null && isDebug) { throw new Exception(); } return GestureDetector( onTap: () {}, child: Container( margin: EdgeInsets.only(left: 15, right: 15), height: 149, child: Stack( children: <Widget>[ Positioned( left: 0, top: 15, child: Container( width: 45, height: 45, child: ClipOval( child: CachedNetworkImage( imageUrl: cards.hospital.portrait, ), ), ), ), Positioned( left: 57, top: 17.5, child: baseText(cards.hospital.name, 15, Color(0xff333333), bold: true), ), Positioned( top: 42.5, right: 0, child: Row( crossAxisAlignment: CrossAxisAlignment.end, mainAxisSize: MainAxisSize.min, children: <Widget>[ baseText("¥", 12, Color(0xffFF5963)), baseText( "${cards.hospital.minPrice}-${cards.hospital.maxPrice}", 15, Color(0xffFF5963)), ], ), ), Positioned( bottom: 15, right: 0, child: lowPriceWidget(), ), Positioned( bottom: 15, right: 187, child: askWidget(), ), Positioned( left: 4.5, bottom: 25, child: compareWidget(), ), Positioned( bottom: 67, left: 57, child: baseText(cards.hospital.name, 12, Color(0xff666666)), ) ], ), )); } Widget PlanItem(BuildContext context) { if (cards.plan == null && isDebug) { throw new Exception(); } return Container( height: 118, margin: EdgeInsets.only(left: 15, right: 15), child: Stack( children: <Widget>[ Positioned( left: 0, top: 15, child: baseText(cards.plan.planName, 15, Color(0xff282828), bold: true), ), Positioned( right: 0, top: 15, child: Row( mainAxisSize: MainAxisSize.min, crossAxisAlignment: CrossAxisAlignment.end, children: <Widget>[ baseText("¥", 12, Color(0xffFF5963)), baseText(cards.plan, 15, Color(0xffFF5963)) ], ), ), Positioned( left: 4.5, bottom: 25, child: compareWidget(), ), Positioned(bottom: 15, right: 0, child: lowPriceWidget()), Positioned( right: 152, bottom: 15, child: askWidget(), ), Positioned( top: 40, right: 0, child: baseText( "指导价:¥${cards.plan.minPrice}-${cards.plan.maxPrice}", 11, Color(0xff666666)), ), Positioned( left: 15, bottom: 0, child: Container( width: MediaQuery.of(context).size.width - 30, height: 0.5, color: Color(0xffE5E5E5), ), ) ], ), ); } Widget lowPriceWidget() { return GestureDetector( onTap: lowPrice, behavior: HitTestBehavior.opaque, child: Container( width: 122, height: 37, decoration: BoxDecoration( borderRadius: BorderRadius.circular(18.5), color: Color(0xffFFF5F5)), alignment: Alignment.center, child: baseText("获取底价", 14, Color(0xffFF5963), bold: true), ), ); } Widget askWidget() { return GestureDetector( onTap: ask, behavior: HitTestBehavior.opaque, child: Container( width: 122, height: 37, decoration: BoxDecoration( borderRadius: BorderRadius.circular(18.5), color: Color(0xffEEFDFD)), alignment: Alignment.center, child: baseText("咨询", 14, Color(0xff3FB5AF), bold: true), ), ); } Widget compareWidget() { return Row( mainAxisSize: MainAxisSize.min, crossAxisAlignment: CrossAxisAlignment.center, children: <Widget>[ Container( width: 18, height: 18, child: Image.asset("assets/vs.png"), ), Container( margin: EdgeInsets.only(left: 1.5), child: baseText("去比较", 13, Color(0xff282828), bold: true), ) ], ); } }