基础组件库
 
 
 
 
 

181 строка
5.6 KiB

  1. import 'dart:io';
  2. import 'package:flutter/material.dart';
  3. import 'package:zhiying_base_widget/widgets/goods_details/coupon/bloc/bloc.dart';
  4. import 'package:zhiying_base_widget/widgets/goods_details/coupon/bloc/counpon_repository.dart';
  5. import 'package:zhiying_base_widget/widgets/goods_details/coupon/counpon_sk.dart';
  6. import 'package:zhiying_base_widget/widgets/goods_details/coupon/model/counpon_model.dart';
  7. import 'package:zhiying_comm/zhiying_comm.dart';
  8. import 'package:flutter_bloc/flutter_bloc.dart';
  9. import 'package:cached_network_image/cached_network_image.dart';
  10. import 'package:provider/provider.dart';
  11. import 'package:flutter_alibc/alibc_model.dart';
  12. import 'package:flutter_alibc/flutter_alibc.dart';
  13. import 'package:fluttertoast/fluttertoast.dart';
  14. ///
  15. /// 优惠券widget
  16. ///
  17. class CounponWidget extends StatelessWidget {
  18. final Map<String, dynamic> model;
  19. const CounponWidget(this.model);
  20. @override
  21. Widget build(BuildContext context) {
  22. // return Container();
  23. return BlocProvider<CounponBloc>(
  24. create: (_) => CounponBloc(repository: CounponRepository()), //..add(CounponInitEvent(model: model)),
  25. child: CounponWidgetContainer(
  26. model,
  27. key: UniqueKey(),
  28. ),
  29. );
  30. }
  31. }
  32. class CounponWidgetContainer extends StatefulWidget {
  33. final Map<String, dynamic> model;
  34. const CounponWidgetContainer(this.model, {Key key}) : super(key: key);
  35. @override
  36. _CounponWidgetContainerState createState() => _CounponWidgetContainerState();
  37. }
  38. class _CounponWidgetContainerState extends State<CounponWidgetContainer> {
  39. UserInfoModel _user;
  40. @override
  41. void initState() {
  42. BlocProvider.of<CounponBloc>(context).add(CounponInitEvent(model: widget?.model));
  43. super.initState();
  44. }
  45. @override
  46. void didChangeDependencies() {
  47. _user = Provider.of<UserInfoNotifier>(context).userInfo;
  48. super.didChangeDependencies();
  49. }
  50. /// 点击领取
  51. void _onJump(CounponModel model) async{
  52. print(_user?.toString());
  53. if (_user?.token == null || _user.token == '') {
  54. print('need login...');
  55. RouterUtil.goLogin(context);
  56. return;
  57. }
  58. if (EmptyUtil.isEmpty(model.buy_url)) {
  59. Fluttertoast.showToast(msg: '购买链接不存在');
  60. return;
  61. }
  62. if (model.provider== 'taobao') {
  63. // bool isAuth = await TaobaoAuth.isAuth();
  64. if (!_user.isTBAuth) {
  65. TaobaoAuth.auth(context);
  66. return;
  67. }
  68. TradeResult result;
  69. if (Platform.isAndroid) {
  70. result = await FlutterAlibc.openByUrl(url: model.buy_url, backUrl: "alisdk://");
  71. } else if (Platform.isIOS) {
  72. result = await FlutterAlibc.openByUrl(url: model.buy_url);
  73. }
  74. Logger.debug('${result.errorCode} ${result.errorMessage} ');
  75. } else {
  76. RouterUtil.openWebview(model.buy_url, context);
  77. }
  78. }
  79. @override
  80. Widget build(BuildContext context) {
  81. return BlocConsumer<CounponBloc, CounponState>(
  82. listener: (context, state) {},
  83. buildWhen: (prev, current) {
  84. if (current is CounponErrorState) {
  85. return false;
  86. }
  87. return true;
  88. },
  89. builder: (context, state) {
  90. if (state is CounponLoadedState) {
  91. return _getMainWdiget(state.model);
  92. }
  93. return CounponSkeleton();
  94. },
  95. );
  96. }
  97. /// 主视图
  98. Widget _getMainWdiget(CounponModel model) {
  99. return Visibility(
  100. visible: !EmptyUtil.isEmpty(model?.coupon_price),
  101. child: GestureDetector(
  102. onTap: () => _onJump(model),
  103. behavior: HitTestBehavior.opaque,
  104. child: Container(
  105. width: double.infinity,
  106. color: Colors.white,
  107. padding: const EdgeInsets.only(left: 12.5, right: 12.5, top: 12),
  108. child: Container(
  109. // color: Colors.red,
  110. width: double.infinity,
  111. padding: const EdgeInsets.only(left: 18.5, top: 12, bottom: 14),
  112. decoration: BoxDecoration(
  113. image: DecorationImage(
  114. image: CachedNetworkImageProvider(
  115. model?.bg_img ?? '',
  116. ),
  117. fit: BoxFit.fill)),
  118. alignment: Alignment.centerLeft,
  119. child: Row(
  120. children: <Widget>[
  121. /// 价格
  122. _getPriceWidget(model),
  123. const SizedBox(width: 7.5),
  124. /// 有效期
  125. _getTimeWidget(model)
  126. ],
  127. ),
  128. ),
  129. ),
  130. ),
  131. );
  132. }
  133. /// 价格
  134. Widget _getPriceWidget(CounponModel model) {
  135. return Row(
  136. crossAxisAlignment: CrossAxisAlignment.center,
  137. mainAxisAlignment: MainAxisAlignment.center,
  138. children: <Widget>[
  139. /// 价格类型
  140. Text(model?.price_type ?? '¥ ', style: TextStyle(fontSize: 15, color: HexColor.fromHex(model?.price_type_color ?? '#FFFFFF'))),
  141. /// 价格
  142. Text(model?.coupon_price ?? '100',
  143. style: TextStyle(fontSize: 30, color: HexColor.fromHex(model?.coupon_price_color ?? '#FFFFFF'), fontFamily: 'Din', package: 'zhiying_base_widget')),
  144. ],
  145. );
  146. }
  147. /// 名称与有效期
  148. Widget _getTimeWidget(CounponModel model) {
  149. return Column(
  150. crossAxisAlignment: CrossAxisAlignment.start,
  151. children: <Widget>[
  152. /// 标题
  153. Text(model?.coupon_title ?? '优惠券', style: TextStyle(fontSize: 17, color: HexColor.fromHex(model?.coupon_title_color ?? '#FFFFFF'))),
  154. /// 到期时间
  155. Visibility(
  156. visible: !EmptyUtil.isEmpty(model?.coupon_endtime),
  157. child: Text(model?.coupon_endtime ?? '有效期至2020-10-01', style: TextStyle(fontSize: 10, color: HexColor.fromHex(model?.coupon_time_color ?? '#FFFFFF'))))
  158. ],
  159. );
  160. }
  161. }