wurong
2 years ago
12 changed files with 402 additions and 2 deletions
After Width: | Height: | Size: 996 B |
After Width: | Height: | Size: 1.2 KiB |
After Width: | Height: | Size: 1.4 KiB |
After Width: | Height: | Size: 2.7 KiB |
After Width: | Height: | Size: 686 B |
After Width: | Height: | Size: 752 B |
@ -0,0 +1,174 @@ |
|||||||
|
import 'package:dio/dio.dart'; |
||||||
|
import 'package:flutter/material.dart'; |
||||||
|
import 'package:flutter_easyloading/flutter_easyloading.dart'; |
||||||
|
import 'package:flutter_smart_dialog/flutter_smart_dialog.dart'; |
||||||
|
import 'package:huixiang/utils/font_weight.dart'; |
||||||
|
import 'package:flutter_screenutil/flutter_screenutil.dart'; |
||||||
|
import 'package:huixiang/view_widget/my_appbar.dart'; |
||||||
|
|
||||||
|
import '../generated/l10n.dart'; |
||||||
|
import '../retrofit/data/base_data.dart'; |
||||||
|
import '../retrofit/data/channels_list.dart'; |
||||||
|
import '../retrofit/retrofit_api.dart'; |
||||||
|
import '../utils/flutter_utils.dart'; |
||||||
|
|
||||||
|
class LoginStoreSelect extends StatefulWidget { |
||||||
|
|
||||||
|
@override |
||||||
|
State<StatefulWidget> createState() { |
||||||
|
return _LoginStoreSelect(); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
class _LoginStoreSelect extends State<LoginStoreSelect> { |
||||||
|
ApiService apiService; |
||||||
|
ChannelsList channelsList; |
||||||
|
int channelIndex = 0; |
||||||
|
|
||||||
|
@override |
||||||
|
void initState() { |
||||||
|
super.initState(); |
||||||
|
EasyLoading.show(status: S.current.zhengzaijiazai); |
||||||
|
queryChannels(); |
||||||
|
} |
||||||
|
|
||||||
|
queryChannels() async{ |
||||||
|
apiService = ApiService(Dio(), context: context); |
||||||
|
BaseData<ChannelsList> baseData = await apiService.appChannels().catchError((error) { |
||||||
|
print(error.message); |
||||||
|
SmartDialog.showToast(AppUtils.dioErrorTypeToString(error.type), |
||||||
|
alignment: Alignment.center); |
||||||
|
}); |
||||||
|
if (baseData != null && baseData.isSuccess) { |
||||||
|
channelsList = baseData.data; |
||||||
|
setState((){}); |
||||||
|
EasyLoading.dismiss(); |
||||||
|
} else { |
||||||
|
if (baseData?.msg != null) |
||||||
|
SmartDialog.showToast(baseData.msg, alignment: Alignment.center); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
@override |
||||||
|
Widget build(BuildContext context) { |
||||||
|
return Scaffold( |
||||||
|
backgroundColor: Colors.white, |
||||||
|
appBar: MyAppBar( |
||||||
|
title: "渠道来源", |
||||||
|
titleColor: Colors.black, |
||||||
|
titleSize: 18.sp, |
||||||
|
background: Color(0xFFFFFFFF), |
||||||
|
leadingColor: Colors.black, |
||||||
|
), |
||||||
|
body: Container( |
||||||
|
color: Color(0xFFFFFFFF), |
||||||
|
height: double.infinity, |
||||||
|
child: Column( |
||||||
|
children: [ |
||||||
|
Padding(padding:EdgeInsets.only(top:18.h,bottom:20.h,left:18.w), |
||||||
|
child: Row( |
||||||
|
children: [ |
||||||
|
Image.asset( |
||||||
|
"assets/image/login_channel.webp", |
||||||
|
fit: BoxFit.fill, |
||||||
|
width:24, |
||||||
|
height:24, |
||||||
|
), |
||||||
|
SizedBox(width:12.w), |
||||||
|
Text( |
||||||
|
"Hi,您是通过什么途径了解到这款APP的?", |
||||||
|
style: TextStyle( |
||||||
|
fontWeight: MyFontWeight.bold, |
||||||
|
fontSize: 15.sp, |
||||||
|
color: Color(0xFF181818), |
||||||
|
), |
||||||
|
), |
||||||
|
], |
||||||
|
)), |
||||||
|
Expanded(child: ListView.builder( |
||||||
|
physics: BouncingScrollPhysics(), |
||||||
|
shrinkWrap: true, |
||||||
|
itemBuilder: (context, position) { |
||||||
|
return GestureDetector( |
||||||
|
onTap: () { |
||||||
|
setState(() { |
||||||
|
channelIndex = position; |
||||||
|
}); |
||||||
|
}, |
||||||
|
child: channelItem(position), |
||||||
|
); |
||||||
|
}, |
||||||
|
itemCount:(channelsList != null && (channelsList?.channels?.length ?? 0) > 0) ? channelsList.channels.length : 0, |
||||||
|
)), |
||||||
|
if(channelsList != null && (channelsList.channels.length) > 0) |
||||||
|
GestureDetector( |
||||||
|
onTap: () { |
||||||
|
Navigator.pop(context,channelsList.channels[channelIndex]); |
||||||
|
}, |
||||||
|
child: Container( |
||||||
|
width: double.infinity, |
||||||
|
alignment: Alignment.center, |
||||||
|
decoration: BoxDecoration( |
||||||
|
color: Color(0xFF32A060), |
||||||
|
borderRadius: BorderRadius.circular(27), |
||||||
|
), |
||||||
|
margin: EdgeInsets.only( |
||||||
|
left: 16, right: 16, bottom: 21), |
||||||
|
padding: EdgeInsets.symmetric(vertical:18.h), |
||||||
|
child: Text( |
||||||
|
S.of(context).queren, |
||||||
|
style: TextStyle( |
||||||
|
fontSize: 16.sp, |
||||||
|
fontWeight: MyFontWeight.medium, |
||||||
|
color: Colors.white, |
||||||
|
), |
||||||
|
), |
||||||
|
), |
||||||
|
) |
||||||
|
], |
||||||
|
), |
||||||
|
), |
||||||
|
); |
||||||
|
} |
||||||
|
|
||||||
|
Widget channelItem(index){ |
||||||
|
return Container( |
||||||
|
height:52 , |
||||||
|
margin: EdgeInsets.only(bottom: 12,left: 14,right: 14), |
||||||
|
child: Stack( |
||||||
|
alignment: Alignment.bottomRight, |
||||||
|
children: [ |
||||||
|
Container( |
||||||
|
height: 52.h, |
||||||
|
width: double.infinity, |
||||||
|
decoration: BoxDecoration( |
||||||
|
borderRadius: new BorderRadius.circular(6), |
||||||
|
border: Border.all( |
||||||
|
color: channelIndex == index ? Color(0xFF32A060) : Color(0xFFF7F7F7), |
||||||
|
width: channelIndex == index ? 1 : 0, |
||||||
|
), |
||||||
|
color:channelIndex == index ? Color(0xFFF0FAF4) : Color(0xFFF7F7F7), |
||||||
|
), |
||||||
|
alignment: Alignment.centerLeft, |
||||||
|
padding: EdgeInsets.only(left: 12,), |
||||||
|
child: Text( |
||||||
|
channelsList.channels[index], |
||||||
|
style: TextStyle( |
||||||
|
fontWeight: MyFontWeight.bold, |
||||||
|
fontSize: 14.sp, |
||||||
|
color: channelIndex == index ? Color(0xFF32A060) : Colors.black, |
||||||
|
), |
||||||
|
), |
||||||
|
), |
||||||
|
if (index == channelIndex) |
||||||
|
Image.asset( |
||||||
|
"assets/image/recharge.webp", |
||||||
|
width: 20, |
||||||
|
height: 20, |
||||||
|
fit: BoxFit.fill, |
||||||
|
), |
||||||
|
], |
||||||
|
), |
||||||
|
); |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,155 @@ |
|||||||
|
/// channels : ["海峡","回乡","boom"] |
||||||
|
/// isOpen : true |
||||||
|
/// preferentialList : [{"createTime":"2023-04-21 16:15:42","giftdMoney":"0.00","gitfdCouponId":null,"id":"1506553893994102784","isDeleted":0,"rechargeMoney":"0.01","rechargeType":0,"remark":"<p>充值说明:<br />平台充值根据用户在平台的会员等级享有不同的充值权益。<br />银卡用户享1.1倍充值会员权益,即充值100元账户110元。<br />金卡用户享1.2倍充值会员权益,即充值100元账户120元。<br />共创用户享1.3倍充值会员权益,即充值100元账户130元。<br />平台充值金可在平台上所有品牌和门店使用,包含:农场火锅、海峡姐妹、前进麦味、百年川椒、农场煮意、一心回乡生态农场等。<br />储值活动不与其他活动同享</p>","sortValue":1,"tenantCode":"admin"}] |
||||||
|
|
||||||
|
class ChannelsList { |
||||||
|
ChannelsList({ |
||||||
|
List<String> channels, |
||||||
|
bool isOpen, |
||||||
|
List<PreferentialList> preferentialList,}){ |
||||||
|
_channels = channels; |
||||||
|
_isOpen = isOpen; |
||||||
|
_preferentialList = preferentialList; |
||||||
|
} |
||||||
|
|
||||||
|
ChannelsList.fromJson(dynamic json) { |
||||||
|
_channels = json['channels'] != null ? json['channels'].cast<String>() : []; |
||||||
|
_isOpen = json['isOpen']; |
||||||
|
if (json['preferentialList'] != null) { |
||||||
|
_preferentialList = []; |
||||||
|
json['preferentialList'].forEach((v) { |
||||||
|
_preferentialList.add(PreferentialList.fromJson(v)); |
||||||
|
}); |
||||||
|
} |
||||||
|
} |
||||||
|
List<String> _channels; |
||||||
|
bool _isOpen; |
||||||
|
List<PreferentialList> _preferentialList; |
||||||
|
ChannelsList copyWith({ List<String> channels, |
||||||
|
bool isOpen, |
||||||
|
List<PreferentialList> preferentialList, |
||||||
|
}) => ChannelsList( channels: channels ?? _channels, |
||||||
|
isOpen: isOpen ?? _isOpen, |
||||||
|
preferentialList: preferentialList ?? _preferentialList, |
||||||
|
); |
||||||
|
List<String> get channels => _channels; |
||||||
|
bool get isOpen => _isOpen; |
||||||
|
List<PreferentialList> get preferentialList => _preferentialList; |
||||||
|
|
||||||
|
Map<String, dynamic> toJson() { |
||||||
|
final map = <String, dynamic>{}; |
||||||
|
map['channels'] = _channels; |
||||||
|
map['isOpen'] = _isOpen; |
||||||
|
if (_preferentialList != null) { |
||||||
|
map['preferentialList'] = _preferentialList.map((v) => v.toJson()).toList(); |
||||||
|
} |
||||||
|
return map; |
||||||
|
} |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
/// createTime : "2023-04-21 16:15:42" |
||||||
|
/// giftdMoney : "0.00" |
||||||
|
/// gitfdCouponId : null |
||||||
|
/// id : "1506553893994102784" |
||||||
|
/// isDeleted : 0 |
||||||
|
/// rechargeMoney : "0.01" |
||||||
|
/// rechargeType : 0 |
||||||
|
/// remark : "<p>充值说明:<br />平台充值根据用户在平台的会员等级享有不同的充值权益。<br />银卡用户享1.1倍充值会员权益,即充值100元账户110元。<br />金卡用户享1.2倍充值会员权益,即充值100元账户120元。<br />共创用户享1.3倍充值会员权益,即充值100元账户130元。<br />平台充值金可在平台上所有品牌和门店使用,包含:农场火锅、海峡姐妹、前进麦味、百年川椒、农场煮意、一心回乡生态农场等。<br />储值活动不与其他活动同享</p>" |
||||||
|
/// sortValue : 1 |
||||||
|
/// tenantCode : "admin" |
||||||
|
|
||||||
|
class PreferentialList { |
||||||
|
PreferentialList({ |
||||||
|
String createTime, |
||||||
|
String giftdMoney, |
||||||
|
dynamic gitfdCouponId, |
||||||
|
String id, |
||||||
|
num isDeleted, |
||||||
|
String rechargeMoney, |
||||||
|
num rechargeType, |
||||||
|
String remark, |
||||||
|
num sortValue, |
||||||
|
String tenantCode,}){ |
||||||
|
_createTime = createTime; |
||||||
|
_giftdMoney = giftdMoney; |
||||||
|
_gitfdCouponId = gitfdCouponId; |
||||||
|
_id = id; |
||||||
|
_isDeleted = isDeleted; |
||||||
|
_rechargeMoney = rechargeMoney; |
||||||
|
_rechargeType = rechargeType; |
||||||
|
_remark = remark; |
||||||
|
_sortValue = sortValue; |
||||||
|
_tenantCode = tenantCode; |
||||||
|
} |
||||||
|
|
||||||
|
PreferentialList.fromJson(dynamic json) { |
||||||
|
_createTime = json['createTime']; |
||||||
|
_giftdMoney = json['giftdMoney']; |
||||||
|
_gitfdCouponId = json['gitfdCouponId']; |
||||||
|
_id = json['id']; |
||||||
|
_isDeleted = json['isDeleted']; |
||||||
|
_rechargeMoney = json['rechargeMoney']; |
||||||
|
_rechargeType = json['rechargeType']; |
||||||
|
_remark = json['remark']; |
||||||
|
_sortValue = json['sortValue']; |
||||||
|
_tenantCode = json['tenantCode']; |
||||||
|
} |
||||||
|
String _createTime; |
||||||
|
String _giftdMoney; |
||||||
|
dynamic _gitfdCouponId; |
||||||
|
String _id; |
||||||
|
num _isDeleted; |
||||||
|
String _rechargeMoney; |
||||||
|
num _rechargeType; |
||||||
|
String _remark; |
||||||
|
num _sortValue; |
||||||
|
String _tenantCode; |
||||||
|
PreferentialList copyWith({ String createTime, |
||||||
|
String giftdMoney, |
||||||
|
dynamic gitfdCouponId, |
||||||
|
String id, |
||||||
|
num isDeleted, |
||||||
|
String rechargeMoney, |
||||||
|
num rechargeType, |
||||||
|
String remark, |
||||||
|
num sortValue, |
||||||
|
String tenantCode, |
||||||
|
}) => PreferentialList( createTime: createTime ?? _createTime, |
||||||
|
giftdMoney: giftdMoney ?? _giftdMoney, |
||||||
|
gitfdCouponId: gitfdCouponId ?? _gitfdCouponId, |
||||||
|
id: id ?? _id, |
||||||
|
isDeleted: isDeleted ?? _isDeleted, |
||||||
|
rechargeMoney: rechargeMoney ?? _rechargeMoney, |
||||||
|
rechargeType: rechargeType ?? _rechargeType, |
||||||
|
remark: remark ?? _remark, |
||||||
|
sortValue: sortValue ?? _sortValue, |
||||||
|
tenantCode: tenantCode ?? _tenantCode, |
||||||
|
); |
||||||
|
String get createTime => _createTime; |
||||||
|
String get giftdMoney => _giftdMoney; |
||||||
|
dynamic get gitfdCouponId => _gitfdCouponId; |
||||||
|
String get id => _id; |
||||||
|
num get isDeleted => _isDeleted; |
||||||
|
String get rechargeMoney => _rechargeMoney; |
||||||
|
num get rechargeType => _rechargeType; |
||||||
|
String get remark => _remark; |
||||||
|
num get sortValue => _sortValue; |
||||||
|
String get tenantCode => _tenantCode; |
||||||
|
|
||||||
|
Map<String, dynamic> toJson() { |
||||||
|
final map = <String, dynamic>{}; |
||||||
|
map['createTime'] = _createTime; |
||||||
|
map['giftdMoney'] = _giftdMoney; |
||||||
|
map['gitfdCouponId'] = _gitfdCouponId; |
||||||
|
map['id'] = _id; |
||||||
|
map['isDeleted'] = _isDeleted; |
||||||
|
map['rechargeMoney'] = _rechargeMoney; |
||||||
|
map['rechargeType'] = _rechargeType; |
||||||
|
map['remark'] = _remark; |
||||||
|
map['sortValue'] = _sortValue; |
||||||
|
map['tenantCode'] = _tenantCode; |
||||||
|
return map; |
||||||
|
} |
||||||
|
|
||||||
|
} |
Loading…
Reference in new issue