| @@ -19,18 +19,28 @@ class CounponWidget extends StatelessWidget { | |||
| Widget build(BuildContext context) { | |||
| // return Container(); | |||
| return BlocProvider<CounponBloc>( | |||
| create: (_) => CounponBloc(repository: CounponRepository())..add(CounponInitEvent(model: model)), | |||
| child: CounponWidgetContainer(), | |||
| create: (_) => CounponBloc(repository: CounponRepository()), //..add(CounponInitEvent(model: model)), | |||
| child: CounponWidgetContainer(model, key: UniqueKey(),), | |||
| ); | |||
| } | |||
| } | |||
| class CounponWidgetContainer extends StatefulWidget { | |||
| final Map<String, dynamic> model; | |||
| const CounponWidgetContainer(this.model, {Key key}) : super(key: key); | |||
| @override | |||
| _CounponWidgetContainerState createState() => _CounponWidgetContainerState(); | |||
| } | |||
| class _CounponWidgetContainerState extends State<CounponWidgetContainer> { | |||
| @override | |||
| void initState() { | |||
| BlocProvider.of<CounponBloc>(context).add(CounponInitEvent(model: widget?.model)); | |||
| super.initState(); | |||
| } | |||
| /// 点击领取 | |||
| void _onJump(CounponModel model) {} | |||
| @@ -69,19 +79,18 @@ class _CounponWidgetContainerState extends State<CounponWidgetContainer> { | |||
| width: double.infinity, | |||
| padding: const EdgeInsets.only(left: 18.5, top: 12, bottom: 14), | |||
| decoration: BoxDecoration( | |||
| image: DecorationImage( | |||
| image: CachedNetworkImageProvider( | |||
| model?.bg_img ??'', | |||
| ), | |||
| fit: BoxFit.fill | |||
| ) | |||
| ), | |||
| image: DecorationImage( | |||
| image: CachedNetworkImageProvider( | |||
| model?.bg_img ?? '', | |||
| ), | |||
| fit: BoxFit.fill)), | |||
| alignment: Alignment.centerLeft, | |||
| child: Row( | |||
| children: <Widget>[ | |||
| /// 价格 | |||
| _getPriceWidget(model), | |||
| const SizedBox(width: 7.5), | |||
| /// 有效期 | |||
| _getTimeWidget(model) | |||
| ], | |||
| @@ -102,7 +111,8 @@ class _CounponWidgetContainerState extends State<CounponWidgetContainer> { | |||
| Text(model?.price_type ?? '¥ ', style: TextStyle(fontSize: 15, color: HexColor.fromHex(model?.price_type_color ?? '#FFFFFF'))), | |||
| /// 价格 | |||
| Text(model?.coupon_price ??'100', style: TextStyle(fontSize: 30, color: HexColor.fromHex(model?.coupon_price_color ?? '#FFFFFF'), fontFamily: 'Din', package: 'zhiying_base_widget')), | |||
| Text(model?.coupon_price ?? '100', | |||
| style: TextStyle(fontSize: 30, color: HexColor.fromHex(model?.coupon_price_color ?? '#FFFFFF'), fontFamily: 'Din', package: 'zhiying_base_widget')), | |||
| ], | |||
| ); | |||
| } | |||
| @@ -113,7 +123,7 @@ class _CounponWidgetContainerState extends State<CounponWidgetContainer> { | |||
| crossAxisAlignment: CrossAxisAlignment.start, | |||
| children: <Widget>[ | |||
| /// 标题 | |||
| Text(model?.coupon_title ?? '优惠券', style: TextStyle(fontSize: 17, color: HexColor.fromHex( model?.coupon_title_color ?? '#FFFFFF'))), | |||
| Text(model?.coupon_title ?? '优惠券', style: TextStyle(fontSize: 17, color: HexColor.fromHex(model?.coupon_title_color ?? '#FFFFFF'))), | |||
| /// 到期时间 | |||
| Text(model?.coupon_endtime ?? '有效期至2020-10-01', style: TextStyle(fontSize: 10, color: HexColor.fromHex(model?.coupon_time_color ?? '#FFFFFF'))) | |||
| @@ -19,18 +19,29 @@ class GoodsDetailsImgWidget extends StatelessWidget { | |||
| @override | |||
| Widget build(BuildContext context) { | |||
| return BlocProvider<GoodsDetailsImgBloc>( | |||
| create: (_) => GoodsDetailsImgBloc(repository: GoodsDetailsImgRepository())..add(GoodsDetailsImgInitEvent(model: model)), | |||
| child: GoodsDetailsImgWidgetContainer(), | |||
| create: (_) => GoodsDetailsImgBloc(repository: GoodsDetailsImgRepository()),//..add(GoodsDetailsImgInitEvent(model: model)), | |||
| child: GoodsDetailsImgWidgetContainer(model, key: UniqueKey(),), | |||
| ); | |||
| } | |||
| } | |||
| class GoodsDetailsImgWidgetContainer extends StatefulWidget { | |||
| final Map<String, dynamic> model; | |||
| const GoodsDetailsImgWidgetContainer(this.model, {Key key}) : super(key: key); | |||
| @override | |||
| _GoodsDetailsImgWidgetContainerState createState() => _GoodsDetailsImgWidgetContainerState(); | |||
| } | |||
| class _GoodsDetailsImgWidgetContainerState extends State<GoodsDetailsImgWidgetContainer> { | |||
| @override | |||
| void initState() { | |||
| BlocProvider.of<GoodsDetailsImgBloc>(context).add(GoodsDetailsImgInitEvent(model: widget?.model)); | |||
| super.initState(); | |||
| } | |||
| @override | |||
| Widget build(BuildContext context) { | |||
| return BlocConsumer<GoodsDetailsImgBloc, GoodsDetailsImgState>( | |||
| @@ -30,10 +30,12 @@ class GoodsDetailsFooterWidget extends StatelessWidget { | |||
| visible: !EmptyUtil.isEmpty(model), | |||
| replacement: GoodsDetailsFooterSkeleton(), | |||
| child: BlocProvider<GoodsDetailsFooterBloc>( | |||
| create: (_) => | |||
| GoodsDetailsFooterBloc(repository: GoodsDetailsFooterRepository()) | |||
| ..add(GoodsDetailsFooterInitEvent(model: model)), | |||
| child: GooddsDetailsFooterContainer(model), | |||
| create: (_) => GoodsDetailsFooterBloc(repository: GoodsDetailsFooterRepository()), | |||
| //..add(GoodsDetailsFooterInitEvent(model: model)), | |||
| child: GooddsDetailsFooterContainer( | |||
| model, | |||
| key: UniqueKey(), | |||
| ), | |||
| ), | |||
| ); | |||
| } | |||
| @@ -45,21 +47,24 @@ class GooddsDetailsFooterContainer extends StatefulWidget { | |||
| const GooddsDetailsFooterContainer(this.model, {Key key}) : super(key: key); | |||
| @override | |||
| _GooddsDetailsFooterContainerState createState() => | |||
| _GooddsDetailsFooterContainerState(); | |||
| _GooddsDetailsFooterContainerState createState() => _GooddsDetailsFooterContainerState(); | |||
| } | |||
| class _GooddsDetailsFooterContainerState | |||
| extends State<GooddsDetailsFooterContainer> { | |||
| class _GooddsDetailsFooterContainerState extends State<GooddsDetailsFooterContainer> { | |||
| UserInfoModel _user; | |||
| @override | |||
| void initState() { | |||
| BlocProvider.of<GoodsDetailsFooterBloc>(context).add(GoodsDetailsFooterInitEvent(model: widget?.model)); | |||
| super.initState(); | |||
| } | |||
| /// 打开首页 | |||
| void _openHome() { | |||
| Navigator.pushAndRemoveUntil( | |||
| context, | |||
| CupertinoPageRoute( | |||
| builder: (BuildContext context) => | |||
| PageFactory.create('homePage', null)), | |||
| CupertinoPageRoute(builder: (BuildContext context) => PageFactory.create('homePage', null)), | |||
| (Route<dynamic> route) => false, | |||
| ); | |||
| } | |||
| @@ -95,8 +100,7 @@ class _GooddsDetailsFooterContainerState | |||
| return; | |||
| } | |||
| } | |||
| Navigator.of(context).push(CupertinoPageRoute( | |||
| builder: (context) => GoodsSharePage(widget.model))); | |||
| Navigator.of(context).push(CupertinoPageRoute(builder: (context) => GoodsSharePage(widget.model))); | |||
| } | |||
| } | |||
| @@ -166,8 +170,7 @@ class _GooddsDetailsFooterContainerState | |||
| return SafeArea( | |||
| child: Container( | |||
| width: double.infinity, | |||
| padding: EdgeInsets.only( | |||
| bottom: (height > 10 ? 0 : 8), top: 8, left: 21, right: 12.5), | |||
| padding: EdgeInsets.only(bottom: (height > 10 ? 0 : 8), top: 8, left: 21, right: 12.5), | |||
| decoration: BoxDecoration( | |||
| // boxShadow: [ | |||
| // BoxShadow(color: Colors.grey[300], offset: Offset(0.0, 0.0), blurRadius: 5.0, spreadRadius: 2.0), | |||
| @@ -206,18 +209,12 @@ class _GooddsDetailsFooterContainerState | |||
| onTap: () => _openHome(), | |||
| child: Padding( | |||
| padding: const EdgeInsets.only(right: 35), | |||
| child: _getCustomWidget(model?.home ?? '首页', | |||
| model?.home_color ?? '999999', model?.home_icon ?? ''), | |||
| child: _getCustomWidget(model?.home ?? '首页', model?.home_color ?? '999999', model?.home_icon ?? ''), | |||
| )), | |||
| GestureDetector( | |||
| behavior: HitTestBehavior.opaque, | |||
| onTap: () => _collectOnClick(), | |||
| child: Padding( | |||
| padding: const EdgeInsets.only(right: 0), | |||
| child: _getCustomWidget( | |||
| model?.collect ?? '收藏', | |||
| model?.collect_color ?? '999999', | |||
| model?.collect_icon ?? ''))) | |||
| child: Padding(padding: const EdgeInsets.only(right: 0), child: _getCustomWidget(model?.collect ?? '收藏', model?.collect_color ?? '999999', model?.collect_icon ?? ''))) | |||
| ], | |||
| ); | |||
| } | |||
| @@ -244,40 +241,30 @@ class _GooddsDetailsFooterContainerState | |||
| width: 110, | |||
| // padding: const EdgeInsets.only(left: 30, right: 30, top: 5, bottom: 5), | |||
| decoration: BoxDecoration( | |||
| gradient: LinearGradient(colors: [ | |||
| HexColor.fromHex(model?.share_earn_bg1_color ?? '#FFCA66'), | |||
| HexColor.fromHex(model?.share_earn_bg2_color ?? '#FFD961') | |||
| ], begin: Alignment.centerLeft, end: Alignment.centerRight), | |||
| borderRadius: BorderRadius.only( | |||
| bottomLeft: Radius.circular(25), topLeft: Radius.circular(25))), | |||
| gradient: LinearGradient( | |||
| colors: [HexColor.fromHex(model?.share_earn_bg1_color ?? '#FFCA66'), HexColor.fromHex(model?.share_earn_bg2_color ?? '#FFD961')], | |||
| begin: Alignment.centerLeft, | |||
| end: Alignment.centerRight), | |||
| borderRadius: BorderRadius.only(bottomLeft: Radius.circular(25), topLeft: Radius.circular(25))), | |||
| child: Column( | |||
| crossAxisAlignment: CrossAxisAlignment.center, | |||
| mainAxisAlignment: MainAxisAlignment.center, | |||
| children: <Widget>[ | |||
| RichText( | |||
| text: TextSpan( | |||
| text: '¥ ', | |||
| style: TextStyle( | |||
| fontSize: 12, | |||
| color: HexColor.fromHex( | |||
| model?.share_earn_val_color ?? 'FFFFFF')), | |||
| children: [ | |||
| TextSpan( | |||
| text: model?.share_value ?? '0.0', | |||
| style: TextStyle( | |||
| fontSize: 15, | |||
| fontWeight: FontWeight.bold, | |||
| color: HexColor.fromHex( | |||
| model?.share_earn_color ?? '#FFFFFF'), | |||
| fontFamily: 'Din', | |||
| package: 'zhiying_base_widget')), | |||
| ]), | |||
| text: TextSpan(text: '¥ ', style: TextStyle(fontSize: 12, color: HexColor.fromHex(model?.share_earn_val_color ?? 'FFFFFF')), children: [ | |||
| TextSpan( | |||
| text: model?.share_value ?? '0.0', | |||
| style: TextStyle( | |||
| fontSize: 15, | |||
| fontWeight: FontWeight.bold, | |||
| color: HexColor.fromHex(model?.share_earn_color ?? '#FFFFFF'), | |||
| fontFamily: 'Din', | |||
| package: 'zhiying_base_widget')), | |||
| ]), | |||
| ), | |||
| Text( | |||
| model?.share_earn ?? '分享赚', | |||
| style: TextStyle( | |||
| color: HexColor.fromHex(model?.share_earn_color ?? '#FFFFFF'), | |||
| fontSize: 12), | |||
| style: TextStyle(color: HexColor.fromHex(model?.share_earn_color ?? '#FFFFFF'), fontSize: 12), | |||
| ), | |||
| ], | |||
| ), | |||
| @@ -296,42 +283,29 @@ class _GooddsDetailsFooterContainerState | |||
| height: 44, | |||
| width: 110, | |||
| decoration: BoxDecoration( | |||
| gradient: LinearGradient(colors: [ | |||
| HexColor.fromHex(model?.save_earn_bg1_color ?? '#FF6969'), | |||
| HexColor.fromHex(model?.save_earn_bg2_color ?? '#FF4646') | |||
| ], begin: Alignment.centerLeft, end: Alignment.centerRight), | |||
| borderRadius: BorderRadius.only( | |||
| bottomRight: Radius.circular(25), | |||
| topRight: Radius.circular(25))), | |||
| gradient: LinearGradient( | |||
| colors: [HexColor.fromHex(model?.save_earn_bg1_color ?? '#FF6969'), HexColor.fromHex(model?.save_earn_bg2_color ?? '#FF4646')], | |||
| begin: Alignment.centerLeft, | |||
| end: Alignment.centerRight), | |||
| borderRadius: BorderRadius.only(bottomRight: Radius.circular(25), topRight: Radius.circular(25))), | |||
| child: Column( | |||
| crossAxisAlignment: CrossAxisAlignment.center, | |||
| mainAxisAlignment: MainAxisAlignment.center, | |||
| children: <Widget>[ | |||
| RichText( | |||
| text: TextSpan( | |||
| text: '¥ ', | |||
| style: TextStyle( | |||
| fontSize: 12, | |||
| color: HexColor.fromHex( | |||
| model?.save_earn_val_color ?? 'FFFFFF')), | |||
| children: [ | |||
| TextSpan( | |||
| text: model?.slef_buy_value ?? '0.0', | |||
| style: TextStyle( | |||
| fontSize: 15, | |||
| fontWeight: FontWeight.bold, | |||
| color: HexColor.fromHex( | |||
| model?.save_earn_val_color ?? '#FFFFFF'), | |||
| fontFamily: 'Din', | |||
| package: 'zhiying_base_widget', | |||
| )), | |||
| ]), | |||
| text: TextSpan(text: '¥ ', style: TextStyle(fontSize: 12, color: HexColor.fromHex(model?.save_earn_val_color ?? 'FFFFFF')), children: [ | |||
| TextSpan( | |||
| text: model?.slef_buy_value ?? '0.0', | |||
| style: TextStyle( | |||
| fontSize: 15, | |||
| fontWeight: FontWeight.bold, | |||
| color: HexColor.fromHex(model?.save_earn_val_color ?? '#FFFFFF'), | |||
| fontFamily: 'Din', | |||
| package: 'zhiying_base_widget', | |||
| )), | |||
| ]), | |||
| ), | |||
| Text(model?.save_earn ?? '自购省', | |||
| style: TextStyle( | |||
| color: | |||
| HexColor.fromHex(model?.save_earn_color ?? '#FFFFFF'), | |||
| fontSize: 12)) | |||
| Text(model?.save_earn ?? '自购省', style: TextStyle(color: HexColor.fromHex(model?.save_earn_color ?? '#FFFFFF'), fontSize: 12)) | |||
| ], | |||
| ), | |||
| ), | |||
| @@ -354,8 +328,7 @@ class _GooddsDetailsFooterContainerState | |||
| const SizedBox(height: 5), | |||
| /// 图片 | |||
| Text(text, | |||
| style: TextStyle(color: HexColor.fromHex(textColor), fontSize: 11)) | |||
| Text(text, style: TextStyle(color: HexColor.fromHex(textColor), fontSize: 11)) | |||
| ], | |||
| ); | |||
| } | |||
| @@ -19,8 +19,8 @@ class GoodsDetailsSlideBannerWidget extends StatelessWidget { | |||
| @override | |||
| Widget build(BuildContext context) { | |||
| return BlocProvider<GoodsDetailsSlideBannerBloc>( | |||
| create: (_) => GoodsDetailsSlideBannerBloc(repository: GoodsDetailsSlideBannerRepository())..add(GoodsDetailsSlideBannerInitEvent(model: model)), | |||
| child: GoodsDetailsSlideBannerContainer(model), | |||
| create: (_) => GoodsDetailsSlideBannerBloc(repository: GoodsDetailsSlideBannerRepository()),//..add(GoodsDetailsSlideBannerInitEvent(model: model)), | |||
| child: GoodsDetailsSlideBannerContainer(model, key: UniqueKey(),), | |||
| ); | |||
| } | |||
| } | |||
| @@ -40,6 +40,12 @@ class _GoodsDetailsSlideBannerContainerState extends State<GoodsDetailsSlideBann | |||
| print('点击了 $model'); | |||
| } | |||
| @override | |||
| void initState() { | |||
| BlocProvider.of<GoodsDetailsSlideBannerBloc>(context).add(GoodsDetailsSlideBannerInitEvent(model: widget?.model)); | |||
| super.initState(); | |||
| } | |||
| @override | |||
| Widget build(BuildContext context) { | |||
| return BlocConsumer<GoodsDetailsSlideBannerBloc, GoodsDetailsSlideBannerState>( | |||
| @@ -20,18 +20,29 @@ class StoreWidget extends StatelessWidget { | |||
| @override | |||
| Widget build(BuildContext context) { | |||
| return BlocProvider<StoreBloc>( | |||
| create: (_) => StoreBloc(repository: StoreRepository())..add(StoreInitEvent(model: model)), | |||
| child: StoreContainer(), | |||
| create: (_) => StoreBloc(repository: StoreRepository()),//..add(StoreInitEvent(model: model)), | |||
| child: StoreContainer(model, key: UniqueKey(),), | |||
| ); | |||
| } | |||
| } | |||
| class StoreContainer extends StatefulWidget { | |||
| final Map<String, dynamic> model; | |||
| const StoreContainer(this.model, {Key key}) : super(key: key); | |||
| @override | |||
| _StoreContainerState createState() => _StoreContainerState(); | |||
| } | |||
| class _StoreContainerState extends State<StoreContainer> { | |||
| @override | |||
| void initState() { | |||
| BlocProvider.of<StoreBloc>(context).add(StoreInitEvent(model: widget?.model)); | |||
| super.initState(); | |||
| } | |||
| /// 点击更多 | |||
| void _onMoreClick() {} | |||
| @@ -5,6 +5,7 @@ import 'package:zhiying_base_widget/widgets/hot_ranking/hot_ranking_list/model/h | |||
| import 'package:zhiying_base_widget/widgets/hot_ranking/hot_ranking_list/model/hot_ranking_list_model.dart'; | |||
| import 'package:zhiying_comm/zhiying_comm.dart'; | |||
| import 'package:cached_network_image/cached_network_image.dart'; | |||
| import 'dart:ui' as ui show ParagraphBuilder, PlaceholderAlignment; | |||
| import 'package:zhiying_comm/zhiying_comm.dart'; | |||
| class HotRankingGoods extends StatelessWidget { | |||
| @@ -26,8 +27,7 @@ class HotRankingGoods extends StatelessWidget { | |||
| Providers providers = getProvider(good.provider); | |||
| return GestureDetector( | |||
| onTap: () { | |||
| RouterUtil.route(SkipModel(skipIdentifier: "goods_details"), | |||
| {"provider": good.provider, "good_id": good.goodId}, context); | |||
| RouterUtil.route(SkipModel(skipIdentifier: "goods_details"), good?.toJson(), context); | |||
| }, | |||
| child: Stack( | |||
| children: <Widget>[ | |||
| @@ -60,27 +60,27 @@ class HotRankingGoods extends StatelessWidget { | |||
| children: <Widget>[ | |||
| Expanded( | |||
| child: RichText( | |||
| textAlign: TextAlign.start, | |||
| overflow: TextOverflow.ellipsis, | |||
| maxLines: 2, | |||
| text: TextSpan(children: <InlineSpan>[ | |||
| WidgetSpan( | |||
| alignment: ui.PlaceholderAlignment.middle, | |||
| child: Container( | |||
| padding: EdgeInsets.only( | |||
| left: 4.w, right: 4.w, top: 1, bottom: 1), | |||
| decoration: BoxDecoration( | |||
| color: HexColor.fromHex( | |||
| providers.providerBgColor), | |||
| borderRadius: | |||
| BorderRadius.circular(4)), | |||
| child: Padding( | |||
| padding: EdgeInsets.only( | |||
| left: 4.w, right: 4.w), | |||
| child: Text( | |||
| good.providerName ?? "", | |||
| style: TextStyle( | |||
| color: HexColor.fromHex( | |||
| providers.providerNameColor, | |||
| ), | |||
| fontSize: 18.sp), | |||
| ), | |||
| BorderRadius.circular(2.5)), | |||
| child: Text( | |||
| good.providerName ?? "", | |||
| style: TextStyle( | |||
| color: HexColor.fromHex( | |||
| providers.providerNameColor, | |||
| ), | |||
| fontSize: 18.sp), | |||
| ), | |||
| )), | |||
| WidgetSpan( | |||
| @@ -211,9 +211,10 @@ class HotRankingGoods extends StatelessWidget { | |||
| children: <Widget>[ | |||
| Expanded( | |||
| child: Container( | |||
| alignment: Alignment.centerLeft, | |||
| height: 40.w, | |||
| padding: EdgeInsets.only( | |||
| left: 64.w, | |||
| left: 40.w, | |||
| ), | |||
| margin: | |||
| EdgeInsets.only(right: 20, left: 20.w), | |||
| @@ -36,19 +36,22 @@ class Good { | |||
| String marketPrice; | |||
| String currentPrice; | |||
| String inorderCount; | |||
| Map<String, dynamic> detailData; | |||
| Good( | |||
| {this.provider, | |||
| this.providerName, | |||
| this.goodId, | |||
| this.goodImage, | |||
| this.goodTitle, | |||
| this.shopName, | |||
| this.coupon, | |||
| this.commission, | |||
| this.marketPrice, | |||
| this.currentPrice, | |||
| this.inorderCount}); | |||
| Good({ | |||
| this.provider, | |||
| this.providerName, | |||
| this.goodId, | |||
| this.goodImage, | |||
| this.goodTitle, | |||
| this.shopName, | |||
| this.coupon, | |||
| this.commission, | |||
| this.marketPrice, | |||
| this.currentPrice, | |||
| this.inorderCount, | |||
| this.detailData, | |||
| }); | |||
| Good.fromJson(Map<String, dynamic> json) { | |||
| provider = json['provider']; | |||
| @@ -62,6 +65,7 @@ class Good { | |||
| marketPrice = json['market_price']; | |||
| currentPrice = json['current_price']; | |||
| inorderCount = json['inorder_count']; | |||
| detailData = json['detail_data']; | |||
| } | |||
| Map<String, dynamic> toJson() { | |||
| @@ -77,6 +81,7 @@ class Good { | |||
| data['market_price'] = this.marketPrice; | |||
| data['current_price'] = this.currentPrice; | |||
| data['inorder_count'] = this.inorderCount; | |||
| data['detail_data'] = this.detailData; | |||
| return data; | |||
| } | |||
| } | |||
| @@ -58,7 +58,7 @@ class _MineHeaderContainerState extends State<MineHeaderContainer> { | |||
| child: ClipRRect( | |||
| borderRadius: BorderRadius.circular(28), | |||
| child: CachedNetworkImage( | |||
| imageUrl: profile.avatar, | |||
| imageUrl: profile?.avatar ?? '', | |||
| fit: BoxFit.cover, | |||
| ), | |||
| ), | |||